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 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 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 - -gpg 1.0.1 okay with MP-RAS 3.02.01 Edition 5 using gcc 2.95.2 and EGD - By - -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 ) - - 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 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 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 - 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 - Verifying detached signatures with an empty file yields a rc of 0. - FIX: 1999-05-06 - -[ **] #17 1999-05-18 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 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" 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 - -- 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 ): -===================== - -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 - - * 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 - - * gpg-agent.c (create_private_keys_directory) - (create_directories): New. - (main): Try to create a home directory. - -2002-09-04 Neal H. Walfield - - * gpg-agent.c (main): Use sigaction, not signal. - -2002-09-03 Neal H. Walfield - - * findkey.c: Include . - (agent_write_private_key): Prefer POSIX compatibity, open and - fdopen, over the simplicity of GNU extensions, fopen(file, "x"). - -2002-08-22 Werner Koch - - * 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 - - * 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 - - * 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 - - * 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 - - * query.c (start_pinentry): Use GNUPG_DERAULT_PINENTRY. - * call-scd.c (start_scd): Use GNUPG_DEFAULT_SCDAEMON. - -2002-06-28 Werner Koch - - * 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 - - * 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 - - * 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 - - * 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 - - * protect-tool.c (read_file): New. - (read_key): Factored most code out to read_file. - -2002-06-17 Werner Koch - - * 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 - - * gpg-agent.c (main): New option --disable-pth. - -2002-06-11 Werner Koch - - * protect-tool.c: Add command --show-keygrip - (show_keygrip): New. - -2002-05-23 Werner Koch - - * 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 - - * 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 - - * cache.c (housekeeping, agent_put_cache): Use our time() wrapper. - -2002-04-26 Werner Koch - - * 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 - - * 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 - - * 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 - - * protect-tool.c (show_file): New. Used as default action. - -2002-03-28 Werner Koch - - * 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 - - * learncard.c (kpinfo_cb): Remove the content restrictions from - the keyID. - -2002-03-06 Werner Koch - - * 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 - - * call-scd.c (inq_needpin): New. - (agent_card_pksign): Add getpin_cb args. - (agent_card_pkdecrypt): New. - -2002-03-04 Werner Koch - - * 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 - - * 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 - - * 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 - - * 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 - - * cache.c (housekeeping): Fixed linking in the remove case. - -2002-02-01 Werner Koch - - * 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 - - * 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 - - * protect.c: New. - (hash_passphrase): Based on the GnuPG 1.0.6 version. - * protect-tool.c: New - -2002-01-29 Werner Koch - - * findkey.c (agent_key_available): New. - * command.c (cmd_havekey): New. - (register_commands): And register new command. - -2002-01-20 Werner Koch - - * 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 - - * 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 - - * trustlist.c: New. - * command.c (cmd_istrusted, cmd_listtrusted, cmd_marktrusted): New. - -2002-01-07 Werner Koch - - * genkey.c: Store the secret part and return the public part. - -2002-01-03 Werner Koch - - * command.c (cmd_get_passphrase): New. - (cmd_clear_passphrase): New. - * query.c (agent_get_passphrase): New. - -2002-01-02 Werner Koch - - * 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 - - * keyformat.txt: New. - -2001-12-19 Marcus Brinkmann - - * query.c (start_pinentry): Add new argument to assuan_pipe_connect. - -2001-12-18 Werner Koch - - * Makefile.am: Use LIBGCRYPT macros - -2001-12-14 Werner Koch - - * 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 - - * query.c (LINELENGTH): Removed. - (agent_askpin): Use ASSUAN_LINELENGTH, not LINELENGTH. - -2001-11-19 Werner Koch - - * 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 - - * 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 - - * 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 - - * 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 -#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 - -#include -#include -#include -#include -#include - -#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 -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef USE_GNU_PTH -# include -#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 -#include -#include -#include -#include -#include -#include - -#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 - - 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 - - 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 - - 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 - SETKEY - - 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 - - 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 - - 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 - - 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 [ ] - - 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 - - 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 -#include -#include -#include -#include -#include -#include -#include -#include - -#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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#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 -#include -#include -#include -#include -#include -#include - -#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 - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef USE_GNU_PTH -# include -#endif - -#include - -#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: :: */ - 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 -#include -#include -#include -#include -#include -#include -#include -#include - -#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 -#endif -#include -#include -#include -#include -#include - -#undef TEST - -#ifdef TEST -#include -#include -#include -#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 - -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 -#include -#include -#include -#include -#include -#include -#include -#include - -#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 -#include -#include -#include -#include -#include -#include -#include -#include - -#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 - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#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 -#include -#include -#include -#include -#include -#include -#include -#include - -#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: - - (()(4:hash4:sha120:)) + 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 ) ) - ) - */ - 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 -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef USE_GNU_PTH -# include -#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 -#endif -#include -#include -#include -#include -#include -#include -#include -#ifdef HAVE_LOCALE_H -#include -#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 -#include -#include -#include -#include -#include -#include -#include -#include - -#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 - - * assuan.h: Renamed Bad_Certificate_Path to Bad_Certificate_Chain. - -2002-07-30 Werner Koch - - Changed the license from GPL to LGPL. - -2002-07-23 Werner Koch - - * assuan-handler.c (_IO_cookie_io_functions_t): Define it here if - it does not exists. - -2002-06-27 Werner Koch - - * 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 - - * assuan-buffer.c (assuan_write_line): Make sure we never - accidently print an extra LF. - -2002-05-23 Werner Koch - - * 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 - - * 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 - - * assuan-buffer.c (my_log_prefix): New. Use it for all i/o debug - output. - -2002-03-06 Werner Koch - - * assuan-client.c (_assuan_read_from_server): Detect END. - (assuan_transact): Pass it to the data callback. - -2002-02-27 Werner Koch - - * 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 - - * 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 - - * 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 - - * 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 - - * Makefile.am (MOSTLYCLEANFILES): New variable. - -2002-01-23 Werner Koch - - * assuan-socket-connect.c (LOGERRORX): and removed typo. - -2002-01-22 Marcus Brinkmann - - * assuan-socket-connect.c (LOGERRORX): Reverse arguments to fputs. - -2002-01-21 Werner Koch - - * 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 - - * 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 - - * 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 - - * assuan-client.c (_assuan_read_from_server): Skip spaces after - the keyword. - -2002-01-03 Werner Koch - - * assuan-handler.c (assuan_set_okay_line): New. - (process_request): And use it here. - -2002-01-02 Werner Koch - - * 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 - - * 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 - - * 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 - - * 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 - - * assuan-defs.h (LINELENGTH): Define as ASSUAN_LINELENGTH. - assuan.h: Define ASSUAN_LINELENGTH. - -2001-12-13 Marcus Brinkmann - - * assuan-buffer.c (assuan_read_line): Fix order of execution to - get correct return values. - -2001-12-13 Werner Koch - - * assuan-handler.c (assuan_get_active_fds): Fixed silly bug, - pretty obvious that nobody ever tested this function. - -2001-12-12 Werner Koch - - * 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 - - * 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 - - * assuan-handler.c (assuan_register_input_notify): New. - (assuan_register_output_notify): New. - -2001-11-26 Werner Koch - - * assuan.h: Added more status codes. - -2001-11-25 Werner Koch - - * 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 - - * 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 -#include -#include -#include -#include -#include -#include -#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 -#include -#include -#include -#include -#include - -#include "assuan-defs.h" - -#define xtoi_1(p) (*(p) <= '9'? (*(p)- '0'): \ - *(p) <= 'F'? (*(p)-'A'+10):(*(p)-'a'+10)) -#define xtoi_2(p) ((xtoi_1(p) * 16) + xtoi_1((p)+1)) - - -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 -#endif - -#include -#include -#include -#include -#include -#include -#include -#include - -#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 -#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 -#include -#include -#include - -#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= 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= */ -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= */ -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 -#include -#include -#include - -#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 -#include -#include -#include -#include - -#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 -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#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 -#include -#include - -#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 -#include -#include -#include -#include -#include -#include -#include - -#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 -#include -#include -#include -#include -#include -#include - -#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 -#include -#include -#include - -#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 -#include -#include /* 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 < -#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 < - - * Makefile.am: Add gpg_dearmor to all targets where it is used. - Noted by Andreas Haumer. - -2002-04-19 Werner Koch - - * signencrypt-dsa.test, sigs-dsa.test: Don't check with MD5 as - this is not valid with DSA signatures. - -2001-12-22 Werner Koch - - * options.in: Add no-permission-warning. - -2001-12-21 Werner Koch - - * Makefile.am (distclean-local): prefix mkdemodirs with srcdir - (DISTCLEANFILES): Add random_seed. - -2001-12-19 Werner Koch - - * options.in: Remove load-extension tiger - * Makefile.am (./options): append it if there is such a module. - -2001-10-23 Werner Koch - - * defs.inc, Makefile.am: Do not use $srcdir when invoking gpg. - Write the logfile to the current directory. - -2001-09-28 Werner Koch - - * defs.inc: Write a log file for each test. - * run-gpg, run-gpgm, run-gpg.patterns: Removed. Replaced in all - tests by a simple macro from defs.inc. - * Makefile.am (CLEANFILES): Remove log files. - (./gpg_dearmor): create it and use it instead of the macro. - This is needed in multisig.test due to IFS tricks. - - * armsignencrypt.test, signencrypt-dsa.test, signencrypt.test, - armencryptp.test, armencrypt.test, encryptp.test, seat.test, - encrypt-dsa.test, encrypt.test: Use --always-trust because the - test are not designed to check the validity. - -2001-09-06 Werner Koch - - * genkey1024.test: Simplified by using a parameter file. - -2001-05-30 Werner Koch - - * multisig.test (IFS): Reset IFS just before the test. - -2001-04-30 Werner Koch - - * multisig.test: Add an set +x to avoid ksh problems - -2001-04-28 Werner Koch - - * run-gpg.patterns: a v3 test key expired yesterday, suppress the - messages. - -2001-03-27 Werner Koch - - * defs.inc: Removed creation of options file. - * options.in: New. - * Makefile.am: Create options file and fixed import of pubdemo.asc. - - * run-gpg.patterns (gpg): Add some more patterns. - -2001-03-20 Werner Koch - - * Makefile.am: Import the pubdemo.asc file - - * sigs.test (hash_algo_list): s/tiger/tiger192/ - -2001-03-19 Werner Koch - - * mkdemodirs (GPGDEMO): Add --allow-secret-key-import to all gpg - invocations. Use echon -n instead of an argument with \c. - -2001-02-12 Werner Koch - - * multisig.test: new - * Makefile.am (TESTS): Added. - -2000-10-18 Werner Koch - - * conventional-mdc.test: Add Rijndael and fix for empty plain texts. - -Thu Feb 10 17:39:44 CET 2000 Werner Koch - - * mkdemodirs: Fixed the --clean loop. - -Thu Jan 13 19:31:58 CET 2000 Werner Koch - - * defs.inc (chdir): Removed becuase it is unsused an plain old sh - does not like this name. Reported by Alec Habig. - -Tue Oct 26 20:02:23 1999 Werner Koch (wk@gnupg.org) - - * Makefile.am (GPG_DEARMOR): New and use --no-options. - -Tue Aug 31 17:20:44 CEST 1999 Werner Koch - - * defs.inc: set LC_ALL empty - -Wed Aug 4 10:34:18 CEST 1999 Werner Koch - - * defs.inc (echo_n): New and used instead of /bin/echo "\c" - -Sun Apr 18 10:11:28 CEST 1999 Werner Koch - - * mkdemodirs: New - * signdemokey: New. - * Makefile.am (distclean-local): New. - -Wed Mar 17 13:09:03 CET 1999 Werner Koch - - * mds.test: replaced the "echo -n" - -Mon Mar 8 20:47:17 CET 1999 Werner Koch - - * pubdemo.asc, secdemo.asc: New. - -Fri Feb 19 15:49:15 CET 1999 Werner Koch - - * genkey1024.test: Be really quiet. - -1999-01-01 Geoff Keating - - * Makefile.am (CLEANFILES): Also delete trustdb and any leftover - lockfiles. - -Fri Nov 27 15:30:24 CET 1998 Werner Koch - - * clearsig.test: Some more test cases. - -Sun Oct 25 18:19:35 1998 Werner Koch (wk@isil.d.shuttle.de) - - * mds.test: Check whether TIGER is available. - * sigs.tesr: Ditto. - -Wed Sep 23 12:25:07 1998 Werner Koch (wk@isil.d.shuttle.de) - - * run-gpg.patterns: New (because Solaris fgrep does not like -f -). - -Mon Aug 10 21:33:38 1998 Werner Koch (wk@(none)) - - * genkey1024.test: Ariel fixed this. - -Wed Jul 8 10:43:47 1998 Werner Koch (wk@isil.d.shuttle.de) - - * seat.test: New. - -Mon May 18 15:40:02 1998 Werner Koch (wk@isil.d.shuttle.de) - - * Makefile.am: Now uses mk-tdata to produce random test data. - - * ChangeLog: New. - - - Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc. - - This file is free software; as a special exception the author gives - unlimited permission to copy and/or distribute it, with or without - modifications, as long as this notice is preserved. - - This file is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY, to the extent permitted by law; without even the - implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - - 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 <y <y <y <y -echo_n " " >>y -echo "$usrpass1" | $GPG --passphrase-fd 0 --clearsign -o x --yes y -$GPG --verify x - - -# ====================================== -# check our special diff mode -# ====================================== -cat >y <mfx.md, n1->pkt->pkt.signature->digest_algo); - } - /* ask for file and hash it */ -- if( c->sigs_only ) { -+ if( c->sigs_only ) - rc = hash_datafiles( c->mfx.md, NULL, - c->signed_data, c->sigfilename, - n1? (n1->pkt->pkt.onepass_sig->sig_class == 0x01):0 ); -EOF -echo "$usrpass1" | $GPG --passphrase-fd 0 \ - --not-dash-escaped --clearsign -o x --yes y -$GPG --verify x - - - - 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 <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 /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 /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) -uid Alice (demo key) -uid Alfa Test (demo key) -sub 1024g/46A871F8 1999-03-08 -pub 1024D/1AFDAB6C 1999-03-08 Charlie Test (demo key) -sub 1024g/BC43DA60 1999-03-08 -pub 1024D/FAEF6D1B 1999-03-08 Echo Test (demo key) -uid Eve (demo key) -uid Echelon (demo key) -sub 1024g/7272144D 1999-03-08 -pub 1024D/8FC282E6 1999-03-08 Golf Test (demo key) -sub 1024g/9DCAD354 1999-03-08 -pub 1024D/04259677 1999-03-08 India Test (demo key) -sub 1024g/61F76C73 1999-03-08 -pub 1024D/43C2D0C7 1999-03-08 Kilo Test (demo key) -sub 1024g/9AF64D02 1999-03-08 -pub 1024D/A9E3B0B2 1999-03-08 Bravo Test (demo key) -uid Bob (demo key) -sub 1024g/E29BA37F 1999-03-08 -pub 1024D/EB9DC9E6 1999-03-08 Delta Test (demo key) -sub 1024g/B0C45424 1999-03-08 -pub 1024D/7372E243 1999-03-08 Foxtrot Test (demo key) -sub 1024g/EE45198E 1999-03-08 -pub 1024D/34C6E3F1 1999-03-08 Hotel Test (demo key) -sub 1024g/D622AD0A 1999-03-08 -pub 1024D/D2699313 1999-03-08 Juliet Test (demo key) -sub 1024g/35F8F136 1999-03-08 -pub 1024D/B79103F8 1999-03-08 Lima Test (demo key) -sub 1024g/FE56350C 1999-03-08 -pub 1024D/BE5CF886 1999-03-08 Mike Test (demo key) -uid Mallory (demo key) -sub 1024g/4F31EAE8 1999-03-08 -pub 1024D/30CEC684 1999-03-08 November Test (demo key) -sub 1024g/8B70E472 1999-03-08 -pub 1024D/6D9732AC 1999-03-08 Oscar Test (demo key) -sub 1024g/2681619F 1999-03-08 -pub 1024D/3FF13206 1999-03-08 Papa test (demo key) -sub 1024g/63330D9C 1999-03-08 -pub 1024D/3C661C84 1999-03-08 Quebec Test (demo key) -sub 1024g/A029ACF4 1999-03-08 -pub 1024D/777FBED3 1999-03-08 Romeo Test (demo key) -sub 1024g/11D102EA 1999-03-08 -pub 1024D/A3AE3EA1 1999-03-08 Sierra Test (demo key) -sub 1024g/0F1B50B4 1999-03-08 -pub 1024D/85A81F38 1999-03-08 Tango Test (demo key) -sub 1024g/101C0402 1999-03-08 -pub 1024D/653244D6 1999-03-08 Uniform Test (demo key) -sub 1024g/5522BDB9 1999-03-08 -pub 1024D/61F04784 1999-03-08 Victor Test (demo key) -sub 1024g/07287134 1999-03-08 -pub 1024D/EC67DBDE 1999-03-08 Whisky Test (demo key) -sub 1024g/FD6E27F6 1999-03-08 -pub 1024D/567FB34A 1999-03-08 XRay Test (demo key) -sub 1024g/41E408BE 1999-03-08 -pub 1024D/4B11B25F 1999-03-08 Yankee Test (demo key) -sub 1024g/F7B080AD 1999-03-08 -pub 1024D/54ACD246 1999-03-08 Zulu Test (demo key) -sub 1024g/A172C881 1999-03-08 - ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v0.9.3 (GNU/Linux) -Comment: For info see http://www.gnupg.org - -mQGiBDbjjp4RBAC2ZbFDX0wmJI8yLDYQdIiZeAuHLmfyHsqXaLGUMZtWiAvn/hNp -ctwahmzKm5oXinHUvUkLOQ0s8rOlu15nhw4azc30rTP1LsIkn5zORNnFdgYC6RKy -hOeim/63+/yGtdnTm49lVfaCqwsEmBCEkXaeWDGq+ie1b89J89T6n/JquwCgoQkj -VeVGG+B/SzJ6+yifdHWQVkcD/RXDyLXX4+WHGP2aet51XlKojWGwsZmc9LPPYhwU -/RcUO7ce1QQb0XFlUVFBhY0JQpM/ty/kNi+aGWFzigbQ+HAWZkUvA8+VIAVneN+p -+SHhGIyLTXKpAYTq46AwvllZ5Cpvf02Cp/+W1aVyA0qnBWMyeIxXmR9HOi6lxxn5 -cjajA/9VZufOXWqCXkBvz4Oy3Q5FbjQQ0/+ty8rDn8OTaiPi41FyUnEi6LO+qyBS -09FjnZj++PkcRcXW99SNxmEJRY7MuNHt5wIvEH2jNEOJ9lszzZFBDbuwsjXHK35+ -lPbGEy69xCP26iEafysKKbRXJhE1C+tk8SnK+Gm62sivmK/5arQpQWxwaGEgVGVz -dCAoZGVtbyBrZXkpIDxhbHBoYUBleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOOngML -CgMDFQMCAxYCAQIXgAAKCRAtcnzHaGl3NDl4AKCBLmRplv/8ZfSqep5IjqEAuaXv -WwCgl6NEzT+/WewPTGcwZY+pLkycLv20EEFsaWNlIChkZW1vIGtleSmIVQQTEQIA -FQUCNuO2qwMLCgMDFQMCAxYCAQIXgAAKCRAtcnzHaGl3NCeMAJ9MeUVrago5Jc6P -dwdeN5OMwby37QCghW65cZTQlD1bBlIq/QM8bz9AN4G0J0FsZmEgVGVzdCAoZGVt -byBrZXkpIDxhbGZhQGV4YW1wbGUubmV0PohVBBMRAgAVBQI247hYAwsKAwMVAwID -FgIBAheAAAoJEC1yfMdoaXc0t8IAoJPwa6j+Vm5Vi3Nvuo8JZri4PJ/DAJ9dqbma -JdB8FdJnHfGh1rXK3y/JcrkBDQQ2448PEAQAnI3XH1f0uyN9fZnw72zsHMw706g7 -EW29nD4UDQG4OzRZViSrUa5n39eI7QrfTO+1meVvs0y8F/PvFst5jH68rPLnGSrX -z4sTl1T4cop1FBkquvCAKwPLy0lE7jjtCyItOSwIOo8xoTfY4JEEXmcqsbm+KHv9 -yYSF/YK4Cf7bIzcAAwcD/Rnl5jKxoucDA96pD2829TKsLFQSau+Xiy8bvOSSDdly -ABsOkNBSaeKO3eAQEKgDM7dzjVNTnAlpQ0EQ8Y9Z8pxOWYEQYlaMrnRBC4DZ2Iad -zEhLlIOz5BVp/jfhrr8oVVBwKZXsrz9PZLz+e4Yn+siUUvlei9boD9L2ZgSOHakP -iEYEGBECAAYFAjbjjw8ACgkQLXJ8x2hpdzQgqQCfcDXmD8uNVdKg/C9vqI3JSndq -knsAnRxzVeHi/iJ73OCKtvFrHbV9GogqmQGiBDbjkGcRBAC/DCQungO2iJ7j9+9q -d2crjBU8K+AmQhs27JBkJqtAbC/xFqkHBsA1Pi8Zb6TLa/OCm2PbXFiM5x00wiEn -VKNzuGOzU8uHB6kwWtLj8+V7VOWOkSDEtnlTF6u0y9JOvs7GwDvqOM5C3QH7La+z -nNeAu1527Hj6l0XGSAzyvp+NkwCgnktU11VFpKSIdoplZBayN9OzT8sD/Awc/890 -fiSMWYNGo4+n6IHxhjBBM9lL+DAe1RtCEtwUSWNrGsIxFnDRkMxvMpaT4GusG+DP -haTddrDBSyFiCLxKDBYgMbSO6wQ9g6zWEEh1ZMTMVU/akr81DOEColXn/f3Q4sRj -xI3hu2z8tjVewAPNTuWETQ6iHHoVqdpkK4aABACfbMrnfK6TujxSs91MfKBWfYxy -w9hjM6+VV8cJJdDXiheMKzWcrVecwgYYzukmNinO//BRmQcs1wdfi5UdfHLNFDig -w96SdyZpHx+79ghD3NqDmzYakoRIoDKcZAIrAjgfl5if6vIiA4c1LjhSdcVTBsSy -ic/mkk01EgztWKY0abQtQ2hhcmxpZSBUZXN0IChkZW1vIGtleSkgPGNoYXJsaWVA -ZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjkGcDCwoDAxUDAgMWAgECF4AACgkQQT9K -8xr9q2w+RACfX3AwFwPu5+mr/f1Sa/Wv0m9T57gAn1TBIoUErMqJehQZu73N0u93 -fqSKuQENBDbjkIIQBAChY8NSvu6sK0p4D0AVBsRz8iVXYqbRlRTZAHS4LCXwx/i8 -FmfdIXnaNLOoyi44YruSCnlZdh4YWquCx2mgywG589AzcFhahmqElNbKb7m4F//E -GIZK0zTgW13tQwG9hTXOhYeqchnOOaDDwPEK1Gr+2o/5ANqhqrin0TFFBWLgdwAD -BwP/R009s61X/FkUUAh8w4Tua6qndN/2GsqXsyPYjdF5E3gErK8jDcDLniOHqksw -V17bJG81czCRE5JcVFLLWQJg9cpeoTpP+YcF+m9whtswaOJ/LPrx888i/OmluSD8 -1VP+6zBhhTUbpazfLEdt3XczpW7CNdNbyiEcgT+6Cr+W2GaIRgQYEQIABgUCNuOQ -ggAKCRBBP0rzGv2rbLWtAJwNtSGPYjbesLSTeRwKGA5ffZiFDgCfTPC6I+XyGavj -HJraHTgS/bSCN0OZAaIENuORzREEAIrOxkw6rRDOpbqKenlrMRYvfqoVFafTekvs -ZW8M0GVQOBYwqn9VUfSV/H8Iy3nJsU+cU4UFXEaoHhVWgspMtjYHvxXBTD2UHmj+ -Y7+RkVnOT7x/UsPKbxjkweeleGXkeHECwwZuQhebSrtQQllqtjCx33Le013ukAs2 -SnI83cPLAKDfVb6yjfhG0Avkx83VmlFqXXH1pwQAhVhMi1T06SNYzbKAmdNBfBWr -v9m2l5PJnUTpSWUum6ueJLHzkEM0XgVnHt+YdFuzXgUafsnqEn+2N4tI0zuJqzoi -/9DQnEvKijZxihtYq3S3rN6UIQ2aXFHthvVtxZxocZeluYaWHPeedJlI9h9yObZn -0mLFXFY6TUiHQYs8RNgD/0iNbequyxzEKdIdzD0Ns+3WjIVBlYl51Zdvqyo2+U+2 -70hXVdIssrsqKr1DwRlsCRSwMY+nrB0ZUOlvLaIB7qCQke3C9myu/fJoGDhMZOYA -XsatVR0EGTdXnSuCxqNhEiqwlbZGMAcwFO+oWBSgGyjFPHTMSOw0XS42d73UNxTa -tCdFY2hvIFRlc3QgKGRlbW8ga2V5KSA8ZWNob0BleGFtcGxlLm5ldD6IVQQTEQIA -FQUCNuOkfwMLCgMDFQMCAxYCAQIXgAAKCRAxjB+u+u9tG2cDAKCzaFoiAm79QSmY -ISeiM7XMKhoHDACaA8CU1j8+20C7rNipOHYz3KfUMhe0DkV2ZSAoZGVtbyBrZXkp -iFUEExECABUFAjbjuAADCwoDAxUDAgMWAgECF4AACgkQMYwfrvrvbRsg3QCeOMf0 -g3znbc8IBiTrIPUgUz9p3WoAoJ6eRZTZk7z+hTyx4JDceReQbYlGtBJFY2hlbG9u -IChkZW1vIGtleSmIVQQTEQIAFQUCNuO4HwMLCgMDFQMCAxYCAQIXgAAKCRAxjB+u -+u9tG16mAJ46lQbmtWRZUldQtp4ZnOptP7ZJtQCfceYMZfMAnqUKJiHk2tMhvwDv -Ah25AQ0ENuOR/xAEALSl7SaNEf8mYovea5tJNEwoZx3vv6XymyXga1wDqKo2PeDr -nRDbHGBb5BvWIv1J6Igk/wq4R+Pq989UpkcqREB+yOeluE3zPPtZBrbLySSaqiMe -gYiHnAAPc0TqjH7UPZa+fJKZTUk64BCUQN9ELkL2FKtAGQ7RNQJYvbCq4O/XAAMF -BACXdO4a3ZIK5hJejhHZ01mkHa6Sqoc6PuedNC7tlWiLU62BljGiv/DvzcbMsnvk -991AxJ3pP4ZvKr5CClqIG+WZa1zmtwXdmCfGJb2fbNSVD4zp16e5slPr8Cp+fvIv -2/SyvwruROs+oAzSVvoMAzAGSk3yj5nT5oikbn+M62fC5IhGBBgRAgAGBQI245H/ -AAoJEDGMH676720bj5AAnRH+1me1/iHDnS5ltXysOdl24/BMAKCPThApQ7lJe8LY -r61+lXUUwr1TKZkBogQ245LREQQAubUOd0B7cFzJHF5vo5NwiMZ1JXPjyNqL2OWE -/XfaeJiB55oMmVEPmK1JF69wU7ZBpo1l4PEIWcP7WRMqvBEFl+8LnelRkSW95kwF -r3D8TRnarZy3kfiBF1t33dnkVTaZYxCDKOBdZ/ZiRvLa6gZ/KHhITfzaS7h36G2M -bAlGlj8AoKQPFsEPjByKYdx72m5/2Ju/4d4jA/oCNAKaJH7N8Y3HLis1ShhpytJP -1yC9GJjtec3ugzYSC7RKV3NJcBeCX4om3KhiDSN6YYVICf4wdqz6TAocoqPzR2t7 -Fz6+upxIgh5WGnnCs2e7uO1eXUCSXONfiDEDzRKGTQjkdvwFo+880DkiGln/qmRr -cILA568dwNnOrBio5QP/dbkpUBhqGDr2LchpkoYyQlqzbvUpXJ1xlfZim1jfrmdf -sk83dE3iBzvmT8ByIZcMoqDEHil95LmJp3qw1yVeApP/ZWR+0XiBLEF9GhcAOc5i -hH2ACSXLWiRXpyMmK2/erTvTX3QkAcqoQ1cFWCwNNCrlgycB84Hdm5GXdajp7cC0 -J0dvbGYgVGVzdCAoZGVtbyBrZXkpIDxnb2xmQGV4YW1wbGUubmV0PohVBBMRAgAV -BQI245LRAwsKAwMVAwIDFgIBAheAAAoJEBaEEKSPwoLmIuMAn222gK7ibwOXzIKd -/gZP09JC/3+eAKCOelaqqYqNNbku0gA84+O7d1kMqrkBDQQ245L8EAQAtsGp/UnA -1y4AqjewlkkTOQevLwtzwm3pmLLjl2Y3TfGn8Ni0h8Wd27kV32MUZyTaNaZuDxpD -EO2aUIpGWVQmWvlqCFV2F0Z2AI8R4bx1tC2kD758hUvR+S2hn9lK7E1lQPuvec2L -Eml+uvVxW/Vm4iDBgeMlIlz70MFC9LUnfpMAAwUD/At7Clo7D4dNk43BMvhQ8VgJ -+INy37Dj8PHX2sCZZ/tIfSwNIU3m2ygSVreTlDKo406v6Qmefs/m9dH9lsBE/8QL -40Ek3SY6xV/QzTVN44QgnpRKWpfaMbGzWJVXeczlNkTeIZZo/nhDm+aMucMu/e7E -KbG64BnrQk7Lz6LSKb2xiEYEGBECAAYFAjbjkvwACgkQFoQQpI/Cgub37ACgicCk -6XvTqEv34RXVSkhf+EcDHOMAn3krqPc5ZeSJGa7RfRcVhm5QtcvymQGiBDbjlLER -BADIbiZFRBlqCMOCXTECdpJssJDnAmpir+yfAKX4hsOVdygepdA071Ams8rApABS -/c2+Tuaplad8w+iyQs4BKuzqeQK/YWj0DDqyY2LM7qJbvFd6nC/GOGjiEucTTSgY -8IOFScBTTks7alMGjHAdWzSjq+1ppWJeTSzp04UKhV1/0wCguOIaUr/cMVahSuoi -K4Tdot+CR10EAKunWycnUG2IaGYqO3sCfpChzktWdTjUn9ESJAjKK1QUC89f5+Kr -MPITdUPypf++9MumBkJi+8R0GVJ8zwhwKfX9CHhrD0kfO68pCDxZyW+dDzOr/tFX -0nuH9pL8oiEMkikaGLph+N+N1Ip8thh+vdLhNUr3EPRlrcAfv+WtOpbyA/9+kpa7 -x8nIn2SofJisj+PjKS3lAoGPe0eOoK/sVBvgVjy3Gc3d8vMG29r+2WRIpGwuhuLG -NlQYX65BHV1MK/TjYvFnpoRSqtTK3GpRzTmkJIC8RlXxtfYf/n66VLB3EoTOzWHY -29JMCJnnjPMoaMc2YSK10Bo8P/27nF0CKo8XEbQpSW5kaWEgVGVzdCAoZGVtbyBr -ZXkpIDxpbmRpYUBleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOUsQMLCgMDFQMCAxYC -AQIXgAAKCRAf6PxvBCWWd1pYAKCVZ7DfK+i/YZGyEu18DnWq0ixligCghGwDoMGg -LnenSjyShMZ+1Ecekia5AQ0ENuOVEhAEAIMMgk/e8lsV/KEkd4/jNK4yFj5iy/Fa -on800I3GUzETuQA2AT3getR+GuV4pbZWE/80b9hnNW50UJGiP1+SXfVtY5vT8p/g -NFwn5d0O/pq3bpgFRJmoawTzx8SFDwCVPHEcwOHE2j5LvfrvRBOyKU32tr976ri+ -Uowt0+92LuA7AAMFA/0Yo9dDqhjR2UoNcYfEZwWhRHaaJenP3z3QbzjJkASb5H84 -xCTEpv0dqEtVTJUoIo8Lh5VjbiCwok4QPLVSbQFeHqTKb7N96PjevkZ1Co6OrLCN -OcPRvXxgCwSGbuuLMkQJEutnXLu0DOKquY94KXXh79La7lTgjReE/1Wzbgc1+ohG -BBgRAgAGBQI245USAAoJEB/o/G8EJZZ3CXgAoI5oimsZs8ZKmLb5sPB4AZzngCyz -AJ9og9spt3EYXAB95XmfzqgJBRv04ZkBogQ245UlEQQAnKdAaILozJ04V6Z+FIwQ -EY/aF4EFrJJIc+uewF7ukZl/7uUZqSxqmzZjbqigyMFGybJSMa6TpwN0BKG5CJe0 -4R/mVCIRsz1Jx5YXezN3UFsNVNE36R8l8dxWG+wgj2m60gu4VlodcpVMc/kRiSUg -KUfg/xmPnRe3SJZSlG2lBm8AoNc/r5DW86om3MHWK8AoyhvVXhWvA/wOcjx6gfTT -KftzpQBhOF0U0fC3npQC6bvjLjTBhQjC3WX5rfwJqMmrudRbEO1sFqzTOQPtb9xa -tMeVqTcOi6+x2zfXes4nTfi9Lgq1z8HhE/LnktwxZxyPeOXqXu9N023IyQTv7mC5 -9C1xMZk4POOv9WZUGz4C85s2/9iTJCfkMwP+MRW0S9mHmisruCY6TDVFc12KIFMI -PSmWav6gW6bCAA+wIHfmcSyR6MHiLV2gtJ0vQuqgyWfeTiaxPof07dg9pZsV7Hk1 -ZUhEmloeOcfZmwtHkRhWGEbEsd89IWMDJlwNJ7Y9JZ3QvK7vB42bQVvyhdFQdEXH -0slvlvsgKtCcaOa0J0tpbG8gVGVzdCAoZGVtbyBrZXkpIDxraWxvQGV4YW1wbGUu -bmV0PohVBBMRAgAVBQI245UlAwsKAwMVAwIDFgIBAheAAAoJEK0bD61DwtDH1RIA -n1kxWuxGwCS1+i7Fp1cFzzZCHycLAJwJq+RG7ux9sQEmop2V2mKdjBZmkrkBDQQ2 -45VIEAQAuZli0/vYbs6h1HhF9HbvRHFMePjQ99Sk8h/dTx7PI7eSqMHXYh0PZghc -hlbrMSPnemxfwMbJrmdK9WN0Wh9BJUe2ycH8ftUcGRo5CdESgiceziF6Vg4PQz9F -lxtEhvrl7q8R6y7O+j03QAJKUGwBdt540oZ8YYKiDvgZUZxnoecAAwcD/1b2fYzA -nuWrQZXhXQQ4cNVxMBVFKHScH24oFVbuEWLgM/tdgF+CPw2Vtzba8ySR1K80VSgs -Qfs6n2wyCVd+II8lKHTZT/pfICFcPJlHKs4ge+JNn1IcxBAiq0QRNW5hGTO9KdJ8 -MFWrWn2Bbp5k32roAzuCagoielFo4MVFZTsNiEYEGBECAAYFAjbjlUgACgkQrRsP -rUPC0MeO/QCfaGt8NeCm0zbssmOrXZ6v9zFk8xEAnj3SpjLTyqemniHSJ9KEzIKJ -CdiDmQGiBDbjouIRBACKncc4Ueec7dWaVARy2SmNVufeSenYs4AsIPP0v59jEl7J -I0rb+4JbIJoAzW/hcm26GS/UbbpQwig8/PgMUV5QfBST4CEOlf7/x2a4HKk9tDV4 -An7q2aNr1beW+twxfUGWWV5I0o1b/iKVk/LiQRiaMr8pJXY266m6/2Pn9LmDtwCg -+Iqfx8gsK2PZCWv87uEKAOLzHXsD/1eRxLqCt1hT98gdDLykRTlI3kMq6EK3I+z/ -8pDIMDuPIJq1eM68YdFZr8s7i1ye1QpDltPYHgWnUC733ujAKANdyybm3HrA3TSB -jEAhNfcu8nkrVorvASQUDCLJatWRWJTUVrPH+GXIXMA/Oi6LDsgNDOJanwzzvDCC -m8hWQqW9A/4xYAZ4NVFrQq8gtQPJWuMIfSFSvpZWNgQgYZntiXSUGYOVs28T/87R -oRx02tsVDw2PA8z68q/XRuM9NdetxbUXQHB9eszFLi3W1idsXhd/C4SyiTgEFXG8 -Y8s94Eadgk1PAYHN6Gd3SY7jmevqYGVLmBp7qfj5Y9XSM5SE0Th+fLQpQnJhdm8g -VGVzdCAoZGVtbyBrZXkpIDxicmF2b0BleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOi -4gMLCgMDFQMCAxYCAQIXgAAKCRD+GAsdqeOwsvruAJ4iU4M5s1xsZiXa0wLnX4FB -Bl9abgCfflNpwyEp6KEhKCPWwPRG9WJc0qi0DkJvYiAoZGVtbyBrZXkpiFUEExEC -ABUFAjbjtzsDCwoDAxUDAgMWAgECF4AACgkQ/hgLHanjsLIa4QCgityK8zajBOqA -N0ZZTq8fOzgiEYIAn1ZEfjX+jefZUuY+4zFzrpO/fX0OuQENBDbjowcQBACVSdXx -UWlz81FjqHgR4b1EtmhmW89CmpsHfKlSwlYvBtbB/y7TFIfvAr4ZFbpuqew6Jvtj -IEZoXvolTWwHVPEFkuG0LAa03olaYpzC6ZBDuLkb09RukCD4zdY6xwbAMRsOzZgv -597LZXtOLLLnmOyTpsjRDLztWsuNglm5rffOTwADBwP/SyVZvFEdEVn5/dQTp7eA -tXdrbZEM379ctCJ2663RbTZd55lIBev1fTnKQkvDTY2e58yIQ4E+Nzr99qg9Cyf6 -e3OhErTUqEBOhusBge4/7E5LrIVMvo6AFU9qgn0Sgsnu/ww2txVw3XEjqL8Hgl+4 -Q/57YRvJOe+q29Ye9LL8eaiIRgQYEQIABgUCNuOjBwAKCRD+GAsdqeOwsjK5AJ9p -ek7H6yt3ZHAJ+7nn7sGmxYxb5ACg1INFN4AMzqEUjbZ51KTVdAvyKlSZAaIENuOj -hxEEAN5nO1c81jCmgh/oF+p6kiZmqFV3ape5kEmcS/BoWgCXt6vjaldctmFYi7v+ -BY4N9zI3GxQqAxt5D6dY7aN1xlC236CZEAaXUXktvGw/ppHDjdbs8CRuZiA9jm1j -92GAUY/mm6hX2aGKOkVwr9yN6DrA2CaO4SwK/wEXkVfj+nazAKDCaBzHzwSkkXf8 -QOtOTj/xevpnzwQAv30laCeXTDZM2I/1Pdzma1V1xizfae0kfzZOJBDQtHQDvNFj -mu6iM1kL0uxOG3krr0AlqSsMD8W7mavbFigUlxbhvuul4pTL/BiJ946FhjlPY0Ni -9pmdAldno7yUYsWADEKadkQ3ghEVqEqz+ACYbzp3p8K+5KuiFJm9D4uyvToEAIVP -i2N+4voxnRWGwKXF4E+fLYAzXT5sMMzl46Xk4Ms303F/5JG7kB0iiPPY6oP0l3nl -ahulRcbNMj7SDbfrfoi4m4ftUYIX3acXCSN0gNuVGipg8CwlGQyILgWRFp6oXQOm -AlpxhIGcd1jdh3sj5y+CQrugGPNOJT9mzmFkB4rxtClEZWx0YSBUZXN0IChkZW1v -IGtleSkgPGRlbHRhQGV4YW1wbGUubmV0PohVBBMRAgAVBQI246OHAwsKAwMVAwID -FgIBAheAAAoJEOup8kDrncnmriYAoJdBwMXGVRTFlfw1u4XimCRPVFRNAJ9WFXys -x0ugWaIaLJ3tyNZQHWoARrkBDQQ246OqEAQAj7WdaOJjzJNs2G8rvrDZvD/uaALQ -9PtdvYAp/Drp7xMH5T62+KKTlKdO3s8IQBPiuFocJNir5st/nm8Xl+gcOZOvtr45 -c/cl54fGO1gOjBZOfgbkdBVK/LMwuQWIebK4qCZnAOlDLYNGVUguGLnEQBSfnhhk -gh0WA0kqt7fYvpcAAwUD/3cOEqPlMdYeLnGEG4wPxtyVIchwGOv0YRW5apbz2fdO -7otj1AFUN5WzFw0A5+WHza1OIUhg50Zco6HnwKx6F+LbZ5aOc37EAvaFgPuMxBfk -aWYagCof3jBF0CbTWUXV/D5/dFmIeuGTuUMNsGVH+OSMW2hBN/7+aJK5LLHL+hzp -iEYEGBECAAYFAjbjo6oACgkQ66nyQOudyeZzTQCgmr4mT/wPN2ppg5x75E3cXn6q -B28An2hO/hgIPkf/rSSydA72ZZc/MWM6mQGiBDbjpSYRBADdWzld1lyDWDqGPSzG -OsehXyTSa0pOfVTLckpJpDpErcn8jS8cKrXkVUowI7SlZhPRmYI+5pqGaG5FZ5VJ -d1TfKWihc7O+JDHoK3yamOnh6OFQFPZUF1+WlAGiFXLc+WODzbgOSMy/8yXA6n0z -e+v3et5n9Kzib3sDGjw5DMmiYwCgmUwnofqskHVv1S6tDg08mXALKKMEAIVGyf9i -j3BzNb0fVYGUOLU07nqQ3RpNQPaKtPQpBobRknQ/ZSdzuiALcCB+Q664f1cKGA+O -gtm0L/f1xUmKRW3rT9lzMtcCy6kcudCI2OHm/gOcPzKqjj5onpD84fgR4BdbsehT -8+urmxFiK/bFFI6eC1L5edBQcRLs7TF2jY3SBACdXy9yHg6iDTJhysvR7UuLWE/1 -s9ysirhZgPb0vyIFwHfRzM96AYIPpLZr/jvkrDawTxYGfGIZrj7UyGePu7RCeFRV -VX55B6evNv3fAqbmwQ1GHTX7WHCNdAkP07yTxZ/wnZudPAzQwRkEfZ39TdccbOhH -fHvbv3RNQ0VxbWtQUrQtRm94dHJvdCBUZXN0IChkZW1vIGtleSkgPGZveHRyb3RA -ZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjpSYDCwoDAxUDAgMWAgECF4AACgkQ1L9X -83Ny4kN3LQCfZhlov9Ux6LofeSt5g2hVijDdX0gAnRc7adixQ2hpprv4vNoKvmum -F/D4uQENBDbjpVAQBADfVCPYwZ59MKgXTH4P71QzFnpG4E/MjqDNfW3NxQ9ZjLfw -0ir6U1gGDuEsWRR+fS5OwCbfeHZDzPj8MZPuOZBamgiDvI1OvrrzUv+BijkWGEL6 -oRFnWI8zJ8zDAPuuvP1u2FQZOoKFXaHo2I9Q8zuJz8P2vEkgJfLx2yiPR1Dp2wAD -BQP/SCCKZBNQIaY0cfKmiv8ZjRcAAvhXLyMCwLQUfVRqoNVOtMMfWpYtGdL27ESw -4kgZIsxJ3ELQVkRiriMKbsJiNM4dMe+9gNuGz1CG9b2vhUPZ59sREVIRgyIfr0BJ -AsYOn87mQ5lOBA6+XmjHO+ys4xpEVJZyfrq5QAw5GYcrPWCIRgQYEQIABgUCNuOl -UAAKCRDUv1fzc3LiQ475AKCVZupUbMXq9yw03M34RS9YT9MzKQCfUgFd+Fn89xqU -4Owg/MQzYlLreUmZAaIENuOl2hEEAKeOL2pIdZ+zQtehxdL9l/uDBFSTuN9rLb8D -gLiw8Z9j8U5CEH/M38WzH1nHKKlZKjGVZYiyhRfAG83wvHnT83lq+Ad0lgaZTR4z -6nrd5ViOlHPlfqo4RPZPzPe+uF7EfDl792sJerXGAasLosmKnxKAyJyVjh7eZcjT -S/hUhO9zAKDVyLHJ/gQlMYk8vE5XYL7Pw4d28wP/VsKVkjlxsXpcrCQIoKeDXgKN -Vv9L+0Pebspzr2WOah8iBN1QOkbtexIKCbb9mmviEnJU0FFx5MIw4mipvY4EpCaH -3McGwJpCzWmdzID8Z6oISUyKsuP7PXjmASbogV6Iqy2m/2RDtfbIlbwotfbiOT9T -r3IPbH+tHAZByMRyvxID/RN90WOPSpODxr9AH9btmeJD0BfNt99116+qdwvWrTof -cbkBgzvB34vLLDaMKVIyinxz2lYyC7aSpA3uzjZvoPvPrQJFLE0dx7DSkUTtWbQG -ByRabpyrXYdKZzsFXLb+LSTWwF3sQLax0C4cYT7OLPlxjDVq/A0jgztaZVWa37IY -tClIb3RlbCBUZXN0IChkZW1vIGtleSkgPGhvdGVsQGV4YW1wbGUubmV0PohVBBMR -AgAVBQI246XaAwsKAwMVAwIDFgIBAheAAAoJEBPbllU0xuPx7NQAoMhUK7d8mW1F -45Qpwtpbn/EdSuqNAJ94+GVY6GrtMbA8yrZHeD8zSAedrrkBDQQ246YdEAQAzpO6 -UuCWWpP9up5GVhLPoSCBfSIA9JWm5Ap6/hjQ5hia7CcS8E41PjaGl6Pkh5lj2qkS -UBa892SXyQMYqMqEq/h7+BW7+n62SCRMtYOHRYZPA4hvs0d7jznGQlMsltx7qamo -VNP0XF+ws1wHLjyQl3qMnkrAQ8lAJP+jg7P5Hq8AAwcD/A61qQLRXsSFr7LMBnaU -SR0o6+4/HCdh8t+mnAeQBDAkne5DTPiwqzqsjoYekX6JK7wk+mbsJTd/Zw55Jkq9 -xVm6nEUo/JIbN7cPlMqfCLaoS+ttbxZ9fNCO3WTNdWxAr/mGZZiBfy9yTcxUfo5q -Tg0ffWy40CNHaVKk+iIcktGziEYEGBECAAYFAjbjph0ACgkQE9uWVTTG4/EmaACf -U+XRhr/UgvgCfMlOthY327vlI30AoJypWeGLup2DqouZIGkY8bmpDrz9mQGiBDbj -p/8RBACXrm5v2sQpLtexfA2S8a2PUruCeqXYfVsnkYX1sYJaFaYHxYW2wDL1dR4L -dZuty5YWBOxu1N9dnkjuPsdIbq6R/phy6xv5sDUihP4YBAZakV5ahd7XrBdkWXSk -RzaJSfH1OG2hAXR87liVu8ck8RDeS+ipx1vnZY45864IAnFzqwCg2qjnDRjGAn2O -SPsnhyZH44VQQpcD/A7SOu9gTt6Jl4VSMY2JGi3HOFPOHnevG3Pb8NYbcP4gEU63 -iqrHGndYJI07lKcFlZRbnSEOSFPFLuNKax88GYKKeZDoQXkVoU/ItAGrS4rCExpZ -+Jx2tBL2zJcWU+7NDmM5LeRUDE6a0N3sIxMLzz3Z2PTarMATjpA01Qj3WRlcA/48 -g1+gnyFXbO+UZn21WWj4uCyXUE6/G8SCZhXXiDJOYxaBrmw2rtN0x1aLwXPRXLuw -jhL5Ewn3qszCzaJPNYuLaMY7jiK2ha20LCqYYmaVJa6tGy9iFIGC80ItcUYZpCfm -dw7W2oqdZIN/rblScCKmyBbw/gCB3molmLBd8nrseLQrSnVsaWV0IFRlc3QgKGRl -bW8ga2V5KSA8anVsaWV0QGV4YW1wbGUubmV0PohVBBMRAgAVBQI246f/AwsKAwMV -AwIDFgIBAheAAAoJEAyCDHHSaZMTQPYAoKRB8Ey3Ny6TaKaGoL2GNFQEwM1MAJ0W -blK0ScSKbm1BN+2hfDmmKRkgvbkBDQQ246gqEAQAkdlSJYfTiZH/CkfV8tnhI6ID -z+SgiZKcneEBnO+hAJottARGAojdbURlOIeZqRCgKpdTXBK7MdHAz4RKFnAAXPDB -ZgA5q+Coqn580t/O/AKGb8kKn9n52z9lC8A5KnHaRAsOKVyPTIU5vq6FLmsWmMB5 -5iz826Dk9kMhV7mmdQcABA0EAI8Jq3Jnqf0HqqaX7CZuNKHJgag14bTaBw0niZK0 -KSB6FBpzitEoyst5JBPCl0ayQEw0Hn4jhZAqcZybI//pC1CNQBBO47VUi0y1UVjE -xtaNmmWxugzkzWHHx4WmyWsCQwGN4B9riUws4g3dgC007l+aonKzj5QEo1XiiMNT -FFmPiEYEGBECAAYFAjbjqCoACgkQDIIMcdJpkxOPrgCgvrCZO/Txjq3F6U9vxdQq -lrLDgXIAnid5WPrZkh91f3gM+QXTQfmq9V4RmQGiBDbjqN0RBADBWmbmmByw+u1J -TAixxj5NXRXQJ9zLtkxRQ1GHxLQPyQzojWWnD4kEme8yvsFXuulbPX8zZMnl6qcC -8wt+b5E8dCtZuvQL3vS51yGe9M76VRC/1HgriE0YqHMTYJT4J+HciftldHFid+jR -nGZpLwVtLxiLaWAm6SBi82FTn4lVGwCgtjc3u/SMsPgylPRyN/QeH8/OZ5MD/R2y -G/c+ZF4kWcgmlzjJxQUN2wGYeDoOWUMXS8mf6yF+DLtwxo6oOlLaLHVTR6+qH2Vh -z1zaqk1Ir6FJjkuUGvHbVFt2BmvL26StTjJ4zC4UFSWYP3qLvfbPThT+RoD4ea+V -cPxGEGeqs0umImJ6s0reS3KJS9vgHtGo11Is4nP1A/9EzV7QkX5EuEnlUpGV2q29 -aGYx3RpcOhDYixogNHuW+K9KwcluBEEBmT74NwxVzI6qdJVVZn5lxT4IC5G0z/ki -df1Rkgv8Eqj5DIikgnp0asB8FiHSsb+39d4cnk2V0ez/LmknXUl2mpKpk/fb+qXW -TqPDbFUE8dz8zyqRFXIjwbQnTGltYSBUZXN0IChkZW1vIGtleSkgPGxpbWFAZXhh -bXBsZS5uZXQ+iFUEExECABUFAjbjqN0DCwoDAxUDAgMWAgECF4AACgkQN8q1H7eR -A/iKXACgkZY9/w96yK2Oiq/MUs/A74SzJ2MAniQ2eSHT5CQ4G8PPvYfPZueNI9PT -uQENBDbjqPUQBACn8JyfkTPFcgaWMpUpnk+nTEkDe4GhAG9fO7alTgdT6+aDCdfX -fXfH7gGwdURvDv6V/KEqcMPRNLAgAeP/F4T6OtoJNTxfWLB7j14DJNpYXjBPJPN1 -kpD2at8GcWB1aVGMsAtxMwlo4TZlqyfzCAAQeCLhBbIE9LWKX5oUTqiLOwADBgP9 -Gm8md+/xWp9sLE5i3uZ4t9Muu9w+UY3Ke/WcSA2CNthEYhHNtcMPP6PBwtz0x425 -mC1pe9RuxDyzRfV0/q+rjdWZBNA+VTVNDHXSj5hifvem3KFvA6TIgMabJ/q4WE7T -4Hn8xjQpEsLGjSXAzG9WRg13qTzTilIk+rC6xYGbZHSIRgQYEQIABgUCNuOo9QAK -CRA3yrUft5ED+P5vAJ9dQMc2nMpcKuH28xwKl8r7MP3pygCfWHGKFHWIDkUt8RfH -AB9geauEQSKZAaIENuOqZBEEAKLUF5GqBMWJQtBs1t1Sp+NIOGuMLgJOhINbMU6t -k2jzeUt6ooNd+c8P0TexsbSETwhrU4ntpvIISb7I8Twhcled7bi5KCABJOzz7Fw+ -Ydxo5Yjm1DQH7+gEtPx3n4AjZUfRAN0nqcFizDpRYPqVaN1QYiGWn9yPF3pubQhV -n8zzAKCpx1LUlQl2e5t1YJhmom2qy38EeQP+IB45FBfDf5KKtyS64alQ0vHYIssU -p806PQorw/ZOuoiscUQj/WeZ4vn7rCdu60uR1EuHpGp7n0t7igEgAOcxDjrxJmpg -SdD79V+oJAFLATo2msj1IklVvJeI7ZsImyPchIU1lqn/GvpAam9N+FiIB1KUMFqT -Jzc6zUn1Qqag1w0EAIiRHPYRW8ojd9Uh4Ed3X0daAnClyMWL82t2bj/bJRmhupQn -4aVJ5D0pFB9izTiJEWciHpqiMdsi/zExYYIDS1Zu94+WFbNIxyMFfHrJ5fUQtAqL -b7E5LrlxZONUnrRwshqR4X2TmW2mz1Wop542eUQ1UWp4Gr3VlH6giswY0CnQtCdN -aWtlIFRlc3QgKGRlbW8ga2V5KSA8bWlrZUBleGFtcGxlLm5ldD6IVQQTEQIAFQUC -NuOqZAMLCgMDFQMCAxYCAQIXgAAKCRC+eUhSvlz4hvEjAJsEfDLAxH49s9lf0nql -F4tcflpr/wCeJKCP6iVwvhGIdCu+Dbvf6z8/sI60Ek1hbGxvcnkgKGRlbW8ga2V5 -KYhVBBMRAgAVBQI247e3AwsKAwMVAwIDFgIBAheAAAoJEL55SFK+XPiGmdUAoKhr -c+z524neflMpRwJ+NG8KVxOxAJsFZqm7bBtYllrdcTqNqMk49LfBObkBDQQ246p+ -EAQApnvWjY5rMvw9Ly8xFL49pGjAYFb9zFijvgG4tMirI3T9EBLflKLJ8m4KWoRo -T2eNmy/JGLHyZjveaVh8TerDV+uxZkEGvv702nz8NOElQTjHWHoy0n6poci6Fxhf -Jd1bnOjDK2mZEufEQNSn2PhA46gjCLRTAPuwLpitSSL5ubsAAwYD/ij9KRO69/Jx -3+W9DZQxWIQBiKnYHVr1us2WpdpTV4jpCqJOCOgB/hlBmCY1C1/tpsAj1A3ZZamJ -RWVZoNokkReItZLXfGacprGbmmjcg89gFM5V3nEUNCU/mm2BQWp58h4NOCv60dGr -5GAqHDxAStPk388zbxEdyFs57CPQ4ZJtiEYEGBECAAYFAjbjqn4ACgkQvnlIUr5c -+IaRMgCfdcoqwoaTU7rNH0BWaYUfCrQ6TnIAniN+yQaBbwZHMbSaDTBRndjLglsK -mQGiBDbjquMRBACteKaHZ7pcM7Quj8Ec8Sx0fJ3u0NdLso5xn9Ek4FWMLBu6jw7b -/5KjB2WtXOZSWKHOzeTfUAx79NMKJrD9jZW/0kEAFVeZpwZF1l8fBsRELR9cxAaj -E3RvFkgCYAhXsF1Jno+qiU5TNvadGU4SzmP4vOnnjrIWTy83mtZiwoFIcwCggaaa -ClE8Q41NyIfVtjS3f+Nm8x0D/icH9uwM3vpB2QV29IIBqazgaFr7vBoogFoAllaC -QbPLiyHX1Mk3kEZg5xewmDS/tU4rGqj7UcL9OlZx1ICD8cp80yNYfoI7K5XM6sYO -MmfJORGOEsqMtoYbo3lluDgDkg26DZNynUeFHZRrIWz2cKqTuaB3dw09m8sJNus3 -poEtA/9Q1KDsjKPi8+2kUzJoK3V61QglXAVDlfzK6B5KOEZ6GR/gX9M5uyyLjREy -bFSSNPlvLR11+mV4GR5AcrVQOmE0QpFyo1Mr+uDsbqwkzERvRq1r5pOyqM5WPXhl -Xa5oo4na1fBEX76IEzK6xIVG07GnNnaY+dlPgsLq4I8+A20ZG7QvTm92ZW1iZXIg -VGVzdCAoZGVtbyBrZXkpIDxub3ZlbWJlckBleGFtcGxlLm5ldD6IVQQTEQIAFQUC -NuOq4wMLCgMDFQMCAxYCAQIXgAAKCRAlsA/UMM7GhJjYAJ49ENMfPwK1U1ESEYQS -5Yts3SRcAgCdG65G3ZW0dnhnjQAhf/vk+EteMfK5AQ0ENuOrHBAEAOGceVg3PC6F -tgrZrnofohzWnui6FVBzeai1DZ5MMKmdN6/QMv1eeHoMOb33fbfhwA51n+kPuhap -r6QqTzx62RGA/gK1m7vjU2OfYxSO65GN/rSUXN/kE83jR7Hux4MocRXZ+/8ngqL7 -JAjw1LZdJyOniJpeRvrckPNC/bKaua77AAMFA/95VjAjJIAU/gOMwtbqTgV+cmHe -52Aa1CJEalV88yKG86nnqHuL4xxUTTZljyjbbKleJD/Ah7R1BxBhSEDy8WuTuonE -VHVxTcL9Yig4pZ/OzYZf5fkl1eLNaSLb8XZMT0JbP02b//OMpAr29lcaga1o1RtW -vrlUyIYOTm2RcTxkf4hGBBgRAgAGBQI246scAAoJECWwD9QwzsaEIOcAnjt0vZDn -9+3cTNpCuV1ZKIu2t410AJ0Y3CnFBUFBOKk6zkOJnaArwVN3ZZkBogQ246tbEQQA -lWieyQhDso2ZnD2wb+gq6aqk1rRUhcwdBwCTbiE1aLAsnuMl8nLH4fvhaTz2V/Ae -joL00e28duA5or9JiBfmVblrpTAIGWsu0AU6uEQsWgZwRdso3NH/KfH8Z5lxwJtk -Z/hlAiEHohmGoD38mJNsgnm63RXadUH76irO6McvWlcAoONeH7i25AcrMol4O7BZ -wqGq25ibA/9IRhK7AFhfgaRrDTz84PaIssxp1dWKalRruMJYGQK2LDuEl53Q+d1r -nYBPliPbjWr/9Gkjx3K4B0CfWWQC0sUl77bNRFqr8FXkjRZcvkCoxxHG7PIFG77r -Ld2SiQ+eS+dp5QijuuMC8skkvQuuxS6eIk0g+jjGlNhjuu97Ya6xeQP/Zxek37p8 -P1u9TTmN7nPtlzGXGrfKVi9DtJ31E805ruXFqTuoFfcOBRrtfY+DOebX8RxIwQV/ -TEmyxwoXdmkv03EYwD6AJSmx3WuVi5/revcH9nfSEHDy7sFC8CBp4aavAFRQNrho -mSB9lSm5clGLZiD4nljF1EFABwQFch7HhlO0KU9zY2FyIFRlc3QgKGRlbW8ga2V5 -KSA8b3NjYXJAZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjq1sDCwoDAxUDAgMWAgEC -F4AACgkQX2NWum2XMqywLwCbBT6UT+lNWMh/jxFu/m5Dy2qMwpMAmwePBu7USi6T -WKaXYRSL2yywJR0HuQENBDbjq44QBACdC1XRPM9CMFrgVUvioU7SShffLnjgWBZ3 -hqbOYrsgtXfuQdv6lAixnNPdnk/k4mjL8w1pqbjUmfmbppVDxzsiiUQlJatzGDfU -1gDc7ksnXpF/vzghbucy8HNO0SHi3uM/GXC574iZ1oxa/A14fKnCVYT1ThqUa1us -C5YQXHm4IwADBQP/f4LZgN3dbL4jLqXHDNpAIEjiTbKXxDKHOnAof//4SE0mpaNV -HLu3nxI57CtXfSI2kMQSm/3pqpTKzaBlM/CbMAJUanhmlLPARDcJ/hQcDtBsF5nF -G7zfLfe0SBwgsM1HxL968Vva7WsbYpSa98+3HSDuy9VwphFp7i4HbnCbSK6IRgQY -EQIABgUCNuOrjgAKCRBfY1a6bZcyrA3hAJ0erCoxKtpc184iLkp5kpXQakDGHgCe -K2WXA5gTOULftladXZn8tNoXM6CZAaIENuOsQxEEAIQRmJhsJniNi/bRff/YGrZ9 -aFWt81G93W8WhV51qq+ntUHgUNY55Yyos4XLOa2tS+K8zP6X15FesVBPYIQa5BIC -10mAsLfJ+1rbnGJPuNBA2U2MoEaRxo/JtXQ//5jiTRlYwLDRnBzuaMCPdsirveu+ -JBw53ytRwjwe7m/D1PPvAKCp2dj1FtDjubTN7kCF0o2KzPwE0wP7BimQxXyPwSzG -qLaHXSEBsh84OQTxPI98BXgq0195/A1B1/pPs356euKlqoefUTHYhbjiMYbjZT+A -6juudf7A2Ucy03G8HDZ4k1f1vmzrj24+6ygGBcxTVr0BaweiC1DwG3LjQoJ1cuFx -RQ8BYJDGIwPrUW5JdlnzW2bJWfdyXOoD/0S7iEVN9txkSKildOeP1YcDCD8MM3hv -F9kUc+1hbmir8SOZ/IYJAyQN+j+mYWsLuKtZ/F9pqiBNTXH2jWCTqldOD/ZYxHVJ -AARnkiVG6yckMLsxHi2LPPBK8xack0y92mKe7za/7fhVgCRSs7M/rzUbzUhyInHS -yxr2SYb+8lbutCdQYXBhIHRlc3QgKGRlbW8ga2V5KSA8cGFwYUBleGFtcGxlLm5l -dD6IVQQTEQIAFQUCNuOsQwMLCgMDFQMCAxYCAQIXgAAKCRBdFeAdP/EyBgb6AJsE -NGQmK4nUrwcbtZ7+av5GDQ2T4wCfYJaV2rBtTR9aWTRQfZOQoIkNF8+5AQ0ENuOs -cRAEAN5hO+fEhqW2pX71oSUqW/TRHWSbybNc5brQ1tzgTbheHiG/LQJ1lHjtZoZQ -syW3H/efEuNARwryo4IjvK0nmiQsqZUR1795XTIbo/waPN08QujC26uWbL1pYL5y -QarwbKOoyAst4jgE1NpZVc/r1+WUp7NuEapicVjvFNzkiVCLAAMGBACWQJYr+h0o -zr7JQ/BqI8vTKuVXb+DIBQjuSzN7LvaiIqMqb9ZdfNNmZ1Atvklo2Ce2VMyliQzV -STZuHJQbfrDTBXBf+Q+AINiHdZEAodzBvDv6p7vsTnoP+A2bS8l6xrWObKt3Ky9+ -GUDkqW3WuagcUKogQgEb/FKec+GegwSgUYhGBBgRAgAGBQI246xxAAoJEF0V4B0/ -8TIGk4cAn1I/jmu7FSgglh9aPmVYAw7HWQMAAJ9PAPPXfqtwza6I8ttGPLYNvEAm -AZkBogQ246zREQQAgcIj/Eo8PrIhEaxKcjc9dNb9/0BZ3BxBk7x9a7HKm6o0/vcf -LH2XFjFxB4Ddfe+O1PC9KNUqIi6GTafGbyqS47XsnOJs5nvsrgmVpUUzAd7p0dxc -c2tJodwhkH4GtOP4i4P9XBrxngQrWQ0ju333EPF6wLWi7qkVyGENCfsvktMAoKYg -M+XYh9UQe7/HX0GiCnk3ExVnA/4ryBxdyBihj02i6s8vAe5mlTrwv85ugouSB95X -EX8GPfvaWIW/TpUWQ6a7o8YzU/kIPa7YzETYX8e/FVr2Zd33HAfeLUNp3OS0NvEb -YJlGDfW7/X7qLVv1o5WCjCHUhK8DCf9Ax9b4z7CbRHptxSE4U79NCCOsXQsObV28 -qlGsFQP+IIaCh7dTqADw/nBmfuXxepPKXS6Xdi0to79LfQtr+TUtJOEVGIbqqQBs -gESFiT5qR0W7qhOnl47TIQyPQnt/V994QwyAGtIgtM5qYFRW70g1FkyDRX57PzTM -uU2BjVI6mHkaUkLaLujbRXiQFm8IXJ4rf297GppKuSgvNcr7Rmq0K1F1ZWJlYyBU -ZXN0IChkZW1vIGtleSkgPHF1ZWJlY0BleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOs -0QMLCgMDFQMCAxYCAQIXgAAKCRAcZ+wTPGYchNG4AJ98zSyvQ3Rt+Y+AVfawyEoo -sFG5KwCgmMyj4RYhRlXKWCPORBxAfCOYMtW5AQ0ENuOs5BAEAJGi4T/jrY5BtRTM -0psAneQytzzFgH4+LigUXAAb0QDAOkyGNfWHrfHJIS7A3Nc9pMWAdOjWgSKbYyrz -ra0SQ75/SkI5+/S5ev2Fpki+HYo7cNgVXnbCJrIY7k4DAMunqPJ9JCUXc88WxGvK -V5b45htqCPnV2Pgq+AEIKD5aGfLjAAMFA/9+O6ttUbeY2bQHRdThl4HUxQw4lgYN -7stgGZsbHCc0y6ln1HF9vlE4Tl6HI/NR/8OauQrXt8988dh039QNZsOdAeRWTk4P -gSuXq6VDG5WNw6B9bvRPKXe5yeVmNNl6KESBzMcq87kANZWZ68vKJ2JihxPHRAyf -xwGr2JKkVF0S+YhGBBgRAgAGBQI246zkAAoJEBxn7BM8ZhyEiJcAoJTy/pFHvd9y -xAYZBYp7qLG2lUIOAJ9Rlpbjou3wb81vE+Qev1+GQGpaVZkBogQ24644EQQAlNDo -1aAt9iof3VI1z3TehyLrBIR4XmKRSM2Bx02CZhQRIwY/QsK6WBoxlJqfgUtsBUuf -cztjJaUBixq5qPmBgXYqN9/B8HZvG2nknHdiqKrvqFpAqATJtlccW0tzPJKtKaTb -tkORBDv6hssFa1aXwTN7IjN5nLI1Wh8lsvk9SKsAoP5Z4IDSK/mM9h6FPRsAsAYv -d99ZA/40UwQLl06u7wBtmxqSdF/86kjC0kWX8J2Y9vIceiNEiE9MmVNcYIKwIM0m -wduF50EksVjEdgWUJrqT3RztJfMT5+Sgm2KOAvvfmbKa8RF4NPSrVXDDrFeqk6uN -DT0jnUUTQFYTjk4Pxg9Kl+a/c7Qee6qXn5qeDX8ubZqN0noX0QP/Y5HSgi62UbBP -5B+e5BqE+ZLeJ7yVtl909NwTCr7KVZt1o3Za0dCYtMosPT9ObAjCanhSnuEWa3hu -outOgorWaUSEW6Y3zBKvN/M4FA7+1Rhe86gnnWLt+rHqX5M8Y/7JTcrugNtR04DF -sYga5A16CLsTDxSmM2Rgvpwh14FtrqG0KVJvbWVvIFRlc3QgKGRlbW8ga2V5KSA8 -cm9tZW9AZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjrjgDCwoDAxUDAgMWAgECF4AA -CgkQO9vtsXd/vtOr4ACgllMIBb4leDKz61LQiA4TGWQp9+QAn0gF7rrvXtHdEc9k -FQxgfASZH4RZuQENBDbjrmYQBACJ5res4tXRZj36s7P4KZWUf0YC8mtLxxeNEXe5 -ckAtn8gMfcSQJ4Mei4O1EBvrKZ9Dz28Emv0FmDd66DUd4ybRIk1PN8kWry9UuGLA -f/VBAkMIyXhYCEnB7wRsNj4kF5DhYiytep2wekPocZO2GAUoIyY2yMNb2m2g2K8U -nK2QBwADBQP+Ixih3o+++i02Xwi4wOe7aro2xSeBmH9b8nEaJ8v8RVLRO0AgoR4G -LzKeTOfv57FU48tlY7sxth6FOxeJaQkS1nD1LRpb3GUDZr7qM/yOGYp0WhdRgGW+ -c0eYa32g5ajq2zn3+H1L4yrmRSZM4nmZ5ZXe9ijkGs0UNYqmi0gBYxqIRgQYEQIA -BgUCNuOuZgAKCRA72+2xd3++00nRAKCX6f3/mVnEreWCgorUdZh8hg1LEgCg7FUW -Ctn3HWOwgOwxxKzOs/rQm+CZAaIENuOvBBEEAMUtk4AJiXP3jaKpIhbi3B73S2SZ -67rKzBkicjelpwWk6LndsCrbLsIWsDf8fNtih0r9As+2arfApkNlwuCGq1ZlPGGG -Ef18OqPxFvnghVEbDdcosP4bIm3k6G2sgFbMl68xAGnTtkS5Gfz43uTuznPzdZnG -bIjP0uBmPfZk6GW7AKDhi4htuxr3Y+ud9lx1bWM9KqUtAwQAiRYHm605RZVBkdzl -fYx1Iwgn/l8Chq3MsPrfBMslapBnq1an2/nEQPmuIde9C6ALN1t03DHpKonx2Xgj -YVz8pgty2FU7txSSm2EE+975dXp3ov4TfD1KxksOl770PAzixLfNhPW1q4A2cEru -GgO74qEX3/fAa1J0nRKDgmA/mgYD/2TSZKCaFHoc3IHQnkygmGzzZNpVZV2+1kIB -8Z2hNo9V81PYpzlYV8SlG51ajW1G3ePcti7JOIP6MquNUbYR4TOzZy1Dq4+VqqZC -B6fOeIKL40IKKAoMMDYFNLp9zcT+s6+6DTPH27eE1WEt+NQjBgr2ofC/4iAU/nmA -Ymo4xn7YtCtTaWVycmEgVGVzdCAoZGVtbyBrZXkpIDxzaWVycmFAZXhhbXBsZS5u -ZXQ+iFUEExECABUFAjbjrwQDCwoDAxUDAgMWAgECF4AACgkQpeZ/f6OuPqGvfwCg -oevUn2afCdW1bLwbcRs5kYrM1GwAn04Y4r15A7ytYdO2PaxSkSJ4gn5NuQENBDbj -r4AQBAC4cckdPiWgQNkGvAm3q8FxzRLog68/jffvj8Mvt++XQ4NikO0VJ8ezYkVd -+vG3v5RoHTISynmMWZZjT56aFDSDZPOkQs2G0qZgAEgTpzCUBdlnUC8ZrHSTSQjC -n7HtR2cpYCCUBliPtatDvS3Me1XdRfBhXib04TB0ci6DrzFQkwADBQQAje0R1INm -9GkZKAzTECi+lVei7wbXkn4JF6n9r1KL5oULVF8aGHNEJ1Twj7kuq2kacYjc/Di4 -KdESRTZN9szlZnNruvAd9JKHIgbeysene3yRhy+YFaqXm1MtWCdwwaDiDoHDASpl -55RtuCKxz6uW77qhrZ8E6GRDrhI92R88DbmIRgQYEQIABgUCNuOvgAAKCRCl5n9/ -o64+oWsJAJ0XijmoDUP1Iu6lhsSlmGOiNO/l4QCff5G6w6Vkq8d86Ev2IwS9Wf4u -NmaZAaIENuOwChEEAJDhTfBph5G51alEDUaIfFvD0K+oXDXqDB7hDg3stVIpZR99 -d2bo/dPOuVWorwXFBDJeK0c7iJEQrMWKlxdqbRGkH8paFSnL5XWo4xMjknqnJzYu -3gb734ioFHTC4WDM2/voTGuFpLw+eirW+wl12wusHpnNkWxMEIWt2HoGTerfAKD3 -JUBraePb8gHKnXFzyEu8RLp3swP/XaAKje+NAYeqhcAqxv2SEPUj8EMgtX7SDkky -Dv8wuRfcNwMAt4XwHYnnM3bpUwWj2JcDGE9rsNna/HuFAjz/2lrhUKncH0Cywvjh -Ytt1t92j0cPZaeR3pY8R/bm8Ns20tiP7uxVlj+szI2Pf5KiUHhiWHJ2RTXGE2pUm -T6UFhc0D/juyZvINKwkbUSSwpKvsoi15d6e4Wx5PZ2mArT5y+ULitBx4WKIsXV6U -VVaEBNaBe63k9cFGdPEba/HflSd76kLmcSdy+Fr73d3TMIrmwAKMVdKjRAEc3l87 -YaPd2/LdT+TWzCQw33EotexJ7yZzZA2SJx27/jyIgXkWtwvn5UCMtClUYW5nbyBU -ZXN0IChkZW1vIGtleSkgPHRhbmdvQGV4YW1wbGUubmV0PohVBBMRAgAVBQI247AK -AwsKAwMVAwIDFgIBAheAAAoJEFjLmkyFqB84JOIAni+c3CDhA3k2Pp2CWgBSFcsT -A59CAJ4gy1+t/Pwk/095y1T6g3rwRbE0zbkBDQQ247CeEAQAnr0w2OcvlUX7E8u2 -C8dJGIj7wRU5qDazxh0tw55/ybJ3/KyhCFfsr2dZ2E7Zw6Yvc1u3WTTf82nH4S+/ -IJFSI+qBi3TrcwVtt8Xa3Po7cIzNvS0bBhqfmOOXJc4ihUlADR2Jukm/QC+f6bO8 -IZBDWr/7LnT4SwEPhPoZNMFb63sAAwYEAJ2kiP3e1zM+zEo2i2jkOny1Igyn0sRi -uw0OXQ9B656zp02G5qtDN+IXhgLdfQqgqyWckP4BLDJ4NtQoEM/Mr2/7oj3h01Xp -bU86R1QFQOXmoWw3q7yqEWIwfOBqClSF0A14sXdjQwadyabTFsW4m8Zn5jLW+1sH -4PrVjHoNEz4CiEYEGBECAAYFAjbjsJ4ACgkQWMuaTIWoHzgImwCfYJ4NGyH/snAB -xoxryuVciL3Cyu8AoMtIZ222A8al4XK0DrQqJAnIZlF+mQGiBDbjsakRBADettZo -8gTOTr1nJXbk5sJfuVSQaMmbgLpZpMs3Q7C+gAX0XX+Q/vcuHp+wV2Nq0S4v+w5K -+sxDF4A8UDf+q+GmNKMA5U27hkcDQvE48EYUghcdWKjWeFwmmJOb0KMoatdeh4iP -T4j8ocGw+i0z6o/e0y0OVWsUvIqp4iZP3UlnOwCggOq5GfPJMq3K3cND3nU7GOR8 -e1EEAMcgH09o68Hbjbwpw+ejPuKwVFa37COX/65FF8PONeleq7Mr3Y8yKqbLIsIW -DaxrlflpbyMz/ShuDdNU8gh+msfwh0+RNzdEPmpJCCVJOdZO46cudgbyAQriH7Py -sSbi7AbmpnMl7kQruhAZWXLtnH1e1kKovB43a3ph8wF4kotyA/45A8bLKEmJvpq/ -amY6VjDnGsxkDjjw2OoVbt8sLdGjpganj3fvy5KRhWeWLKhmtq44tH97m4YDmGCH -Va/Iic4aDPMMvUPWdaY5DyCeerVOb3JN1qLC7o5x2HBt8RE7cXnPJl5VKxc4qzys -5bqQEYYt2dP4cJqKk3OjjCbl6TJ+8bQtVW5pZm9ybSBUZXN0IChkZW1vIGtleSkg -PHVuaWZvcm1AZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjsakDCwoDAxUDAgMWAgEC -F4AACgkQqUwPdWUyRNYzWwCeMxscN9idLHgH2DP2U6tP0tNR0T0An3lfFgidO+z8 -ZeHXzuOM9TAS+jz6uQENBDbjscMQBAC1u+09NP46dPnn6RJtczL3LEroyrcPmHOk -3FbiNfJ8YMnFBeST+U++chi/kKzm+N4y8TZE8sHwGqnkeIBtJX2YmQJFhKi2RR9A -tVn2HV1ZTBYT1q/P7MpZTPMI9EODlCEPJTvX+MdtP8xh0Gsj1i1wujQOJAiXdrqs -Pxen4Sch5wADBQP+NRROzLFq4kBUpgoTyvWzJl96Gdykf+O0AhbTlZ7ix9KtQLfx -Grqzgo0hwDjb2QzeWHfjVhaaaSc5UWNMuIQyHRcsj9x4n25XGE0HUyOVSD46IOAj -fZF+beXOa/NbYcR+zzORfXr1qyW2g4oV8LN4s4uV4dPamQ3l98Lkg8lhWCeIRgQY -EQIABgUCNuOxwwAKCRCpTA91ZTJE1s6YAJ9ZgYjqQ3rScmCwhc3Ihzt2ATANbwCd -FuVgvD2Yh8lsuiWswLDFrNsDk5WZAaIENuOzmhEEAKMDGobMDqPX3SKI3/W8m9Lm -NgtDUffHGHNd1npnGM8mSyVfWjEWoEg2GPMEmdX3/tvUUV7nTz02IJwZRVlrbEPd -W76eItMAY1NB43LpjQTrAR++mVAslulUY6a5V5nJKEc0IqOuxkW1LWavujX1JRvl -BZLeBkdpsVNuaGJtwUFfAKDfqoZUCcZxnO+dRMalHLfGOn7O4QP/apMk2mc+GJwp -KSxXBvoQkVcfuZBJmXJuUCc4BUUzHX0ZSKNbgxY/kVR1xN3krMgOCR6dEsGukIsg -VWRDj9to/+E6IIs6YKhG7fGcXKhE8z8mf3hDLcmjbCKDCSFBT7PI5TkLzlAEP1y2 -Rtin/Sa71unGZhNyEfAPW/d1dRcRVqMD/2WcTPUaIjRvAqmbxUpenRhg/mF5rwmH -l81VvVBbZCoZ35c0edEZKpfmyYbKuz7GhjEPz6O/UWGYZpK/7r6f4kFUrhO5atCl -nRyBkvmNmdfbtM5hd5jh3lgqAT7tk7ntPAIh8X8/qm5+Uab63kZwXCPiSR+iEwRp -42GbVL7F/b2rtCtWaWN0b3IgVGVzdCAoZGVtbyBrZXkpIDx2aWN0b3JAZXhhbXBs -ZS5vcmc+iFUEExECABUFAjbjs5oDCwoDAxUDAgMWAgECF4AACgkQR69LaWHwR4TM -SQCgwD4p9j1sDwR1+9bBrzNQzVIyzmsAoNL7pfcdW4Jou1XHNc6hv4MpsHtvuQEN -BDbjs74QBACHkUCB29pMkveMEZyNiKImizF5NZ/cv91Rj319k3xHf0NJWhQp/1G3 -8SxLkPLBdWcoB4mJRNjDyVsxFUXvRWFIMekwL0q1sHSWTcJwCpQs+LKKtPmD3LA3 -bhbuTSdpYgmKy21SH4epubqBzk/P0193mWXzHgSGLeUoTo3N7eBQ0wADBQP8C1Q3 -WGrBZNOmFVly0erclpQRv1qCa785yx/bj9ur2LxHwVozAEXh8jmoiKZyoAz7YFnp -29kR2qtVplH1oePNyFweZqIjtmZbiCaT4scUVZ/3LuYbxgMoUFeRoG4mnEVvUUh8 -mmZovMmZFrvp0uojcDsfYTx0VBr8waxgJrg2YguIRQQYEQIABgUCNuOzvgAKCRBH -r0tpYfBHhFPdAKCcyVECIa28vmUPgZ2jkXQoQ/nNkQCUDpGL1aZn1eKrDlHcGyD4 -CzywnpkBogQ247Q0EQQAvVX9TJEynPJEsX3X2fGPPDiQK+oB7D1INI9bfID5NKto -o8qybivOLo85i5m7RUiEyhX3E9lUg9buKmtIhas0sJ8sLURmCndIKtXjIWg3Kd0p -mjE8q2zyd7ChQ3ffJ20875wNbR4GQhSO1WTuxwRoL53ft+9JTULJxkQRf71Azm8A -oJZQYphKeLWrLtFjb2WKbYxst54tBACS7C/Vu40euIevp2TZHTtY0U+ObFvJr8jD -rdQZMkUFSuhti7rfO/bf7qTwmCvv6IVmn905ACh9bnKwZvcR5T1yR2b6CAN267fz -riZhu6/FG+9Ddr62ZnV2rP8Oa7uxAXCnoovaafKYupopvHV0z0tUf2+wasrQdHZT -vc0pfY+56AP/WOVJ0KGzP6k9bYjYSRJ1MJb70wdVFiHdlIlEd5P3jQsXOyHVMrWp -6qH10sQLto8gweWJr9aHem0QjTNSTVpzp6laBHf7tnLEwCJGeX5f5BOh87akRjwf -h9J9zW+DBrtpqS6vjlDYU5y6RGbGRl6ndtXhV5FpE4cbLax/pGFWEq20K1doaXNr -eSBUZXN0IChkZW1vIGtleSkgPHdoaXNreUBleGFtcGxlLm5ldD6IVQQTEQIAFQUC -NuO0NAMLCgMDFQMCAxYCAQIXgAAKCRDe8Pe47Gfb3qJqAJ9MbluIqs8qjd1lOkj5 -8xC5K482bACgjeYJadH5StXmbJMGw2ZD29yevzO5AQ0ENuO0VhAEAM9X7EMxDw3O -SqgnI76WuIBSsI0gF/UptzpT8g8AY6gQPVhU9fgQHbu7cr8SZFV3dyUVLTzkNq7m -sUivd3/Fecuf77CpKBCrQlzst+UykiPQ/bT3+gq3owGi9MBCfeU2l5yZZ3yjGIqg -8/XnxmCbuItw69FNyz7+nQoDM28ci9B3AAMFA/wJBLjxXXqWFY5JdXq7ck66Qx5Y -HDpPH7szUKrIGKGZHxk2UXoU8G9WRfQ0VVQfaomfnKvo+bFDFJGcLfIITI8FrjzG -oh2K3PKcxsQiQ1SsVlMT3XmuvST0yvDM8a4t9o+2v8yLLgEjR2dn/lTiGjE/ANun -Ro9TBGpvz5P085NmzohGBBgRAgAGBQI247RWAAoJEN7w97jsZ9ve/yAAn18Lg2NX -AdY6HW0LEurh0Xcv8zlWAJ9ePiLMYxpoW5nv4g4nuOAWoL/KLJkBogQ247TcEQQA -rUqUbiVTMxJhp8bA4vMXAzCuLjys4A44DE+uRFb9AGsZTmw/FTPETO7iU/3frlyY -yTgIvI2zDF1SwHXG06KF3yIu8LF6OCM0N0k7KnKpw8M2tkPiT+D8ANrHU5d178ev -zm40PyNDyKxSGNlIG1N4MIKFtNdMlahLvu91kG04WesAoLPa5zISvsX+Ew95M1o4 -Qti8iYHbA/4wr+eYRywP35eb/F5V9bOLWhWmEDzw4KHXQ7V+OJ7JD5n44S5KLPKw -IogohDlPmrxDTAJ/YAukApUItd30kr0Uq34QgFktAsqgCP7C5KEM1TTxU25Tcs4o -jUHoDyMj14ECuiTCP0ZFRKUivopgjgRhFTKXVVWTySkQ0g9SDaITSgP/a0FyXMQU -YJjuB7GA6r4U6QnIHsxS5xrQgkshb4tp2MVWMhqlhsfOLaj1WZ+oe0DxKw0O3YKT -H/EAzmNelKcMbtTcilLaIdI5l+Ylam/bZe7QvbN2s72Kn2PZjtYqO3Uzqw14bqAJ -Rl0ekleMdZRMMzAsour+iNVPHnlodXnQ2gy0J1hSYXkgVGVzdCAoZGVtbyBrZXkp -IDx4cmF5QGV4YW1wbGUubmV0PohVBBMRAgAVBQI247TcAwsKAwMVAwIDFgIBAheA -AAoJEIl5psVWf7NKt08An0PRqhiMzF+L37DyvcaVl+0zSrmbAJ0fL+8D5Frcp1m3 -YtBMpo+j5dsieLkBDQQ247UFEAQAxuGlBvqoDkxhIDgFZzdHJO+gJym94zgSGHkB -mBIBf5Q2G2O3zkN7SIENI16yg9cxy7zkTbBu9PMgzUe/UuQov9Z6YXKzTj1jLozr -GdljKOcW5YRvlibo7eKXDUkSvT+X6J1BOIVexl05Y4Ncmf7otNDre29QfK8gGBO/ -bdQd7L8ABAsD/R4Nq/JQav4/7d5ETuMZddPAxV4kCnY+7F7oJgHDKJheJxt49rNt -fXSxBZUsJ9P6Xhr46fCRT33DD1P8RyUmmS3/dJl7H/qR3A1rox4FQPWAuk4WGhsf -SXvlZnFWKJhC8TZzFisjiXjw1OFYiF4TArxj9D7d/cHEKIi43rtefpf+iEYEGBEC -AAYFAjbjtQUACgkQiXmmxVZ/s0rskACeKGRhY+fGFtaL1JQxoHdDPRJ+wu8AmwQa -u+u5pPZc9UrBr0UV+pGPpY+emQGiBDbjtVERBADdUAZzhP6+69VdyRrgRNotouUv -XE6I8h0kxZFZZDrQJmpZcNWkUHDqgbYDJ9RmIeEuWZNmyzPxSFcvD9RGw9KmIZu2 -kZYqIuzg4KqOyU3SUfNycarEZYJkmLEyBlrkNxZkmPCp1cRsMKGCbhQs//v6Iq8h -6dNA2EWgJev0y12gcwCguk0KZIqVO7UfkaVaZhMr0Cd1at8D/juKnRViDMi9SEjS -JZwb3mw1+yECnM8vrM+AoGoAKiCz/n8N9Gf2DTsFy4yKEskPQ8s09Wc5epBFo3gN -ruMu4kDnde0uCmiDEbTwzpdSKZO5x9yi+7b39uCNkgoDlzwonaXNdIn2NnFKjL47 -TnV/vKFdtSZgLW902vwYGTr1ArL/BACIcx9TdxsJ9NMyaKD7MEcKQeOrOqv/Mq1H -xFPkDBI4hTZpQiId1XTxqkJ6UHDw9sR/TvtO5YKrZjINkmaBZFiHlx1oyB0B3u6X -UVLXIc9liyFyh9aOBdQkdHgjyI8Kzk6Z0ejYcre5TY4zfplAZKkUDlY3U0Sb0a0x -IGhgo3YRELQrWWFua2VlIFRlc3QgKGRlbW8ga2V5KSA8eWFua2VlQGV4YW1wbGUu -bmV0PohVBBMRAgAVBQI247VRAwsKAwMVAwIDFgIBAheAAAoJEJ7vNM1LEbJfSQQA -oJRRe9UHKHiX2iFczXq6nrvr0NhLAJ99W/I5b2/2QQ01we8i1mcSYPWj47kBDQQ2 -47VnEAQAmuK5RcS0zTyXp6SjW2+WeQIpJnJDflL0+iBe//3SADv01qUmw3jWMAux -G+CcCApksl122V9npEHiLC4Q2A69roLRsbxKBPebustfadLJoVYqPsvjnrBlafe5 -GcrFPnKbE0wV6ZXx/Tp/eSDiQlid4lWz5J+z/mN7KhHANzoRAbsAAwYEAJO5fkCS -dNwkisFXzeKslWxm9Yoe1TOouiSV11hex0j94Hpz5wGWEXF7z+FbDq+4V0UqGkKx -aERsl6HMWNkImj57N/9h1C1YDfiKTimg5tZpKmehXtldpWGCNDZrE0RasrFCKENV -hFMhpc4kAnx6rbA0+LhRvJkvkdxY7pKU//aZiEYEGBECAAYFAjbjtWcACgkQnu80 -zUsRsl/0XACfffuI4IS7cgh0PNghr/0v3L/NhncAoJNwutmN7kkv9n/oPqkByzLx -vZt4mQGiBDbjtcsRBACBDJOGX9C/xxCVZNP6OHz6cL5vM3PimUAhV+9HAVVPQViT -nFKrkYPSQyRfWzjOU8RO1Tp5CHz747oOb6j9P74yH1uy78yFg4UuhXBWinhuCKKq -4IIWwJkCKBFr1U8fu8a6Y6NcjqiDA0KmGRJrMPmXenXkJpFGHG78rUvNi9IMfwCg -ugzNILh/3XZCZU+BUPYeXL+nUAEEAIDXZhj1vFXHgi9lmijKDjJocEBoamN/taQy -6Ox1RRD6HtfAPY5TER1n7xm9hMzE+Ov1IKpH/E872Rha1qu1v7eOa6eTuNWF0Nvm -SR955freRsNuR8JNIb6StI2ER9pzBUfjykC9pg2wPeC7wpQJIF9TF+Ja1BvG2I+h -a2xJ786AA/sHEUvAOsc58YbPlbIPyp2JdEHvXTRT2NISVRuTMQsg8vV99nMYR2CU -h270uPyy2xZaD/kYcJ9/1ngY7C9pbbNWoV70PkEMO/qj67OIViWVPzUhIdURorbp -Ghuc3oBzUxOgial7IbISPRItDgg2oZoY4hqyQNx8Cj2ZZAzDpM2vCrQnWnVsdSBU -ZXN0IChkZW1vIGtleSkgPHp1bHVAZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjtcsD -CwoDAxUDAgMWAgECF4AACgkQa8R3gFSs0kZA6wCeJUyRzuFbsZ0uQulvpgOIRTLT -KscAoLd3InVEj20peTUQ5b2NOimSXnKxuQENBDbjtfIQBADMfPDBQoMzv52Mmjb8 -SdaYKKNzqDd9K1oY2hcMSi+LcHag+KJFOyKBf3SoHmcU/vCEN+LyTgljYSKDmEf4 -wZ2+eLfqFgSdBJp2xm55ih+9CHXg3dXx9SbHiGJCIxfJaIsnNz3VmJGPDDjBlaf/ -hjl/7SZvR+MJpVLFPGjj7uOhTwADBQP/Sgv0abeCXVdVXwGEmhdV0VDo833IQRdR -u1yt+QLnWRMGTY1oQapsH6QLwYSZfDJlxbsBA3tfqKStpRSbdGNNTsK+RIehsGdd -i3sWGplRGm5Xt5KpkY/mc/tLFaYJNMqAgfWQcKlZHBp7EoWMgiRiDJUWq0TH1wRD -oPaRc+H5GdqIRgQYEQIABgUCNuO18gAKCRBrxHeAVKzSRn1jAKC5Gp5sHM9sWdZe -M6qfu54F2OwMQACfTjYXfpMApAROPkjhhFNqH0d8x5E= -=1N8S ------END PGP PUBLIC KEY BLOCK----- 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 - - ------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) -uid Alice (demo key) -uid Alfa Test (demo key) -ssb 1024g/46A871F8 1999-03-08 -sec 1024D/1AFDAB6C 1999-03-08 Charlie Test (demo key) -ssb 1024g/BC43DA60 1999-03-08 -sec 1024D/FAEF6D1B 1999-03-08 Echo Test (demo key) -uid Eve (demo key) -uid Echelon (demo key) -ssb 1024g/7272144D 1999-03-08 -sec 1024D/8FC282E6 1999-03-08 Golf Test (demo key) -ssb 1024g/9DCAD354 1999-03-08 -sec 1024D/04259677 1999-03-08 India Test (demo key) -ssb 1024g/61F76C73 1999-03-08 -sec 1024D/43C2D0C7 1999-03-08 Kilo Test (demo key) -ssb 1024g/9AF64D02 1999-03-08 -sec 1024D/A9E3B0B2 1999-03-08 Bravo Test (demo key) -uid Bob (demo key) -ssb 1024g/E29BA37F 1999-03-08 -sec 1024D/EB9DC9E6 1999-03-08 Delta Test (demo key) -ssb 1024g/B0C45424 1999-03-08 -sec 1024D/7372E243 1999-03-08 Foxtrot Test (demo key) -ssb 1024g/EE45198E 1999-03-08 -sec 1024D/34C6E3F1 1999-03-08 Hotel Test (demo key) -ssb 1024g/D622AD0A 1999-03-08 -sec 1024D/D2699313 1999-03-08 Juliet Test (demo key) -ssb 1024g/35F8F136 1999-03-08 -sec 1024D/B79103F8 1999-03-08 Lima Test (demo key) -ssb 1024g/FE56350C 1999-03-08 -sec 1024D/BE5CF886 1999-03-08 Mike Test (demo key) -uid Mallory (demo key) -ssb 1024g/4F31EAE8 1999-03-08 -sec 1024D/30CEC684 1999-03-08 November Test (demo key) -ssb 1024g/8B70E472 1999-03-08 -sec 1024D/6D9732AC 1999-03-08 Oscar Test (demo key) -ssb 1024g/2681619F 1999-03-08 -sec 1024D/3FF13206 1999-03-08 Papa test (demo key) -ssb 1024g/63330D9C 1999-03-08 -sec 1024D/3C661C84 1999-03-08 Quebec Test (demo key) -ssb 1024g/A029ACF4 1999-03-08 -sec 1024D/777FBED3 1999-03-08 Romeo Test (demo key) -ssb 1024g/11D102EA 1999-03-08 -sec 1024D/A3AE3EA1 1999-03-08 Sierra Test (demo key) -ssb 1024g/0F1B50B4 1999-03-08 -sec 1024D/85A81F38 1999-03-08 Tango Test (demo key) -ssb 1024g/101C0402 1999-03-08 -sec 1024D/653244D6 1999-03-08 Uniform Test (demo key) -ssb 1024g/5522BDB9 1999-03-08 -sec 1024D/61F04784 1999-03-08 Victor Test (demo key) -ssb 1024g/07287134 1999-03-08 -sec 1024D/EC67DBDE 1999-03-08 Whisky Test (demo key) -ssb 1024g/FD6E27F6 1999-03-08 -sec 1024D/567FB34A 1999-03-08 XRay Test (demo key) -ssb 1024g/41E408BE 1999-03-08 -sec 1024D/4B11B25F 1999-03-08 Yankee Test (demo key) -ssb 1024g/F7B080AD 1999-03-08 -sec 1024D/54ACD246 1999-03-08 Zulu Test (demo key) -ssb 1024g/A172C881 1999-03-08 - ------BEGIN PGP PRIVATE KEY BLOCK----- -Version: GnuPG v0.9.3 (GNU/Linux) -Comment: For info see http://www.gnupg.org - -lQHOBDbjjp4RBAC2ZbFDX0wmJI8yLDYQdIiZeAuHLmfyHsqXaLGUMZtWiAvn/hNp -ctwahmzKm5oXinHUvUkLOQ0s8rOlu15nhw4azc30rTP1LsIkn5zORNnFdgYC6RKy -hOeim/63+/yGtdnTm49lVfaCqwsEmBCEkXaeWDGq+ie1b89J89T6n/JquwCgoQkj -VeVGG+B/SzJ6+yifdHWQVkcD/RXDyLXX4+WHGP2aet51XlKojWGwsZmc9LPPYhwU -/RcUO7ce1QQb0XFlUVFBhY0JQpM/ty/kNi+aGWFzigbQ+HAWZkUvA8+VIAVneN+p -+SHhGIyLTXKpAYTq46AwvllZ5Cpvf02Cp/+W1aVyA0qnBWMyeIxXmR9HOi6lxxn5 -cjajA/9VZufOXWqCXkBvz4Oy3Q5FbjQQ0/+ty8rDn8OTaiPi41FyUnEi6LO+qyBS -09FjnZj++PkcRcXW99SNxmEJRY7MuNHt5wIvEH2jNEOJ9lszzZFBDbuwsjXHK35+ -lPbGEy69xCP26iEafysKKbRXJhE1C+tk8SnK+Gm62sivmK/5av8EAQNuYiCeVh4Q -pF3i4v6LDa82cNBI92zOHLJAu1nbeJ6bl86f/lrm6DuH/SYjOkRTQV9mYWN0b3I6 -AACvUW2sEdiVCzqYu9QdI92LJQd2HLYgKf0mIzpEU0FfZmFjdG9yOgAAr3LeP6n0 -SUaQqSNKJPx1Wes66+3KH0n9JiM6RFNBX2ZhY3RvcjoAAK9/tmRCQsDGIXRnEJZM -rvRjIUE4qvtztClBbHBoYSBUZXN0IChkZW1vIGtleSkgPGFscGhhQGV4YW1wbGUu -bmV0PohVBBMRAgAVBQI2446eAwsKAwMVAwIDFgIBAheAAAoJEC1yfMdoaXc0OXgA -niui4cH4ukKQ2LkLn2McRrWRsA3MAKCZ122s1KPXI/JMLBTBGCE9SiYQJLQQQWxp -Y2UgKGRlbW8ga2V5KYhVBBMRAgAVBQI247arAwsKAwMVAwIDFgIBAheAAAoJEC1y -fMdoaXc0J4wAn0x5RWtqCjklzo93B143k4zBvLftAKCFbrlxlNCUPVsGUir9Azxv -P0A3gbQnQWxmYSBUZXN0IChkZW1vIGtleSkgPGFsZmFAZXhhbXBsZS5uZXQ+iFUE -ExECABUFAjbjuFgDCwoDAxUDAgMWAgECF4AACgkQLXJ8x2hpdzS3wgCgk/BrqP5W -blWLc2+6jwlmuLg8n8MAn12puZol0HwV0mcd8aHWtcrfL8lynQGlBDbjjw8QBACc -jdcfV/S7I319mfDvbOwczDvTqDsRbb2cPhQNAbg7NFlWJKtRrmff14jtCt9M77WZ -5W+zTLwX8+8Wy3mMfrys8ucZKtfPixOXVPhyinUUGSq68IArA8vLSUTuOO0LIi05 -LAg6jzGhN9jgkQReZyqxub4oe/3JhIX9grgJ/tsjNwADBwP9GeXmMrGi5wMD3qkP -bzb1MqwsVBJq75eLLxu85JIN2XIAGw6Q0FJp4o7d4BAQqAMzt3ONU1OcCWlDQRDx -j1nynE5ZgRBiVoyudEELgNnYhp3MSEuUg7PkFWn+N+GuvyhVUHApleyvP09kvP57 -hif6yJRS+V6L1ugP0vZmBI4dqQ//BAEDbmIgnlYeEKRd4uL+iw2vNnOO9Y3cRSEx -yy8unuzNvx5GFG6KNtxoFCDzMMzUa0EDH1x/QJA3CgqMpS282nLdk/5O+AphiEVe -Gv8+c6pL/t7falIfSgKZ0j2nvCKH12SobwiNflTGJB+jLnnesjqYJD7h0SVLjToP -/vtKPYlXOU1ZpKzDwP5YcQQuRhF9Tj8SUxScIIhGBBgRAgAGBQI2448PAAoJEC1y -fMdoaXc0IKkAoJ/NQGlvFv5clcDIf1AXjLlTFG9uAJ9rs8IOzHfNWuUSNxdhRvO+ -O7fYF5UBzgQ245BnEQQAvwwkLp4Dtoie4/fvandnK4wVPCvgJkIbNuyQZCarQGwv -8RapBwbANT4vGW+ky2vzgptj21xYjOcdNMIhJ1Sjc7hjs1PLhwepMFrS4/Ple1Tl -jpEgxLZ5UxertMvSTr7OxsA76jjOQt0B+y2vs5zXgLtedux4+pdFxkgM8r6fjZMA -oJ5LVNdVRaSkiHaKZWQWsjfTs0/LA/wMHP/PdH4kjFmDRqOPp+iB8YYwQTPZS/gw -HtUbQhLcFEljaxrCMRZw0ZDMbzKWk+BrrBvgz4Wk3XawwUshYgi8SgwWIDG0jusE -PYOs1hBIdWTEzFVP2pK/NQzhAqJV5/390OLEY8SN4bts/LY1XsADzU7lhE0Oohx6 -FanaZCuGgAQAn2zK53yuk7o8UrPdTHygVn2McsPYYzOvlVfHCSXQ14oXjCs1nK1X -nMIGGM7pJjYpzv/wUZkHLNcHX4uVHXxyzRQ4oMPekncmaR8fu/YIQ9zag5s2GpKE -SKAynGQCKwI4H5eYn+ryIgOHNS44UnXFUwbEsonP5pJNNRIM7VimNGn/BAEDIkls -jKh5E70pJ77zKAq/uP+EnBQq0tCcyqQgQiG1n28iMQy45N5zv/0mIzpEU0FfZmFj -dG9yOgAAr2cvUYCyL3NVUcfw3gGkK+A8ZyTfoBH9JiM6RFNBX2ZhY3RvcjoAAK9H -YClNyCyakk4UDrW4qn8YgsdvZcxN/SYjOkRTQV9mYWN0b3I6AACvZ5Ed3zcwNvmF -Ptb2h6OhMGgwrNan67QtQ2hhcmxpZSBUZXN0IChkZW1vIGtleSkgPGNoYXJsaWVA -ZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjkGcDCwoDAxUDAgMWAgECF4AACgkQQT9K -8xr9q2w+RACghpiwPnn7F3HJsm9VXM8SwBjWThIAnjHZulQw9Tee9XDT5STui+ZG -+WN3nQGlBDbjkIIQBAChY8NSvu6sK0p4D0AVBsRz8iVXYqbRlRTZAHS4LCXwx/i8 -FmfdIXnaNLOoyi44YruSCnlZdh4YWquCx2mgywG589AzcFhahmqElNbKb7m4F//E -GIZK0zTgW13tQwG9hTXOhYeqchnOOaDDwPEK1Gr+2o/5ANqhqrin0TFFBWLgdwAD -BwP/R009s61X/FkUUAh8w4Tua6qndN/2GsqXsyPYjdF5E3gErK8jDcDLniOHqksw -V17bJG81czCRE5JcVFLLWQJg9cpeoTpP+YcF+m9whtswaOJ/LPrx888i/OmluSD8 -1VP+6zBhhTUbpazfLEdt3XczpW7CNdNbyiEcgT+6Cr+W2Gb/BAEDIklsjKh5E70p -J77zKAq/uPsbfaq2h50JWrb/wQiufxaUrYRvo5FjMBLnoUE+L/yG/Hp2ZRZuA5Ez -BpZ3ON5LaFadahL98oQe/W3IXFZwxyYfGCtVrV16zx6cFTJQK/iIqp3TNp/fA6TR -E3syS1FQZIZMiFLvgSy4Tsu4vAadP290Tc62LP9ivC3PiIxt3aqW2l/NLohGBBgR -AgAGBQI245CCAAoJEEE/SvMa/atsta0An3ZMmv9EVWVwEvf/Rwf7nbFsgGhuAJ0b -P+lAOCRSYziWSIDf+BJ9F19H3ZUBzgQ245HNEQQAis7GTDqtEM6luop6eWsxFi9+ -qhUVp9N6S+xlbwzQZVA4FjCqf1VR9JX8fwjLecmxT5xThQVcRqgeFVaCyky2Nge/ -FcFMPZQeaP5jv5GRWc5PvH9Sw8pvGOTB56V4ZeR4cQLDBm5CF5tKu1BCWWq2MLHf -ct7TXe6QCzZKcjzdw8sAoN9VvrKN+EbQC+THzdWaUWpdcfWnBACFWEyLVPTpI1jN -soCZ00F8Fau/2baXk8mdROlJZS6bq54ksfOQQzReBWce35h0W7NeBRp+yeoSf7Y3 -i0jTO4mrOiL/0NCcS8qKNnGKG1irdLes3pQhDZpcUe2G9W3FnGhxl6W5hpYc9550 -mUj2H3I5tmfSYsVcVjpNSIdBizxE2AP/SI1t6q7LHMQp0h3MPQ2z7daMhUGViXnV -l2+rKjb5T7bvSFdV0iyyuyoqvUPBGWwJFLAxj6esHRlQ6W8togHuoJCR7cL2bK79 -8mgYOExk5gBexq1VHQQZN1edK4LGo2ESKrCVtkYwBzAU76hYFKAbKMU8dMxI7DRd -LjZ3vdQ3FNr/BAED+xylaHWcBOTZBCd4ui6NIsLkQLv5uFW66tWYKvc2APAe8oKx -h5YMp/0mIzpEU0FfZmFjdG9yOgAAr0tuCtmJhCp9PoSOTFA2ssaMB7jl+5H9JiM6 -RFNBX2ZhY3RvcjoAAK9Ilc3l2agIgR5iIQnvOgyYUe4duz+d/SYjOkRTQV9mYWN0 -b3I6AACvfQ0dS/51Esd9E/rbG/m1C3qIenSthbQnRWNobyBUZXN0IChkZW1vIGtl -eSkgPGVjaG9AZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjpH8DCwoDAxUDAgMWAgEC -F4AACgkQMYwfrvrvbRtnAwCgs2haIgJu/UEpmCEnojO1zCoaBwwAmgPAlNY/PttA -u6zYqTh2M9yn1DIXtA5FdmUgKGRlbW8ga2V5KYhVBBMRAgAVBQI247gAAwsKAwMV -AwIDFgIBAheAAAoJEDGMH676720bIN0AnjjH9IN8523PCAYk6yD1IFM/ad1qAKCe -nkWU2ZO8/oU8seCQ3HkXkG2JRrQSRWNoZWxvbiAoZGVtbyBrZXkpiFUEExECABUF -AjbjuB8DCwoDAxUDAgMWAgECF4AACgkQMYwfrvrvbRtepgCeOpUG5rVkWVJXULae -GZzqbT+2SbUAn3HmDGXzAJ6lCiYh5NrTIb8A7wIdnQGlBDbjkf8QBAC0pe0mjRH/ -JmKL3mubSTRMKGcd77+l8psl4GtcA6iqNj3g650Q2xxgW+Qb1iL9SeiIJP8KuEfj -6vfPVKZHKkRAfsjnpbhN8zz7WQa2y8kkmqojHoGIh5wAD3NE6ox+1D2WvnySmU1J -OuAQlEDfRC5C9hSrQBkO0TUCWL2wquDv1wADBQQAl3TuGt2SCuYSXo4R2dNZpB2u -kqqHOj7nnTQu7ZVoi1OtgZYxor/w783GzLJ75PfdQMSd6T+Gbyq+QgpaiBvlmWtc -5rcF3ZgnxiW9n2zUlQ+M6denubJT6/Aqfn7yL9v0sr8K7kTrPqAM0lb6DAMwBkpN -8o+Z0+aIpG5/jOtnwuT/BAED+xylaHWcBOTZBCd4ui6NIsGHGb+xn5M8RwQblStX -KFu07GugiONqnqNgB+sywt1otn4dFUWo/4FzJzvEtBQ6EjchWAVKoVYj5H7ExOP4 -BKNDNb9JfOzu9ItHk8TvQ5X7HoV/r9eM0i6MRzNOlvchB1P3Hjw4a2Pj6TwpEBGZ -uuYqe14UAGPlUjHSn+LuhtGpE06zuYhGBBgRAgAGBQI245H/AAoJEDGMH676720b -j5AAn2T9b/n1T2CTa+Q5oGKLAsBIcgeGAJ9kC4ETWfY8itary77dKmyVJetgl5UB -zgQ245LREQQAubUOd0B7cFzJHF5vo5NwiMZ1JXPjyNqL2OWE/XfaeJiB55oMmVEP -mK1JF69wU7ZBpo1l4PEIWcP7WRMqvBEFl+8LnelRkSW95kwFr3D8TRnarZy3kfiB -F1t33dnkVTaZYxCDKOBdZ/ZiRvLa6gZ/KHhITfzaS7h36G2MbAlGlj8AoKQPFsEP -jByKYdx72m5/2Ju/4d4jA/oCNAKaJH7N8Y3HLis1ShhpytJP1yC9GJjtec3ugzYS -C7RKV3NJcBeCX4om3KhiDSN6YYVICf4wdqz6TAocoqPzR2t7Fz6+upxIgh5WGnnC -s2e7uO1eXUCSXONfiDEDzRKGTQjkdvwFo+880DkiGln/qmRrcILA568dwNnOrBio -5QP/dbkpUBhqGDr2LchpkoYyQlqzbvUpXJ1xlfZim1jfrmdfsk83dE3iBzvmT8By -IZcMoqDEHil95LmJp3qw1yVeApP/ZWR+0XiBLEF9GhcAOc5ihH2ACSXLWiRXpyMm -K2/erTvTX3QkAcqoQ1cFWCwNNCrlgycB84Hdm5GXdajp7cD/BAEDMzjCY4kr/Q3j -hyianLh3vPRtiNtOM1BAXVlyCFrMAWM4wvd1NvQzOv0mIzpEU0FfZmFjdG9yOgAA -r2YMtXCKQcwejpJAvOyUDQkN7pMthHn9JiM6RFNBX2ZhY3RvcjoAAK9Jr4qS3ZZl -PdL7YV1+Phgvnly8701B/SYjOkRTQV9mYWN0b3I6AACvUexSWiUCxWbF+aprVRlc -r9OTu8iDIbQnR29sZiBUZXN0IChkZW1vIGtleSkgPGdvbGZAZXhhbXBsZS5uZXQ+ -iFUEExECABUFAjbjktEDCwoDAxUDAgMWAgECF4AACgkQFoQQpI/CguYi4wCgmXVE -CJyjkfpJJBTdGzCjhUq4N/sAn3Cguw1R4rX0391e1pAUuyM4OsFnnQGlBDbjkvwQ -BAC2wan9ScDXLgCqN7CWSRM5B68vC3PCbemYsuOXZjdN8afw2LSHxZ3buRXfYxRn -JNo1pm4PGkMQ7ZpQikZZVCZa+WoIVXYXRnYAjxHhvHW0LaQPvnyFS9H5LaGf2Urs -TWVA+695zYsSaX669XFb9WbiIMGB4yUiXPvQwUL0tSd+kwADBQP8C3sKWjsPh02T -jcEy+FDxWAn4g3LfsOPw8dfawJln+0h9LA0hTebbKBJWt5OUMqjjTq/pCZ5+z+b1 -0f2WwET/xAvjQSTdJjrFX9DNNU3jhCCelEpal9oxsbNYlVd5zOU2RN4hlmj+eEOb -5oy5wy797sQpsbrgGetCTsvPotIpvbH/BAEDMzjCY4kr/Q3jhyianLh3vPDNvR6M -j3Bba3JZVQTKkPeSB3XBJgQ8ssznZMvxlNdGPl6SOlpBYPcmUuo2u69fS+LUzqxM -0unjLC/WRRPWr5QCyg3kJFXpZ5DcsdXUPikfaRD4XWuVPTStcu7NC3YRt+QN0y4m -dadZMjSAwMyHg/oqZHF6HoK/TA5ZTVHNlabj+zNpyYhGBBgRAgAGBQI245L9AAoJ -EBaEEKSPwoLmSuUAnRcjDyrjIbOCDkQfCrpPvbqiHoQMAKCYSE1DVqBk+RlVUp8R -uPmgvzIKC5UBzgQ245SxEQQAyG4mRUQZagjDgl0xAnaSbLCQ5wJqYq/snwCl+IbD -lXcoHqXQNO9QJrPKwKQAUv3Nvk7mqZWnfMPoskLOASrs6nkCv2Fo9Aw6smNizO6i -W7xXepwvxjho4hLnE00oGPCDhUnAU05LO2pTBoxwHVs0o6vtaaViXk0s6dOFCoVd -f9MAoLjiGlK/3DFWoUrqIiuE3aLfgkddBACrp1snJ1BtiGhmKjt7An6Qoc5LVnU4 -1J/REiQIyitUFAvPX+fiqzDyE3VD8qX/vvTLpgZCYvvEdBlSfM8IcCn1/Qh4aw9J -HzuvKQg8WclvnQ8zq/7RV9J7h/aS/KIhDJIpGhi6YfjfjdSKfLYYfr3S4TVK9xD0 -Za3AH7/lrTqW8gP/fpKWu8fJyJ9kqHyYrI/j4ykt5QKBj3tHjqCv7FQb4FY8txnN -3fLzBtva/tlkSKRsLobixjZUGF+uQR1dTCv042LxZ6aEUqrUytxqUc05pCSAvEZV -8bX2H/5+ulSwdxKEzs1h2NvSTAiZ54zzKGjHNmEitdAaPD/9u5xdAiqPFxH/BAED -CYhWuhxneJYv2ZhcXqW11qNlLO3tHf4QWPYOZ9bRChm0UzW5CRik8f0mIzpEU0Ff -ZmFjdG9yOgAAr2JqCOINgV2LqfCiK4s7X0mqwBz/uAX9JiM6RFNBX2ZhY3RvcjoA -AK9CmjU0rQ5lHrAdn3TtY6fEEyaU9UBx/SYjOkRTQV9mYWN0b3I6AACvdPZBZuBl -tFtFIRj0/+lL7Cm9daq3wbQpSW5kaWEgVGVzdCAoZGVtbyBrZXkpIDxpbmRpYUBl -eGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOUsQMLCgMDFQMCAxYCAQIXgAAKCRAf6Pxv -BCWWd1pYAJ4lvyDCV/l9oXkJOzNeGL3Df5u87gCfWm5F7YsIhi+PR7BVafFUBsWT -w+udAaUENuOVEhAEAIMMgk/e8lsV/KEkd4/jNK4yFj5iy/Faon800I3GUzETuQA2 -AT3getR+GuV4pbZWE/80b9hnNW50UJGiP1+SXfVtY5vT8p/gNFwn5d0O/pq3bpgF -RJmoawTzx8SFDwCVPHEcwOHE2j5LvfrvRBOyKU32tr976ri+Uowt0+92LuA7AAMF -A/0Yo9dDqhjR2UoNcYfEZwWhRHaaJenP3z3QbzjJkASb5H84xCTEpv0dqEtVTJUo -Io8Lh5VjbiCwok4QPLVSbQFeHqTKb7N96PjevkZ1Co6OrLCNOcPRvXxgCwSGbuuL -MkQJEutnXLu0DOKquY94KXXh79La7lTgjReE/1Wzbgc1+v8EAQMJiFa6HGd4li/Z -mFxepbXWoDrmIq/iTdsieZ9YRYA+rJ4OBtb2sjqV2L6WYNOqc2qDSj9QDIRJ8yiD -ysA/4Yiur+UNBqRtJQGroegDXG4+NHsudnVzGXaQsgEqAjZ9PZEtsrEf8D89NeZ0 -3yQFkAXQ3n+aCf69jmau/Yf2YAX7D8brkxgQp3PCUcOgGv8EPo9r+AeRiEYEGBEC -AAYFAjbjlRIACgkQH+j8bwQllncJeACaAqT6TL4N3gG2lLQNzV6gMd/p3dgAn2/2 -mEgFb3CkorWwdW++wf/YThe0lQHOBDbjlSURBACcp0BogujMnThXpn4UjBARj9oX -gQWskkhz657AXu6RmX/u5RmpLGqbNmNuqKDIwUbJslIxrpOnA3QEobkIl7ThH+ZU -IhGzPUnHlhd7M3dQWw1U0TfpHyXx3FYb7CCPabrSC7hWWh1ylUxz+RGJJSApR+D/ -GY+dF7dIllKUbaUGbwCg1z+vkNbzqibcwdYrwCjKG9VeFa8D/A5yPHqB9NMp+3Ol -AGE4XRTR8LeelALpu+MuNMGFCMLdZfmt/Amoyau51FsQ7WwWrNM5A+1v3Fq0x5Wp -Nw6Lr7HbN9d6zidN+L0uCrXPweET8ueS3DFnHI945epe703TbcjJBO/uYLn0LXEx -mTg846/1ZlQbPgLzmzb/2JMkJ+QzA/4xFbRL2YeaKyu4JjpMNUVzXYogUwg9KZZq -/qBbpsIAD7Agd+ZxLJHoweItXaC0nS9C6qDJZ95OJrE+h/Tt2D2lmxXseTVlSESa -Wh45x9mbC0eRGFYYRsSx3z0hYwMmXA0ntj0lndC8ru8HjZtBW/KF0VB0RcfSyW+W -+yAq0Jxo5v8EAQNzQpmchsGqHF94WG/VI+1oYlA4rI/KYT/DB+zHXBquIl2KZoUR -ebyb/SYjOkRTQV9mYWN0b3I6AACvUJB07mtW6/9i6mmuR9JtC7USM0AP//0mIzpE -U0FfZmFjdG9yOgAAr2EW7SJ8fPMvmLE8+Kb56tIqW9FrYAP9JiM6RFNBX2ZhY3Rv -cjoAAK9VpNLwU8ljMnpHbTNr6de2pplMjS3ztCdLaWxvIFRlc3QgKGRlbW8ga2V5 -KSA8a2lsb0BleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOVJQMLCgMDFQMCAxYCAQIX -gAAKCRCtGw+tQ8LQx9USAJ4sELIj8IZxlvkwqmmEMXtm1kIhQgCfZEpMtTpkRbT+ -rEHMssei72JJi+OdAaUENuOVSBAEALmZYtP72G7OodR4RfR270RxTHj40PfUpPIf -3U8ezyO3kqjB12IdD2YIXIZW6zEj53psX8DGya5nSvVjdFofQSVHtsnB/H7VHBka -OQnREoInHs4helYOD0M/RZcbRIb65e6vEesuzvo9N0ACSlBsAXbeeNKGfGGCog74 -GVGcZ6HnAAMHA/9W9n2MwJ7lq0GV4V0EOHDVcTAVRSh0nB9uKBVW7hFi4DP7XYBf -gj8Nlbc22vMkkdSvNFUoLEH7Op9sMglXfiCPJSh02U/6XyAhXDyZRyrOIHviTZ9S -HMQQIqtEETVuYRkzvSnSfDBVq1p9gW6eZN9q6AM7gmoKInpRaODFRWU7Df8EAQNz -QpmchsGqHF94WG/VI+1oYTZm8S4dmnYvEY77B6haPMQN5nCjubqfHGGIMJxRRG/I -HzXq0tNi4fusoLILtVbUgta+94uzgnsrUJqZbfmwrId96U52nG82ZMhLpX41lZ/d -LZouCr/jMO0uvF+WYMjO04ffBfcnNkeQv0p7WDH0zZZjuJ0aoUwBM9xxU3lYTgzl -aZi8iEYEGBECAAYFAjbjlUgACgkQrRsPrUPC0MeO/QCeNYtFDXrr21NZlLu0OfAe -lPBM51AAoKglouZG0f49sm9tHg1Gc/nwjzzhlQHOBDbjouIRBACKncc4Ueec7dWa -VARy2SmNVufeSenYs4AsIPP0v59jEl7JI0rb+4JbIJoAzW/hcm26GS/UbbpQwig8 -/PgMUV5QfBST4CEOlf7/x2a4HKk9tDV4An7q2aNr1beW+twxfUGWWV5I0o1b/iKV -k/LiQRiaMr8pJXY266m6/2Pn9LmDtwCg+Iqfx8gsK2PZCWv87uEKAOLzHXsD/1eR -xLqCt1hT98gdDLykRTlI3kMq6EK3I+z/8pDIMDuPIJq1eM68YdFZr8s7i1ye1QpD -ltPYHgWnUC733ujAKANdyybm3HrA3TSBjEAhNfcu8nkrVorvASQUDCLJatWRWJTU -VrPH+GXIXMA/Oi6LDsgNDOJanwzzvDCCm8hWQqW9A/4xYAZ4NVFrQq8gtQPJWuMI -fSFSvpZWNgQgYZntiXSUGYOVs28T/87RoRx02tsVDw2PA8z68q/XRuM9NdetxbUX -QHB9eszFLi3W1idsXhd/C4SyiTgEFXG8Y8s94Eadgk1PAYHN6Gd3SY7jmevqYGVL -mBp7qfj5Y9XSM5SE0Th+fP8EAQNn55Peu081+nAbRC00SOkO5P3aJwu7AIvXN9Ng -rJdUW7TQmQK+cHyT/SYjOkRTQV9mYWN0b3I6AACvbK2QUpz29Yo72wl9Cy/TCjWc -O22z5f0mIzpEU0FfZmFjdG9yOgAAr3et3apzZ+S3o9ywcdaosE2TLfNzuX/9JiM6 -RFNBX2ZhY3RvcjoAAK9PHpBSB/T7wKTGFBngy9sOwtS7ZM3ptClCcmF2byBUZXN0 -IChkZW1vIGtleSkgPGJyYXZvQGV4YW1wbGUubmV0PohVBBMRAgAVBQI246LjAwsK -AwMVAwIDFgIBAheAAAoJEP4YCx2p47CybMcAnj/BlcF5gdhj8huiFijkgZZi/YgA -AKDxpmP4JCksz+UPKsQ8UbtuTPbpPbQOQm9iIChkZW1vIGtleSmIVQQTEQIAFQUC -NuO3OwMLCgMDFQMCAxYCAQIXgAAKCRD+GAsdqeOwshrhAKCK3IrzNqME6oA3RllO -rx87OCIRggCfVkR+Nf6N59lS5j7jMXOuk799fQ6dAaUENuOjBxAEAJVJ1fFRaXPz -UWOoeBHhvUS2aGZbz0Kamwd8qVLCVi8G1sH/LtMUh+8CvhkVum6p7Dom+2MgRmhe -+iVNbAdU8QWS4bQsBrTeiVpinMLpkEO4uRvT1G6QIPjN1jrHBsAxGw7NmC/n3stl -e04ssueY7JOmyNEMvO1ay42CWbmt985PAAMHA/9LJVm8UR0RWfn91BOnt4C1d2tt -kQzfv1y0InbrrdFtNl3nmUgF6/V9OcpCS8NNjZ7nzIhDgT43Ov32qD0LJ/p7c6ES -tNSoQE6G6wGB7j/sTkushUy+joAVT2qCfRKCye7/DDa3FXDdcSOovweCX7hD/nth -G8k576rb1h70svx5qP8EAQNn55Peu081+nAbRC00SOkO55yVYRTuqV1cyTx/djMo -oC9B9hYiXA8kcUn/RO3hztHVFGSYQWYNhOGBPe+FrUFfY6yjGeS9rlLKQ3oaGCr6 -pvZYdIBdzktW+TItDPYmRaaBTKrBw8jmccsn7xnEriVcgkSTTMd706I8cCIQh/iK -iM5pFZGPPghQPn6paS6L+ydP0ZNliEYEGBECAAYFAjbjowcACgkQ/hgLHanjsLIy -uQCdFkPnvUpYurVoPjhg1pw4UzuaVYwAnROb93OSUP9PZxf4XVJwHKU2PnCUlQHO -BDbjo4cRBADeZztXPNYwpoIf6BfqepImZqhVd2qXuZBJnEvwaFoAl7er42pXXLZh -WIu7/gWODfcyNxsUKgMbeQ+nWO2jdcZQtt+gmRAGl1F5LbxsP6aRw43W7PAkbmYg -PY5tY/dhgFGP5puoV9mhijpFcK/cjeg6wNgmjuEsCv8BF5FX4/p2swCgwmgcx88E -pJF3/EDrTk4/8Xr6Z88EAL99JWgnl0w2TNiP9T3c5mtVdcYs32ntJH82TiQQ0LR0 -A7zRY5ruojNZC9LsTht5K69AJakrDA/Fu5mr2xYoFJcW4b7rpeKUy/wYifeOhYY5 -T2NDYvaZnQJXZ6O8lGLFgAxCmnZEN4IRFahKs/gAmG86d6fCvuSrohSZvQ+Lsr06 -BACFT4tjfuL6MZ0VhsClxeBPny2AM10+bDDM5eOl5ODLN9Nxf+SRu5AdIojz2OqD -9Jd55WobpUXGzTI+0g23636IuJuH7VGCF92nFwkjdIDblRoqYPAsJRkMiC4FkRae -qF0DpgJacYSBnHdY3Yd7I+cvgkK7oBjzTiU/Zs5hZAeK8f8EAQNhroQ8vAawUbBJ -GAm7E5zNoXK3ly9yV45/SohVZDzODvOlo6LWymLq/SYjOkRTQV9mYWN0b3I6AACv -VTx87uYeuay/ZhQKJudCoAgGZGdML/0mIzpEU0FfZmFjdG9yOgAAr34g7RZNSO3G -bdz8PNLxVgFG9ZaKo7X9JiM6RFNBX2ZhY3RvcjoAAK9YCrkTYjGM3LHB50POLDFY -Z1O3Mu9jtClEZWx0YSBUZXN0IChkZW1vIGtleSkgPGRlbHRhQGV4YW1wbGUubmV0 -PohVBBMRAgAVBQI246OHAwsKAwMVAwIDFgIBAheAAAoJEOup8kDrncnmriYAoLZf -OyE8KQbqCKZA2lLbxnCXr2G1AKCnWAeL/6RLjuyT7ddG3qd+ggEnB50BpQQ246Oq -EAQAj7WdaOJjzJNs2G8rvrDZvD/uaALQ9PtdvYAp/Drp7xMH5T62+KKTlKdO3s8I -QBPiuFocJNir5st/nm8Xl+gcOZOvtr45c/cl54fGO1gOjBZOfgbkdBVK/LMwuQWI -ebK4qCZnAOlDLYNGVUguGLnEQBSfnhhkgh0WA0kqt7fYvpcAAwUD/3cOEqPlMdYe -LnGEG4wPxtyVIchwGOv0YRW5apbz2fdO7otj1AFUN5WzFw0A5+WHza1OIUhg50Zc -o6HnwKx6F+LbZ5aOc37EAvaFgPuMxBfkaWYagCof3jBF0CbTWUXV/D5/dFmIeuGT -uUMNsGVH+OSMW2hBN/7+aJK5LLHL+hzp/wQBA2GuhDy8BrBRsEkYCbsTnM2iEIZ+ -jDx69i6vtiK2mS5+ud0+9/XEd1foHMXoByohTsJeUvbwXvAu7FvDdfroq3XGvSjZ -+czTMIekzBbYRxC+pPYENNuBn/e6LTKQD4oVW+uQYcPax5AvZeR5tm9RPxuQ1EYN -AmHR2OEtmE4zSbqGtrnsp/a097bTCnmxH6PsQ19HSseIRgQYEQIABgUCNuOjqgAK -CRDrqfJA653J5nNNAJ9Se4OBQyISgG6RMM2e6+frY01H+wCeJmn1SGKVrWnZeIBE -j+jR5OSAMDCVAc4ENuOlJhEEAN1bOV3WXINYOoY9LMY6x6FfJNJrSk59VMtySkmk -OkStyfyNLxwqteRVSjAjtKVmE9GZgj7mmoZobkVnlUl3VN8paKFzs74kMegrfJqY -6eHo4VAU9lQXX5aUAaIVctz5Y4PNuA5IzL/zJcDqfTN76/d63mf0rOJvewMaPDkM -yaJjAKCZTCeh+qyQdW/VLq0ODTyZcAsoowQAhUbJ/2KPcHM1vR9VgZQ4tTTuepDd -Gk1A9oq09CkGhtGSdD9lJ3O6IAtwIH5Drrh/VwoYD46C2bQv9/XFSYpFbetP2XMy -1wLLqRy50IjY4eb+A5w/MqqOPmiekPzh+BHgF1ux6FPz66ubEWIr9sUUjp4LUvl5 -0FBxEuztMXaNjdIEAJ1fL3IeDqINMmHKy9HtS4tYT/Wz3KyKuFmA9vS/IgXAd9HM -z3oBgg+ktmv+O+SsNrBPFgZ8YhmuPtTIZ4+7tEJ4VFVVfnkHp682/d8CpubBDUYd -NftYcI10CQ/TvJPFn/Cdm508DNDBGQR9nf1N1xxs6Ed8e9u/dE1DRXFta1BS/wQB -A7n3lqEldy5uprCBgI7BwpM0ElWN+2D2a9LgElCF6MeTnG4Ycamo4Gb9JiM6RFNB -X2ZhY3RvcjoAAK9TlqT8l+FZ3rsTboSXkdYnCZZwh4rd/SYjOkRTQV9mYWN0b3I6 -AACvZXMVrb4dxU2h5sKMOGXEpcHs+DuVW/0mIzpEU0FfZmFjdG9yOgAAr3vtqeEa -itcXHtaGrkSx+21NoZaKkS+0LUZveHRyb3QgVGVzdCAoZGVtbyBrZXkpIDxmb3h0 -cm90QGV4YW1wbGUubmV0PohVBBMRAgAVBQI246UmAwsKAwMVAwIDFgIBAheAAAoJ -ENS/V/NzcuJDdy0An1AXntULu0eTFfoqIj2gIoRR6l/kAJ0VIXasNn5cMC6DtduH -/Cl3BCFW250BpQQ246VQEAQA31Qj2MGefTCoF0x+D+9UMxZ6RuBPzI6gzX1tzcUP -WYy38NIq+lNYBg7hLFkUfn0uTsAm33h2Q8z4/DGT7jmQWpoIg7yNTr6681L/gYo5 -FhhC+qERZ1iPMyfMwwD7rrz9bthUGTqChV2h6NiPUPM7ic/D9rxJICXy8dsoj0dQ -6dsAAwUD/0ggimQTUCGmNHHypor/GY0XAAL4Vy8jAsC0FH1UaqDVTrTDH1qWLRnS -9uxEsOJIGSLMSdxC0FZEYq4jCm7CYjTOHTHvvYDbhs9QhvW9r4VD2efbERFSEYMi -H69ASQLGDp/O5kOZTgQOvl5oxzvsrOMaRFSWcn66uUAMORmHKz1g/wQBA7n3lqEl -dy5uprCBgI7BwpMwsmLANtSNhKe+VmFkvN9msymkZ/XyA43Ts3EpgI/RoP2B4GS9 -LyuCC26DEqGnsats++yae/wDoWz1mM9tq4UcML4hSHIbZnG2OEZDIiu1q5aS1I27 -UeWhA8+qPhPosw9cJ3Y3sQIgdIEiKzAdfsjhmE78aSpljhGnFumTVv9p/lCNuAGI -RgQYEQIABgUCNuOlUAAKCRDUv1fzc3LiQ475AJ9aAil0KqenoLziTexEcc2EnFmR -uwCdEjwBOoJFx6qltIM/tJcxqRi7qu2VAc4ENuOl2hEEAKeOL2pIdZ+zQtehxdL9 -l/uDBFSTuN9rLb8DgLiw8Z9j8U5CEH/M38WzH1nHKKlZKjGVZYiyhRfAG83wvHnT -83lq+Ad0lgaZTR4z6nrd5ViOlHPlfqo4RPZPzPe+uF7EfDl792sJerXGAasLosmK -nxKAyJyVjh7eZcjTS/hUhO9zAKDVyLHJ/gQlMYk8vE5XYL7Pw4d28wP/VsKVkjlx -sXpcrCQIoKeDXgKNVv9L+0Pebspzr2WOah8iBN1QOkbtexIKCbb9mmviEnJU0FFx -5MIw4mipvY4EpCaH3McGwJpCzWmdzID8Z6oISUyKsuP7PXjmASbogV6Iqy2m/2RD -tfbIlbwotfbiOT9Tr3IPbH+tHAZByMRyvxID/RN90WOPSpODxr9AH9btmeJD0BfN -t99116+qdwvWrTofcbkBgzvB34vLLDaMKVIyinxz2lYyC7aSpA3uzjZvoPvPrQJF -LE0dx7DSkUTtWbQGByRabpyrXYdKZzsFXLb+LSTWwF3sQLax0C4cYT7OLPlxjDVq -/A0jgztaZVWa37IY/wQBA4atrlwHD2LVQWW8aUn17IvjZxnp2Z5Em6q1rszts7m9 -rXCv+fKUFF/9JiM6RFNBX2ZhY3RvcjoAAK9hYwqxHjc6iHxWUSLF376lmCzbsJxV -/SYjOkRTQV9mYWN0b3I6AACvYBDzN17V2d/ZXmycyHFyOyxqAighH/0mIzpEU0Ff -ZmFjdG9yOgAAr1pTL8K2pO6rbaqNJoTiKU0q6XdGAj+0KUhvdGVsIFRlc3QgKGRl -bW8ga2V5KSA8aG90ZWxAZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjpdoDCwoDAxUD -AgMWAgECF4AACgkQE9uWVTTG4/Hs1ACdFOYsQ4pNSdT9grdhmONXKXgVRzkAoImb -lC/iwRti3/yZ8Ljc0tEc4HTPnQGlBDbjph0QBADOk7pS4JZak/26nkZWEs+hIIF9 -IgD0labkCnr+GNDmGJrsJxLwTjU+NoaXo+SHmWPaqRJQFrz3ZJfJAxioyoSr+Hv4 -Fbv6frZIJEy1g4dFhk8DiG+zR3uPOcZCUyyW3HupqahU0/RcX7CzXAcuPJCXeoye -SsBDyUAk/6ODs/kerwADBwP8DrWpAtFexIWvsswGdpRJHSjr7j8cJ2Hy36acB5AE -MCSd7kNM+LCrOqyOhh6RfokrvCT6ZuwlN39nDnkmSr3FWbqcRSj8khs3tw+Uyp8I -tqhL621vFn180I7dZM11bECv+YZlmIF/L3JNzFR+jmpODR99bLjQI0dpUqT6IhyS -0bP/BAEDhq2uXAcPYtVBZbxpSfXsi+AHAuizXUm/50gOqDPn9/AvgQnPzxgeV71O -aUzUKvZEVIC7A8eNbmLXooM3Kc6ppaVOy1l6BVNcHA+iAdEOnGL9e46NALwFz+DH -rt2umY2banvt6kYyWqChnp6vnk8O4CD8ufKnQ4c3zfSul69uuUA+l4e5ZG8V5yUo -ikTP7kb7/7PSMohGBBgRAgAGBQI246YdAAoJEBPbllU0xuPxJmgAnjzxkJIErPw9 -iJ/WlLv4gvPY/IhLAJ9WR725AmIjPEe8YqhNfx5b+Va9CpUBzgQ246f/EQQAl65u -b9rEKS7XsXwNkvGtj1K7gnql2H1bJ5GF9bGCWhWmB8WFtsAy9XUeC3WbrcuWFgTs -btTfXZ5I7j7HSG6ukf6Ycusb+bA1IoT+GAQGWpFeWoXe16wXZFl0pEc2iUnx9Tht -oQF0fO5YlbvHJPEQ3kvoqcdb52WOOfOuCAJxc6sAoNqo5w0YxgJ9jkj7J4cmR+OF -UEKXA/wO0jrvYE7eiZeFUjGNiRotxzhTzh53rxtz2/DWG3D+IBFOt4qqxxp3WCSN -O5SnBZWUW50hDkhTxS7jSmsfPBmCinmQ6EF5FaFPyLQBq0uKwhMaWficdrQS9syX -FlPuzQ5jOS3kVAxOmtDd7CMTC8892dj02qzAE46QNNUI91kZXAP+PINfoJ8hV2zv -lGZ9tVlo+Lgsl1BOvxvEgmYV14gyTmMWga5sNq7TdMdWi8Fz0Vy7sI4S+RMJ96rM -ws2iTzWLi2jGO44itoWttCwqmGJmlSWurRsvYhSBgvNCLXFGGaQn5ncO1tqKnWSD -f625UnAipsgW8P4Agd5qJZiwXfJ67Hj/BAEDu6tMael+rX7E/usFH0MyFQczfHWC -g6VkC9TYfdLwbBVtdcq/lugvQP0mIzpEU0FfZmFjdG9yOgAAr030xCMZovqQobPR -re1kY7ZER8BZq7H9JiM6RFNBX2ZhY3RvcjoAAK91zg0swEPwYMWjD9p9kHpjle8c -eWvt/SYjOkRTQV9mYWN0b3I6AACvbxuq5MH2Yu4E6hH46k0+/KnqrsrS0bQrSnVs -aWV0IFRlc3QgKGRlbW8ga2V5KSA8anVsaWV0QGV4YW1wbGUubmV0PohVBBMRAgAV -BQI246f/AwsKAwMVAwIDFgIBAheAAAoJEAyCDHHSaZMTQPYAnj5F4su5N516+dcX -YBl7cLVDPp1JAJ9d2mO76rlmINaaTtH5lhApIjQjEZ0BpQQ246gqEAQAkdlSJYfT -iZH/CkfV8tnhI6IDz+SgiZKcneEBnO+hAJottARGAojdbURlOIeZqRCgKpdTXBK7 -MdHAz4RKFnAAXPDBZgA5q+Coqn580t/O/AKGb8kKn9n52z9lC8A5KnHaRAsOKVyP -TIU5vq6FLmsWmMB55iz826Dk9kMhV7mmdQcABA0EAI8Jq3Jnqf0HqqaX7CZuNKHJ -gag14bTaBw0niZK0KSB6FBpzitEoyst5JBPCl0ayQEw0Hn4jhZAqcZybI//pC1CN -QBBO47VUi0y1UVjExtaNmmWxugzkzWHHx4WmyWsCQwGN4B9riUws4g3dgC007l+a -onKzj5QEo1XiiMNTFFmP/wQBA7urTGnpfq1+xP7rBR9DMhUEbuQV+5mF3JEYDt0d -r9Ej9Ccl8GT/tOi0QsPNbtaWED6pY70iZMVJSk0TG7pZ47FNx8UHI2bJKWWjCF1n -uXV+mW/xLMM1GgFMwK44bX2IsEJVqFjB7alBd/uj0ugnj2feFeTao2xDuSQ71IjG -y/lFtOkcdJOov7L4tNh2/8ag6bbuZKiIRgQYEQIABgUCNuOoKgAKCRAMggxx0mmT -E4+uAJ4+JbldpmIpRDEuE8tFCnHacQr0/QCeLU0G5RaI4jZI+QUKtYiXq0ITUnGV -Ac4ENuOo3REEAMFaZuaYHLD67UlMCLHGPk1dFdAn3Mu2TFFDUYfEtA/JDOiNZacP -iQSZ7zK+wVe66Vs9fzNkyeXqpwLzC35vkTx0K1m69Ave9LnXIZ70zvpVEL/UeCuI -TRiocxNglPgn4dyJ+2V0cWJ36NGcZmkvBW0vGItpYCbpIGLzYVOfiVUbAKC2Nze7 -9Iyw+DKU9HI39B4fz85nkwP9HbIb9z5kXiRZyCaXOMnFBQ3bAZh4Og5ZQxdLyZ/r -IX4Mu3DGjqg6UtosdVNHr6ofZWHPXNqqTUivoUmOS5Qa8dtUW3YGa8vbpK1OMnjM -LhQVJZg/eou99s9OFP5GgPh5r5Vw/EYQZ6qzS6YiYnqzSt5LcolL2+Ae0ajXUizi -c/UD/0TNXtCRfkS4SeVSkZXarb1oZjHdGlw6ENiLGiA0e5b4r0rByW4EQQGZPvg3 -DFXMjqp0lVVmfmXFPggLkbTP+SJ1/VGSC/wSqPkMiKSCenRqwHwWIdKxv7f13hye -TZXR7P8uaSddSXaakqmT99v6pdZOo8NsVQTx3PzPKpEVciPB/wQBA3B94sZ4BXVU -UYZFifR1y3VNINM8s1ZkPHDNwxOmQwK5PkcxqfpPpGv9JiM6RFNBX2ZhY3RvcjoA -AK95UQT4zAahgt0Z7gBkqnFPjSb7Fn9j/SYjOkRTQV9mYWN0b3I6AACvZij2NXRN -N8KfYKoU+00zOAYGp8PcUf0mIzpEU0FfZmFjdG9yOgAAr2BTPmLEX46yXGfFOW40 -pPQsV5wHy6+0J0xpbWEgVGVzdCAoZGVtbyBrZXkpIDxsaW1hQGV4YW1wbGUubmV0 -PohVBBMRAgAVBQI246jdAwsKAwMVAwIDFgIBAheAAAoJEDfKtR+3kQP4ilwAn2q9 -qdnkpFPi1neWFi0OEOr5le7lAJ40e+wQHgKIE+Fn7sjYQ0Liwn7oip0BpQQ246j1 -EAQAp/Ccn5EzxXIGljKVKZ5Pp0xJA3uBoQBvXzu2pU4HU+vmgwnX1313x+4BsHVE -bw7+lfyhKnDD0TSwIAHj/xeE+jraCTU8X1iwe49eAyTaWF4wTyTzdZKQ9mrfBnFg -dWlRjLALcTMJaOE2Zasn8wgAEHgi4QWyBPS1il+aFE6oizsAAwYD/RpvJnfv8Vqf -bCxOYt7meLfTLrvcPlGNynv1nEgNgjbYRGIRzbXDDz+jwcLc9MeNuZgtaXvUbsQ8 -s0X1dP6vq43VmQTQPlU1TQx10o+YYn73ptyhbwOkyIDGmyf6uFhO0+B5/MY0KRLC -xo0lwMxvVkYNd6k804pSJPqwusWBm2R0/wQBA3B94sZ4BXVUUYZFifR1y3VOfk4w -3PRZvIRE/y8bsqADpUHOrpzhg45mVJx0XUD9jUsufCzZg7wHdE3KlnZW2cJ+HHoh -up28Ie38bbaUVgfofuur31BiAVojpu8KhTncGAMb64oNfdRJapHzzBcuUigQ9ETt -6OPgUE/thuHws+GpxQe8KhGQcVfJwuRernhyJhW+BEeIRgQYEQIABgUCNuOo9gAK -CRA3yrUft5ED+PJaAKCkicGM/NGxdTvpyHhtVSSkTRV/6gCgsnKOr6ziNIo/Bbdf -RfYDd1dL4lOVAc4ENuOqZBEEAKLUF5GqBMWJQtBs1t1Sp+NIOGuMLgJOhINbMU6t -k2jzeUt6ooNd+c8P0TexsbSETwhrU4ntpvIISb7I8Twhcled7bi5KCABJOzz7Fw+ -Ydxo5Yjm1DQH7+gEtPx3n4AjZUfRAN0nqcFizDpRYPqVaN1QYiGWn9yPF3pubQhV -n8zzAKCpx1LUlQl2e5t1YJhmom2qy38EeQP+IB45FBfDf5KKtyS64alQ0vHYIssU -p806PQorw/ZOuoiscUQj/WeZ4vn7rCdu60uR1EuHpGp7n0t7igEgAOcxDjrxJmpg -SdD79V+oJAFLATo2msj1IklVvJeI7ZsImyPchIU1lqn/GvpAam9N+FiIB1KUMFqT -Jzc6zUn1Qqag1w0EAIiRHPYRW8ojd9Uh4Ed3X0daAnClyMWL82t2bj/bJRmhupQn -4aVJ5D0pFB9izTiJEWciHpqiMdsi/zExYYIDS1Zu94+WFbNIxyMFfHrJ5fUQtAqL -b7E5LrlxZONUnrRwshqR4X2TmW2mz1Wop542eUQ1UWp4Gr3VlH6giswY0CnQ/wQB -A5YOFNcg/BY3BMnzmbEa9r4DVqdF0faqHCAPM1GU/o1rZ++VSNJruLP9JiM6RFNB -X2ZhY3RvcjoAAK9h5T6r3UXJdRJYgiPBeltuXDZLCq03/SYjOkRTQV9mYWN0b3I6 -AACvXXkGa4lux84ceaJy3CpOkPW9NxGnh/0mIzpEU0FfZmFjdG9yOgAAr2H8Yr3s -FEe3lYbWaVBMe1xHDnsfH0u0J01pa2UgVGVzdCAoZGVtbyBrZXkpIDxtaWtlQGV4 -YW1wbGUubmV0PohVBBMRAgAVBQI246pkAwsKAwMVAwIDFgIBAheAAAoJEL55SFK+ -XPiG8SMAmQEeRej4CyoP+wmpdhNm+c9famN9AJ9nKsCqRWJ/ufezi0YqAcbgbaNQ -5rQSTWFsbG9yeSAoZGVtbyBrZXkpiFUEExECABUFAjbjt7cDCwoDAxUDAgMWAgEC -F4AACgkQvnlIUr5c+IaZ1QCgqGtz7Pnbid5+UylHAn40bwpXE7EAmwVmqbtsG1iW -Wt1xOo2oyTj0t8E5nQGlBDbjqn4QBACme9aNjmsy/D0vLzEUvj2kaMBgVv3MWKO+ -Abi0yKsjdP0QEt+UosnybgpahGhPZ42bL8kYsfJmO95pWHxN6sNX67FmQQa+/vTa -fPw04SVBOMdYejLSfqmhyLoXGF8l3Vuc6MMraZkS58RA1KfY+EDjqCMItFMA+7Au -mK1JIvm5uwADBgP+KP0pE7r38nHf5b0NlDFYhAGIqdgdWvW6zZal2lNXiOkKok4I -6AH+GUGYJjULX+2mwCPUDdllqYlFZVmg2iSRF4i1ktd8ZpymsZuaaNyDz2AUzlXe -cRQ0JT+abYFBannyHg04K/rR0avkYCocPEBK0+TfzzNvER3IWznsI9Dhkm3/BAED -lg4U1yD8FjcEyfOZsRr2vgAw2DSsek1WQcJVSrTcrl4DmC6JoYKNZxcZxkz+azXG -MzU6P/gruBQX4ldaWq8ObvjrdF+g032GXju9Olh9Wx82E+lc4O2K5kwNe0fveQQG -7vFrmajyXnIB4myEx8jSGNcEUcl/6pMmwjzIOMcU1lPVYNkZU8cFQpZHJ2dY0OO9 -MXpawIhGBBgRAgAGBQI246p+AAoJEL55SFK+XPiGkTIAnj6CpWQaP+vvx+HhzcjT -cL/VKlZQAJ9Nk+d40+pCqkNEZDcV/xO6vXHbbZUBzgQ246rjEQQArXimh2e6XDO0 -Lo/BHPEsdHyd7tDXS7KOcZ/RJOBVjCwbuo8O2/+SowdlrVzmUlihzs3k31AMe/TT -Ciaw/Y2Vv9JBABVXmacGRdZfHwbERC0fXMQGoxN0bxZIAmAIV7BdSZ6PqolOUzb2 -nRlOEs5j+Lzp546yFk8vN5rWYsKBSHMAoIGmmgpRPEONTciH1bY0t3/jZvMdA/4n -B/bsDN76QdkFdvSCAams4Gha+7waKIBaAJZWgkGzy4sh19TJN5BGYOcXsJg0v7VO -Kxqo+1HC/TpWcdSAg/HKfNMjWH6COyuVzOrGDjJnyTkRjhLKjLaGG6N5Zbg4A5IN -ug2Tcp1HhR2UayFs9nCqk7mgd3cNPZvLCTbrN6aBLQP/UNSg7Iyj4vPtpFMyaCt1 -etUIJVwFQ5X8yugeSjhGehkf4F/TObssi40RMmxUkjT5by0ddfpleBkeQHK1UDph -NEKRcqNTK/rg7G6sJMxEb0ata+aTsqjOVj14ZV2uaKOJ2tXwRF++iBMyusSFRtOx -pzZ2mPnZT4LC6uCPPgNtGRv/BAEDsc7YSdD9O4gyqEDz+24vfhBH5b1jnJJ9MOul -ZipNjfbpG+Tocn1wYf0mIzpEU0FfZmFjdG9yOgAAr1WRiijedefkEEOQBUrN2HOs -xDW9NIX9JiM6RFNBX2ZhY3RvcjoAAK9CxfX5lmHbWFcJfFHEQCfpabmW2/on/SYj -OkRTQV9mYWN0b3I6AACvV5X9PayElGU3atpQ//cE3jl3tHEfhbQvTm92ZW1iZXIg -VGVzdCAoZGVtbyBrZXkpIDxub3ZlbWJlckBleGFtcGxlLm5ldD6IVQQTEQIAFQUC -NuOq4wMLCgMDFQMCAxYCAQIXgAAKCRAlsA/UMM7GhJjYAJ96+gRNnRtFX68Wbsix -2VqHsXeLugCfVbbEonL55bC9BBQ89XY+6AFNSgGdAaUENuOrHBAEAOGceVg3PC6F -tgrZrnofohzWnui6FVBzeai1DZ5MMKmdN6/QMv1eeHoMOb33fbfhwA51n+kPuhap -r6QqTzx62RGA/gK1m7vjU2OfYxSO65GN/rSUXN/kE83jR7Hux4MocRXZ+/8ngqL7 -JAjw1LZdJyOniJpeRvrckPNC/bKaua77AAMFA/95VjAjJIAU/gOMwtbqTgV+cmHe -52Aa1CJEalV88yKG86nnqHuL4xxUTTZljyjbbKleJD/Ah7R1BxBhSEDy8WuTuonE -VHVxTcL9Yig4pZ/OzYZf5fkl1eLNaSLb8XZMT0JbP02b//OMpAr29lcaga1o1RtW -vrlUyIYOTm2RcTxkf/8EAQOxzthJ0P07iDKoQPP7bi9+FNgB92LCXMeilHSPeArG -JblD4lyK8pp+jwjSCaWJrWQO/OJJOzhTh6Betn6H6C6bapoEaQ8TuKbHEnOMUfax -tx/yzDtWu4EWGMyG9sSPjXRr/lChDsi5OMcYnrxK3foQYMEHBMb1fIqqtRZmqWPc -FixNLKLjBalB2cMRuYaY8o2V3ZyKiEYEGBECAAYFAjbjqxwACgkQJbAP1DDOxoQg -5wCfbgzOK8WkgR8iruUOQagMIqwMr6gAn1iBQ2TJM5znLHzYgLX+D0k5IG/plQHO -BDbjq1sRBACVaJ7JCEOyjZmcPbBv6CrpqqTWtFSFzB0HAJNuITVosCye4yXycsfh -++FpPPZX8B6OgvTR7bx24Dmiv0mIF+ZVuWulMAgZay7QBTq4RCxaBnBF2yjc0f8p -8fxnmXHAm2Rn+GUCIQeiGYagPfyYk2yCebrdFdp1QfvqKs7oxy9aVwCg414fuLbk -BysyiXg7sFnCoarbmJsD/0hGErsAWF+BpGsNPPzg9oiyzGnV1YpqVGu4wlgZArYs -O4SXndD53WudgE+WI9uNav/0aSPHcrgHQJ9ZZALSxSXvts1EWqvwVeSNFly+QKjH -Ecbs8gUbvust3ZKJD55L52nlCKO64wLyySS9C67FLp4iTSD6OMaU2GO673thrrF5 -A/9nF6Tfunw/W71NOY3uc+2XMZcat8pWL0O0nfUTzTmu5cWpO6gV9w4FGu19j4M5 -5tfxHEjBBX9MSbLHChd2aS/TcRjAPoAlKbHda5WLn+t69wf2d9IQcPLuwULwIGnh -pq8AVFA2uGiZIH2VKblyUYtmIPieWMXUQUAHBAVyHseGU/8EAQMb786noBSUDw4m -7xGDnWduktairbapLv/ColtFylU7mo8tzwPJ9N6M/SYjOkRTQV9mYWN0b3I6AACv -V0SyyziakJ764L9AWGhvZl0VDNCEff0mIzpEU0FfZmFjdG9yOgAAr2aAgfc/R0ZI -X1er4E/LYM2tthHZ54n9JiM6RFNBX2ZhY3RvcjoAAK9vCoy6yI44r9RAQQdGiriB -nWdRPg35tClPc2NhciBUZXN0IChkZW1vIGtleSkgPG9zY2FyQGV4YW1wbGUubmV0 -PohVBBMRAgAVBQI246tbAwsKAwMVAwIDFgIBAheAAAoJEF9jVrptlzKssC8An32a -3EYMFU3dvYtqymOZk1G6qdElAJ9XrILycL0GM22u75KkQfVlZReszp0BpQQ246uO -EAQAnQtV0TzPQjBa4FVL4qFO0koX3y544FgWd4amzmK7ILV37kHb+pQIsZzT3Z5P -5OJoy/MNaam41Jn5m6aVQ8c7IolEJSWrcxg31NYA3O5LJ16Rf784IW7nMvBzTtEh -4t7jPxlwue+ImdaMWvwNeHypwlWE9U4alGtbrAuWEFx5uCMAAwUD/3+C2YDd3Wy+ -Iy6lxwzaQCBI4k2yl8QyhzpwKH//+EhNJqWjVRy7t58SOewrV30iNpDEEpv96aqU -ys2gZTPwmzACVGp4ZpSzwEQ3Cf4UHA7QbBeZxRu83y33tEgcILDNR8S/evFb2u1r -G2KUmvfPtx0g7svVcKYRae4uB25wm0iu/wQBAxvvzqegFJQPDibvEYOdZ26Rt9Gj -Nyo0jdE5rAxUvk0VBw7TW+V6uxtqp+fKrP3W/ewR4mUXo1jq29kicdAtO/nI0uEW -iMuascrL4lCWWcrEK2n4AX7KbzJ9W3HDupQhHHwYga7LFg+ZAc+6m9k+cn6M8Syc -sbQt90IMqon/jpYnSialNZilcMpFfYCnqBDTVKpBReiIRgQYEQIABgUCNuOrjgAK -CRBfY1a6bZcyrA3hAKCPwFgK2ukTx/0R6o/BN6HFJh7Y+ACeIB2LqEi2uOknmyef -7JveVqldPTyVAc4ENuOsQxEEAIQRmJhsJniNi/bRff/YGrZ9aFWt81G93W8WhV51 -qq+ntUHgUNY55Yyos4XLOa2tS+K8zP6X15FesVBPYIQa5BIC10mAsLfJ+1rbnGJP -uNBA2U2MoEaRxo/JtXQ//5jiTRlYwLDRnBzuaMCPdsirveu+JBw53ytRwjwe7m/D -1PPvAKCp2dj1FtDjubTN7kCF0o2KzPwE0wP7BimQxXyPwSzGqLaHXSEBsh84OQTx -PI98BXgq0195/A1B1/pPs356euKlqoefUTHYhbjiMYbjZT+A6juudf7A2Ucy03G8 -HDZ4k1f1vmzrj24+6ygGBcxTVr0BaweiC1DwG3LjQoJ1cuFxRQ8BYJDGIwPrUW5J -dlnzW2bJWfdyXOoD/0S7iEVN9txkSKildOeP1YcDCD8MM3hvF9kUc+1hbmir8SOZ -/IYJAyQN+j+mYWsLuKtZ/F9pqiBNTXH2jWCTqldOD/ZYxHVJAARnkiVG6yckMLsx -Hi2LPPBK8xack0y92mKe7za/7fhVgCRSs7M/rzUbzUhyInHSyxr2SYb+8lbu/wQB -A3vncg3S/0EKhZRFb/E5MzbPjleeF5fQn4SvP7U30kDoHyI3LH6KymD9JiM6RFNB -X2ZhY3RvcjoAAK9Gv/oavNniW7Yqm+70mldjom2X6ztd/SYjOkRTQV9mYWN0b3I6 -AACvTc6M6Pazxb3BIBjtK8lUhha6Ei7BOf0mIzpEU0FfZmFjdG9yOgAAr3SSQHcy -6mye2mjpCNKs/FezOQKbDUe0J1BhcGEgdGVzdCAoZGVtbyBrZXkpIDxwYXBhQGV4 -YW1wbGUubmV0PohVBBMRAgAVBQI246xEAwsKAwMVAwIDFgIBAheAAAoJEF0V4B0/ -8TIG4YwAn2L7BGoJE1q7g/ePfsIhAc0nacGKAJ4iBZV69HtWtOryudH1sG7zEoaR -KZ0BpQQ246xxEAQA3mE758SGpbalfvWhJSpb9NEdZJvJs1zlutDW3OBNuF4eIb8t -AnWUeO1mhlCzJbcf958S40BHCvKjgiO8rSeaJCyplRHXv3ldMhuj/Bo83TxC6MLb -q5ZsvWlgvnJBqvBso6jICy3iOATU2llVz+vX5ZSns24RqmJxWO8U3OSJUIsAAwYE -AJZAliv6HSjOvslD8Gojy9Mq5Vdv4MgFCO5LM3su9qIioypv1l1802ZnUC2+SWjY -J7ZUzKWJDNVJNm4clBt+sNMFcF/5D4Ag2Id1kQCh3MG8O/qnu+xOeg/4DZtLyXrG -tY5sq3crL34ZQOSpbda5qBxQqiBCARv8Up5z4Z6DBKBR/wQBA3vncg3S/0EKhZRF -b/E5MzbLEL6CTR0ywkrjR5f4P+KFRNbVixP74rOGEYga1Uy8PrUOMDBIjbtKVWQy -6ly4hnMv7ZPtIZSJFpeofg7k/kTNJB0W0BcJhWfg5CbiWncJYH+IZT6+/0aJfmhe -y7gMlkoXOqH7y1MlLXHLriVzNOpapAK4Q7vwzzfRL8kXP8zC+u1noiuIRgQYEQIA -BgUCNuOscgAKCRBdFeAdP/EyBhuTAJ4zaeXrBSUA3s0m0MV04WJxDDGwWgCeKwYd -KMH/CO2Eaetd28XWxnxJHO6VAc4ENuOs0REEAIHCI/xKPD6yIRGsSnI3PXTW/f9A -WdwcQZO8fWuxypuqNP73Hyx9lxYxcQeA3X3vjtTwvSjVKiIuhk2nxm8qkuO17Jzi -bOZ77K4JlaVFMwHe6dHcXHNrSaHcIZB+BrTj+IuD/Vwa8Z4EK1kNI7t99xDxesC1 -ou6pFchhDQn7L5LTAKCmIDPl2IfVEHu/x19Bogp5NxMVZwP+K8gcXcgYoY9NourP -LwHuZpU68L/OboKLkgfeVxF/Bj372liFv06VFkOmu6PGM1P5CD2u2MxE2F/HvxVa -9mXd9xwH3i1DadzktDbxG2CZRg31u/1+6i1b9aOVgowh1ISvAwn/QMfW+M+wm0R6 -bcUhOFO/TQgjrF0LDm1dvKpRrBUD/iCGgoe3U6gA8P5wZn7l8XqTyl0ul3YtLaO/ -S30La/k1LSThFRiG6qkAbIBEhYk+akdFu6oTp5eO0yEMj0J7f1ffeEMMgBrSILTO -amBUVu9INRZMg0V+ez80zLlNgY1SOph5GlJC2i7o20V4kBZvCFyeK39vexqaSrko -LzXK+0Zq/wQBA0GK22cdg+tRJk3gYcN/JjZjdGbyparZK4zFc6L9X+dZtsC9gBVh -D2j9JiM6RFNBX2ZhY3RvcjoAAK9XLx987T5u+PQj0za48diNtMwF5HRv/SYjOkRT -QV9mYWN0b3I6AACvZ+sSQxavyXXTvVtvSZ9DrB2hdoyR5f0mIzpEU0FfZmFjdG9y -OgAAr2TiK/D9hNwmBtF5JxEuKwCv5DBmY920K1F1ZWJlYyBUZXN0IChkZW1vIGtl -eSkgPHF1ZWJlY0BleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOs0QMLCgMDFQMCAxYC -AQIXgAAKCRAcZ+wTPGYchNG4AKCjSqAGZAKs7NstyNXe0qmxdjqhgACfUIFuQ0RA -vRxngnEfGZJiTL7vHBmdAaUENuOs5BAEAJGi4T/jrY5BtRTM0psAneQytzzFgH4+ -LigUXAAb0QDAOkyGNfWHrfHJIS7A3Nc9pMWAdOjWgSKbYyrzra0SQ75/SkI5+/S5 -ev2Fpki+HYo7cNgVXnbCJrIY7k4DAMunqPJ9JCUXc88WxGvKV5b45htqCPnV2Pgq -+AEIKD5aGfLjAAMFA/9+O6ttUbeY2bQHRdThl4HUxQw4lgYN7stgGZsbHCc0y6ln -1HF9vlE4Tl6HI/NR/8OauQrXt8988dh039QNZsOdAeRWTk4PgSuXq6VDG5WNw6B9 -bvRPKXe5yeVmNNl6KESBzMcq87kANZWZ68vKJ2JihxPHRAyfxwGr2JKkVF0S+f8E -AQNBittnHYPrUSZN4GHDfyY2YCjm88CdmfBmhTozr+i8fBZaKPsQQkAz4Ybhdf+d -CkGOyQjOvI9qUX4wNF1n9/2af6a9A9TJNYGpdQ3AQUyyH1AXIfYLeZhAKR8oHgP3 -r5L4DDGmyAG/I47Ziko9nyyRjEkT5B17n0HedUtHH0+v6vtjNc4OA0XtbY0SCvuF -MpLRF9guiEYEGBECAAYFAjbjrOQACgkQHGfsEzxmHISIlwCfZ8SYKvVQnWcUbLR4 -pdAC/SDm0XwAnAqTsdVw9qkF0c5EwGnsst/qiAqalQHOBDbjrjgRBACU0OjVoC32 -Kh/dUjXPdN6HIusEhHheYpFIzYHHTYJmFBEjBj9CwrpYGjGUmp+BS2wFS59zO2Ml -pQGLGrmo+YGBdio338Hwdm8baeScd2Koqu+oWkCoBMm2VxxbS3M8kq0ppNu2Q5EE -O/qGywVrVpfBM3siM3mcsjVaHyWy+T1IqwCg/lnggNIr+Yz2HoU9GwCwBi9331kD -/jRTBAuXTq7vAG2bGpJ0X/zqSMLSRZfwnZj28hx6I0SIT0yZU1xggrAgzSbB24Xn -QSSxWMR2BZQmupPdHO0l8xPn5KCbYo4C+9+ZsprxEXg09KtVcMOsV6qTq40NPSOd -RRNAVhOOTg/GD0qX5r9ztB57qpefmp4Nfy5tmo3SehfRA/9jkdKCLrZRsE/kH57k -GoT5kt4nvJW2X3T03BMKvspVm3WjdlrR0Ji0yiw9P05sCMJqeFKe4RZreG6i606C -itZpRIRbpjfMEq838zgUDv7VGF7zqCedYu36sepfkzxj/slNyu6A21HTgMWxiBrk -DXoIuxMPFKYzZGC+nCHXgW2uof8EAQOPMKazZfwtUoJ7eB74i789uCp+H+yM1KRO -CEcmSW/T7ago8wfbaRdC/SYjOkRTQV9mYWN0b3I6AACvTozOxPOPjYlU7v7vhyL4 -rFswiNRORf0mIzpEU0FfZmFjdG9yOgAAr0jn/8fzbG+geTnYS5NG4g227pXLeTn9 -JiM6RFNBX2ZhY3RvcjoAAK9spiY0wOlyucxM1H39jlMftXgj0GA/tClSb21lbyBU -ZXN0IChkZW1vIGtleSkgPHJvbWVvQGV4YW1wbGUubmV0PohVBBMRAgAVBQI24644 -AwsKAwMVAwIDFgIBAheAAAoJEDvb7bF3f77Tq+AAn10WjJmAMcn1pBFwE28eIqtU -z5bsAKCoNi7oa/HFVQZRypKR7SChjez90p0BpQQ2465mEAQAiea3rOLV0WY9+rOz -+CmVlH9GAvJrS8cXjRF3uXJALZ/IDH3EkCeDHouDtRAb6ymfQ89vBJr9BZg3eug1 -HeMm0SJNTzfJFq8vVLhiwH/1QQJDCMl4WAhJwe8EbDY+JBeQ4WIsrXqdsHpD6HGT -thgFKCMmNsjDW9ptoNivFJytkAcAAwUD/iMYod6PvvotNl8IuMDnu2q6NsUngZh/ -W/JxGifL/EVS0TtAIKEeBi8ynkzn7+exVOPLZWO7MbYehTsXiWkJEtZw9S0aW9xl -A2a+6jP8jhmKdFoXUYBlvnNHmGt9oOWo6ts59/h9S+Mq5kUmTOJ5meWV3vYo5BrN -FDWKpotIAWMa/wQBA48wprNl/C1Sgnt4HviLvz27SydCgapMV/zUfdQL64nYYQj/ -00crVG3e1cAN2iOPRNsjnczkYXjFfSxTxoVvQEOvScRoOF1LQ6doAGGSJmSkyIGZ -wxb4VLD8GhqmCX30XxOcTRG6EiLq9+kDGL5gAnBUTviRF6Tc+y9N79L+nxc4lawj -36d0ZXeIG2fm8RycxA2E4ICIRgQYEQIABgUCNuOuZgAKCRA72+2xd3++00nRAKCQ -vRyQt5pNoWbpj8btfqGK00jpOACgjSITGzCNURjHPCPEBAPqgOVDh4CVAc4ENuOv -BBEEAMUtk4AJiXP3jaKpIhbi3B73S2SZ67rKzBkicjelpwWk6LndsCrbLsIWsDf8 -fNtih0r9As+2arfApkNlwuCGq1ZlPGGGEf18OqPxFvnghVEbDdcosP4bIm3k6G2s -gFbMl68xAGnTtkS5Gfz43uTuznPzdZnGbIjP0uBmPfZk6GW7AKDhi4htuxr3Y+ud -9lx1bWM9KqUtAwQAiRYHm605RZVBkdzlfYx1Iwgn/l8Chq3MsPrfBMslapBnq1an -2/nEQPmuIde9C6ALN1t03DHpKonx2XgjYVz8pgty2FU7txSSm2EE+975dXp3ov4T -fD1KxksOl770PAzixLfNhPW1q4A2cEruGgO74qEX3/fAa1J0nRKDgmA/mgYD/2TS -ZKCaFHoc3IHQnkygmGzzZNpVZV2+1kIB8Z2hNo9V81PYpzlYV8SlG51ajW1G3ePc -ti7JOIP6MquNUbYR4TOzZy1Dq4+VqqZCB6fOeIKL40IKKAoMMDYFNLp9zcT+s6+6 -DTPH27eE1WEt+NQjBgr2ofC/4iAU/nmAYmo4xn7Y/wQBAw1YC6sO6OK1YqygeAug -0cwEFM97WACPFwv/yo59kPUn2OPV90GqWcP9JiM6RFNBX2ZhY3RvcjoAAK9kgTY3 -bsST11j0XtHaORe84A/oRwpP/SYjOkRTQV9mYWN0b3I6AACvXbfs2GvacmwUsN1h -JIJ6o5Tv41Oiif0mIzpEU0FfZmFjdG9yOgAAr34DrRWil2lE06jH9gI775+twQFW -Zp+0K1NpZXJyYSBUZXN0IChkZW1vIGtleSkgPHNpZXJyYUBleGFtcGxlLm5ldD6I -VQQTEQIAFQUCNuOvBAMLCgMDFQMCAxYCAQIXgAAKCRCl5n9/o64+oa9/AKCaJbj4 -sc17CLwMOuvFVejk4mwUQQCfcrpQGZox97B60MgQRs/wklSEVWedAaUENuOvgBAE -ALhxyR0+JaBA2Qa8CberwXHNEuiDrz+N9++Pwy+375dDg2KQ7RUnx7NiRV368be/ -lGgdMhLKeYxZlmNPnpoUNINk86RCzYbSpmAASBOnMJQF2WdQLxmsdJNJCMKfse1H -ZylgIJQGWI+1q0O9Lcx7Vd1F8GFeJvThMHRyLoOvMVCTAAMFBACN7RHUg2b0aRko -DNMQKL6VV6LvBteSfgkXqf2vUovmhQtUXxoYc0QnVPCPuS6raRpxiNz8OLgp0RJF -Nk32zOVmc2u68B30kociBt7Kx6d7fJGHL5gVqpebUy1YJ3DBoOIOgcMBKmXnlG24 -IrHPq5bvuqGtnwToZEOuEj3ZHzwNuf8EAQMNWAurDujitWKsoHgLoNHMAI9CpJsg -3p5r1/2dTbN+h0CJ+lqHoo70wkoAb+gaM+7jq/FWce/7mNExPIYobdgkvZ2rbKJP -x8o0zJqu77IkMLTb/eh8z+dEaC9X0S/uYgN6AUJl/DsEU+XwOd+JY8Es0wJda+M0 -qvSGaH6+kTYy4pO5QD1BrfdPTOVNxcFna7HAItZPiEYEGBECAAYFAjbjr4EACgkQ -peZ/f6OuPqEzHwCgo3fuvctqBR1zM+lGiitaCcoRH98AoM2iZsG2q1yiU3MebUWD -xcPCiuRMlQHOBDbjsAoRBACQ4U3waYeRudWpRA1GiHxbw9CvqFw16gwe4Q4N7LVS -KWUffXdm6P3TzrlVqK8FxQQyXitHO4iREKzFipcXam0RpB/KWhUpy+V1qOMTI5J6 -pyc2Lt4G+9+IqBR0wuFgzNv76ExrhaS8Pnoq1vsJddsLrB6ZzZFsTBCFrdh6Bk3q -3wCg9yVAa2nj2/IByp1xc8hLvES6d7MD/12gCo3vjQGHqoXAKsb9khD1I/BDILV+ -0g5JMg7/MLkX3DcDALeF8B2J5zN26VMFo9iXAxhPa7DZ2vx7hQI8/9pa4VCp3B9A -ssL44WLbdbfdo9HD2Wnkd6WPEf25vDbNtLYj+7sVZY/rMyNj3+SolB4YlhydkU1x -hNqVJk+lBYXNA/47smbyDSsJG1EksKSr7KIteXenuFseT2dpgK0+cvlC4rQceFii -LF1elFVWhATWgXut5PXBRnTxG2vx35Une+pC5nEncvha+93d0zCK5sACjFXSo0QB -HN5fO2Gj3dvy3U/k1swkMN9xKLXsSe8mc2QNkicdu/48iIF5FrcL5+VAjP8EAQOk -qTnVSVlDNyanmeWCbHT5y1XDf7flXnKwAlPvRhV71WMkqrgQyZSO/SYjOkRTQV9m -YWN0b3I6AACvYMiOr13riT9DyF8K7MAH9rFUqh5JY/0mIzpEU0FfZmFjdG9yOgAA -r1ZK4vMwe7MVGkYsBl0OFJFhJWf+nD/9JiM6RFNBX2ZhY3RvcjoAAK9tanjl+Ggi -icD8mvH2FEnlCyuiB9iHtClUYW5nbyBUZXN0IChkZW1vIGtleSkgPHRhbmdvQGV4 -YW1wbGUubmV0PohVBBMRAgAVBQI247AKAwsKAwMVAwIDFgIBAheAAAoJEFjLmkyF -qB84JOIAn1w8JVmBDp+6A35ia9SqWpt52ZiiAKCIHwczU5eSjSlPSm5W8C7dlk+B -CZ0BpQQ247CeEAQAnr0w2OcvlUX7E8u2C8dJGIj7wRU5qDazxh0tw55/ybJ3/Kyh -CFfsr2dZ2E7Zw6Yvc1u3WTTf82nH4S+/IJFSI+qBi3TrcwVtt8Xa3Po7cIzNvS0b -BhqfmOOXJc4ihUlADR2Jukm/QC+f6bO8IZBDWr/7LnT4SwEPhPoZNMFb63sAAwYE -AJ2kiP3e1zM+zEo2i2jkOny1Igyn0sRiuw0OXQ9B656zp02G5qtDN+IXhgLdfQqg -qyWckP4BLDJ4NtQoEM/Mr2/7oj3h01XpbU86R1QFQOXmoWw3q7yqEWIwfOBqClSF -0A14sXdjQwadyabTFsW4m8Zn5jLW+1sH4PrVjHoNEz4C/wQBA6SpOdVJWUM3JqeZ -5YJsdPnICDfLPDsLTp+mSJOvz8ZkqbdjjI/q3Kptusm2FbDk07+WCtgfeKcaeJZH -FNDb0PYRG9S22OGNlhDTmZluNPmUG5syMkoyycBX+4RTirp7LNS+VBIOHa6d1wD1 -k8lANIjD/ilD8pW0pAyqN5oJLDgGD9892G7eeE9Vy4XGRmBB6TbFMF2IRgQYEQIA -BgUCNuOwngAKCRBYy5pMhagfOAibAKCS4dbgdlteoklBNH9XU3+trecmqgCg4u4N -x5RLyPVJoOlZhb87WTBcW5+VAc4ENuOxqREEAN621mjyBM5OvWclduTmwl+5VJBo -yZuAulmkyzdDsL6ABfRdf5D+9y4en7BXY2rRLi/7Dkr6zEMXgDxQN/6r4aY0owDl -TbuGRwNC8TjwRhSCFx1YqNZ4XCaYk5vQoyhq116HiI9PiPyhwbD6LTPqj97TLQ5V -axS8iqniJk/dSWc7AKCA6rkZ88kyrcrdw0PedTsY5Hx7UQQAxyAfT2jrwduNvCnD -56M+4rBUVrfsI5f/rkUXw8416V6rsyvdjzIqpssiwhYNrGuV+WlvIzP9KG4N01Ty -CH6ax/CHT5E3N0Q+akkIJUk51k7jpy52BvIBCuIfs/KxJuLsBuamcyXuRCu6EBlZ -cu2cfV7WQqi8HjdremHzAXiSi3ID/jkDxssoSYm+mr9qZjpWMOcazGQOOPDY6hVu -3ywt0aOmBqePd+/LkpGFZ5YsqGa2rji0f3ubhgOYYIdVr8iJzhoM8wy9Q9Z1pjkP -IJ56tU5vck3WosLujnHYcG3xETtxec8mXlUrFzirPKzlupARhi3Z0/hwmoqTc6OM -JuXpMn7x/wQBAwH5EiW2ICr1W3T/Rx6Cb3eG3/JG8Sjo3rpEYlaApMS+d4oM/9V8 -3kr9JiM6RFNBX2ZhY3RvcjoAAK9AzQba8DH0bAE2s5RGAEJ5VAWk/+g1/SYjOkRT -QV9mYWN0b3I6AACveVUvbR4gGYzhP/+FIlqbM8KFSN9EM/0mIzpEU0FfZmFjdG9y -OgAAr239YwqXBe1eAtTrlPkM+BZQS5iCzKm0LVVuaWZvcm0gVGVzdCAoZGVtbyBr -ZXkpIDx1bmlmb3JtQGV4YW1wbGUubmV0PohVBBMRAgAVBQI247GpAwsKAwMVAwID -FgIBAheAAAoJEKlMD3VlMkTWM1sAn0eideyWSJxrd/trrimzJpapYrQPAJ99nNzM -TsSCQwsfLaq0E7kkkS7KtZ0BpQQ247HDEAQAtbvtPTT+OnT55+kSbXMy9yxK6Mq3 -D5hzpNxW4jXyfGDJxQXkk/lPvnIYv5Cs5vjeMvE2RPLB8Bqp5HiAbSV9mJkCRYSo -tkUfQLVZ9h1dWUwWE9avz+zKWUzzCPRDg5QhDyU71/jHbT/MYdBrI9YtcLo0DiQI -l3a6rD8Xp+EnIecAAwUD/jUUTsyxauJAVKYKE8r1syZfehncpH/jtAIW05We4sfS -rUC38Rq6s4KNIcA429kM3lh341YWmmknOVFjTLiEMh0XLI/ceJ9uVxhNB1MjlUg+ -OiDgI32Rfm3lzmvzW2HEfs8zkX169asltoOKFfCzeLOLleHT2pkN5ffC5IPJYVgn -/wQBAwH5EiW2ICr1W3T/Rx6Cb3eFuP+IvpNCP9FJtq/cHx/aNtVczSNEk2ParqkE -bsZoGgIF0fZStEWeTda8b2/P8dt8E/hZL8YE86A6y26jjzhIQBnThCdlxYXCI+f3 -rwXSdBJYBu6jvOA6Cp7VJkBGBUknV3c26VN6mF0tq2xw8EdB0Z94SBwIObsUJxUX -GSx6F9n/BIaIRgQYEQIABgUCNuOxwwAKCRCpTA91ZTJE1s6YAJ90NN6PZ4hYojIq -GPHLsoXLX4ZQqwCeNI8dzekcdK9ZkqXRxIfFj4cQH5+VAc4ENuOzmhEEAKMDGobM -DqPX3SKI3/W8m9LmNgtDUffHGHNd1npnGM8mSyVfWjEWoEg2GPMEmdX3/tvUUV7n -Tz02IJwZRVlrbEPdW76eItMAY1NB43LpjQTrAR++mVAslulUY6a5V5nJKEc0IqOu -xkW1LWavujX1JRvlBZLeBkdpsVNuaGJtwUFfAKDfqoZUCcZxnO+dRMalHLfGOn7O -4QP/apMk2mc+GJwpKSxXBvoQkVcfuZBJmXJuUCc4BUUzHX0ZSKNbgxY/kVR1xN3k -rMgOCR6dEsGukIsgVWRDj9to/+E6IIs6YKhG7fGcXKhE8z8mf3hDLcmjbCKDCSFB -T7PI5TkLzlAEP1y2Rtin/Sa71unGZhNyEfAPW/d1dRcRVqMD/2WcTPUaIjRvAqmb -xUpenRhg/mF5rwmHl81VvVBbZCoZ35c0edEZKpfmyYbKuz7GhjEPz6O/UWGYZpK/ -7r6f4kFUrhO5atClnRyBkvmNmdfbtM5hd5jh3lgqAT7tk7ntPAIh8X8/qm5+Uab6 -3kZwXCPiSR+iEwRp42GbVL7F/b2r/wQBA+smNbHH+mT2ogDvwebUEYQ5u7AjqZvU -WkfnZPKAVQwghkIrT1Vq21v9JiM6RFNBX2ZhY3RvcjoAAK90DxORhCauJg3tbEH5 -zO25GERe8T2L/SYjOkRTQV9mYWN0b3I6AACvW0fayFNyPj0o3kQ0YOk+vZDnV7i/ -4/0mIzpEU0FfZmFjdG9yOgAAr1sEI+EYL25Oh+V/MAHMZ3nfeIm133O0K1ZpY3Rv -ciBUZXN0IChkZW1vIGtleSkgPHZpY3RvckBleGFtcGxlLm9yZz6IVQQTEQIAFQUC -NuOzmgMLCgMDFQMCAxYCAQIXgAAKCRBHr0tpYfBHhMxJAJ91JH/X2uIsYSrKJmI/ -S1Zgwoz1/wCfdQoDeGHzNwPI5NaxIZH0XYr+O22dAaUENuOzvhAEAIeRQIHb2kyS -94wRnI2IoiaLMXk1n9y/3VGPfX2TfEd/Q0laFCn/UbfxLEuQ8sF1ZygHiYlE2MPJ -WzEVRe9FYUgx6TAvSrWwdJZNwnAKlCz4soq0+YPcsDduFu5NJ2liCYrLbVIfh6m5 -uoHOT8/TX3eZZfMeBIYt5ShOjc3t4FDTAAMFA/wLVDdYasFk06YVWXLR6tyWlBG/ -WoJrvznLH9uP26vYvEfBWjMAReHyOaiIpnKgDPtgWenb2RHaq1WmUfWh483IXB5m -oiO2ZluIJpPixxRVn/cu5hvGAyhQV5GgbiacRW9RSHyaZmi8yZkWu+nS6iNwOx9h -PHRUGvzBrGAmuDZiC/8EAQPrJjWxx/pk9qIA78Hm1BGEOtrTuBDDiXmHnTN7vG9T -7F+vQT/JusPW4EJHYO4E2e1J6gyPEGOqrAsLW97WTEN+LW1bdTdY7dhM4jSI+Unv -ZqZ71xW06WXE2lxGD4ayXuzP6Q0KQT7YcMnrkqBluRJTfGKdjX0RPXt/5+KWd7H3 -VEst836l75/lYfLrbWxaArFjztISiEYEGBECAAYFAjbjs74ACgkQR69LaWHwR4RT -3QCfcsKGxTTd4f5S/liM5MfnCtlAU9QAnia0uQcnuH/aodTQqspKUGN3Z04+lQHO -BDbjtDQRBAC9Vf1MkTKc8kSxfdfZ8Y88OJAr6gHsPUg0j1t8gPk0q2ijyrJuK84u -jzmLmbtFSITKFfcT2VSD1u4qa0iFqzSwnywtRGYKd0gq1eMhaDcp3SmaMTyrbPJ3 -sKFDd98nbTzvnA1tHgZCFI7VZO7HBGgvnd+370lNQsnGRBF/vUDObwCgllBimEp4 -tasu0WNvZYptjGy3ni0EAJLsL9W7jR64h6+nZNkdO1jRT45sW8mvyMOt1BkyRQVK -6G2Lut879t/upPCYK+/ohWaf3TkAKH1ucrBm9xHlPXJHZvoIA3brt/OuJmG7r8Ub -70N2vrZmdXas/w5ru7EBcKeii9pp8pi6mim8dXTPS1R/b7BqytB0dlO9zSl9j7no -A/9Y5UnQobM/qT1tiNhJEnUwlvvTB1UWId2UiUR3k/eNCxc7IdUytanqofXSxAu2 -jyDB5Ymv1od6bRCNM1JNWnOnqVoEd/u2csTAIkZ5fl/kE6HztqRGPB+H0n3Nb4MG -u2mpLq+OUNhTnLpEZsZGXqd21eFXkWkThxstrH+kYVYSrf8EAQMsrHk/oVe3Xf3i -4RPIB3bwsBoWGrA4kRK7mm5a6M/pBLavd6wy89rv/SYjOkRTQV9mYWN0b3I6AACv -ehBH0gU1mDQlnrZJH1j9rE7y0RQQ7f0mIzpEU0FfZmFjdG9yOgAAr0wMh+wQ/T3L -5WOeVMHnGH1mSba/DcX9JiM6RFNBX2ZhY3RvcjoAAK9nFbd0J8gWcTtZNckFwvKi -KKj15fB9tCtXaGlza3kgVGVzdCAoZGVtbyBrZXkpIDx3aGlza3lAZXhhbXBsZS5u -ZXQ+iFUEExECABUFAjbjtDQDCwoDAxUDAgMWAgECF4AACgkQ3vD3uOxn296iagCf -SizgYr94GzIrMWbc6H1ha7gFOX4An2oeiUql9DoXgvph82AUGtmv9TuRnQGlBDbj -tFYQBADPV+xDMQ8NzkqoJyO+lriAUrCNIBf1Kbc6U/IPAGOoED1YVPX4EB27u3K/ -EmRVd3clFS085Dau5rFIr3d/xXnLn++wqSgQq0Jc7LflMpIj0P209/oKt6MBovTA -Qn3lNpecmWd8oxiKoPP158Zgm7iLcOvRTcs+/p0KAzNvHIvQdwADBQP8CQS48V16 -lhWOSXV6u3JOukMeWBw6Tx+7M1CqyBihmR8ZNlF6FPBvVkX0NFVUH2qJn5yr6Pmx -QxSRnC3yCEyPBa48xqIditzynMbEIkNUrFZTE915rr0k9MrwzPGuLfaPtr/Miy4B -I0dnZ/5U4hoxPwDbp0aPUwRqb8+T9POTZs7/BAEDLKx5P6FXt1394uETyAd28LN6 -Abjx+ozpGMN36+SHvBm1QBbee0EWJ9LYnatmavOGPgEn7HZFbgk/QaUQiMRMNQIE -ykHjoKU1C5uWEDR+P/wuEYX0+pQ1UhUUZ8v+/wZjAC+X5WymJmjKW2l4LXfq0RpO -U3DedzHl5+zcuhfZN03MhxX4mcTHdGNSLqWzikj/1HWl3ohGBBgRAgAGBQI247RW -AAoJEN7w97jsZ9ve/yAAnROeKraABkL+JUAzQwMcNm+0JCezAJ0Uz6p+tN5wt6yw -yH09JfENI3F77ZUBzgQ247TcEQQArUqUbiVTMxJhp8bA4vMXAzCuLjys4A44DE+u -RFb9AGsZTmw/FTPETO7iU/3frlyYyTgIvI2zDF1SwHXG06KF3yIu8LF6OCM0N0k7 -KnKpw8M2tkPiT+D8ANrHU5d178evzm40PyNDyKxSGNlIG1N4MIKFtNdMlahLvu91 -kG04WesAoLPa5zISvsX+Ew95M1o4Qti8iYHbA/4wr+eYRywP35eb/F5V9bOLWhWm -EDzw4KHXQ7V+OJ7JD5n44S5KLPKwIogohDlPmrxDTAJ/YAukApUItd30kr0Uq34Q -gFktAsqgCP7C5KEM1TTxU25Tcs4ojUHoDyMj14ECuiTCP0ZFRKUivopgjgRhFTKX -VVWTySkQ0g9SDaITSgP/a0FyXMQUYJjuB7GA6r4U6QnIHsxS5xrQgkshb4tp2MVW -MhqlhsfOLaj1WZ+oe0DxKw0O3YKTH/EAzmNelKcMbtTcilLaIdI5l+Ylam/bZe7Q -vbN2s72Kn2PZjtYqO3Uzqw14bqAJRl0ekleMdZRMMzAsour+iNVPHnlodXnQ2gz/ -BAED36GMDF6APjbzsvUK+yk64h67FO9lD4i0FiXAE3DtfiBKzYh3jEV1uv0mIzpE -U0FfZmFjdG9yOgAAr3nDQWlricc0AeWTgJNI54Z91WZHkBP9JiM6RFNBX2ZhY3Rv -cjoAAK9OjHQxUQz8Wnpik8iZguVXD27lXLi9/SYjOkRTQV9mYWN0b3I6AACvX6xO -WYl810CKCu/QJGFZWsNhMV3iibQnWFJheSBUZXN0IChkZW1vIGtleSkgPHhyYXlA -ZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjtNwDCwoDAxUDAgMWAgECF4AACgkQiXmm -xVZ/s0q3TwCgnrUiygc8NmP/EDsgHOweLy5+oMUAoJCz7S9Q/1f2X7xXU9Xs2xka -KazvnQGlBDbjtQUQBADG4aUG+qgOTGEgOAVnN0ck76AnKb3jOBIYeQGYEgF/lDYb -Y7fOQ3tIgQ0jXrKD1zHLvORNsG708yDNR79S5Ci/1nphcrNOPWMujOsZ2WMo5xbl -hG+WJujt4pcNSRK9P5fonUE4hV7GXTljg1yZ/ui00Ot7b1B8ryAYE79t1B3svwAE -CwP9Hg2r8lBq/j/t3kRO4xl108DFXiQKdj7sXugmAcMomF4nG3j2s219dLEFlSwn -0/peGvjp8JFPfcMPU/xHJSaZLf90mXsf+pHcDWujHgVA9YC6ThYaGx9Je+VmcVYo -mELxNnMWKyOJePDU4ViIXhMCvGP0Pt39wcQoiLjeu15+l/7/BAED36GMDF6APjbz -svUK+yk64h3k1cEq5Vaa4ZpvzNmxRxEEMST+XLJ7leRFzngFM7CJLENe3+ZTqaS7 -d9/a0p9ocVwP2NHOBTLSUiKi8PacU3qtr5A79M2AtUrlnwJca4opneBLJgNGJLyR -Gsv6WEWrPZ1PhR7v6SkUfj8jQ/Tzb1lj6DpOApZFH9fHv5btLU+JITTR+ohGBBgR -AgAGBQI247UFAAoJEIl5psVWf7NK7JAAnRosvXTK0JTDng87kaiXLAT3t2H8AJ95 -wwtp1x0eP4rcO45yUsgGIoWoU5UBzgQ247VREQQA3VAGc4T+vuvVXcka4ETaLaLl -L1xOiPIdJMWRWWQ60CZqWXDVpFBw6oG2AyfUZiHhLlmTZssz8UhXLw/URsPSpiGb -tpGWKiLs4OCqjslN0lHzcnGqxGWCZJixMgZa5DcWZJjwqdXEbDChgm4ULP/7+iKv -IenTQNhFoCXr9MtdoHMAoLpNCmSKlTu1H5GlWmYTK9AndWrfA/47ip0VYgzIvUhI -0iWcG95sNfshApzPL6zPgKBqACogs/5/DfRn9g07BcuMihLJD0PLNPVnOXqQRaN4 -Da7jLuJA53XtLgpogxG08M6XUimTucfcovu29/bgjZIKA5c8KJ2lzXSJ9jZxSoy+ -O051f7yhXbUmYC1vdNr8GBk69QKy/wQAiHMfU3cbCfTTMmig+zBHCkHjqzqr/zKt -R8RT5AwSOIU2aUIiHdV08apCelBw8PbEf077TuWCq2YyDZJmgWRYh5cdaMgdAd7u -l1FS1yHPZYshcofWjgXUJHR4I8iPCs5OmdHo2HK3uU2OM36ZQGSpFA5WN1NEm9Gt -MSBoYKN2ERD/BAEDE+RZ21hlj9nFUQKkDf2E3ET88XB3l0M1bCxCv2UAfGp+pESW -bFZsBv0mIzpEU0FfZmFjdG9yOgAAr1wtpFPolwbaQUa/5Qmzo2/e2AAZMSX9JiM6 -RFNBX2ZhY3RvcjoAAK9Sfv2nvtEYMQvNNDd0DvnBNBoxlAS5/SYjOkRTQV9mYWN0 -b3I6AACvZ5hJ+Tl0FtvDC+JX0swooQzPDGNCObQrWWFua2VlIFRlc3QgKGRlbW8g -a2V5KSA8eWFua2VlQGV4YW1wbGUubmV0PohVBBMRAgAVBQI247VSAwsKAwMVAwID -FgIBAheAAAoJEJ7vNM1LEbJfV7EAoJAAKzgeRH40g+m1xX5ZfP6QnCcoAKCbTZMS -o0H79g6Zn2wZbdEVGwmj+p0BpQQ247VnEAQAmuK5RcS0zTyXp6SjW2+WeQIpJnJD -flL0+iBe//3SADv01qUmw3jWMAuxG+CcCApksl122V9npEHiLC4Q2A69roLRsbxK -BPebustfadLJoVYqPsvjnrBlafe5GcrFPnKbE0wV6ZXx/Tp/eSDiQlid4lWz5J+z -/mN7KhHANzoRAbsAAwYEAJO5fkCSdNwkisFXzeKslWxm9Yoe1TOouiSV11hex0j9 -4Hpz5wGWEXF7z+FbDq+4V0UqGkKxaERsl6HMWNkImj57N/9h1C1YDfiKTimg5tZp -KmehXtldpWGCNDZrE0RasrFCKENVhFMhpc4kAnx6rbA0+LhRvJkvkdxY7pKU//aZ -/wQBAxPkWdtYZY/ZxVECpA39hNxHnMEofjVNfhE0JAv3KTJRZHOCbzCkO+DxKgcS -IsZVSJizzudmVLYbQWMKc0ykAvbJot4k6PgNiWwUyY8HxQs0F+5YYtQkMs8VdIQN -ez+5E2RCoB+VflUVq4qhWUxXB737maUEsSc220yeEj04n59OlPILb+A/XvwoCE/F -+kCQdlS7BA2IRgQYEQIABgUCNuO1ZwAKCRCe7zTNSxGyX/RcAJ9X3N2PPlX0KeNx -UHefqmpPYDF6GgCfZmyC/OlrmmSulJ6NAHxiQNT4D/aVAc4ENuO1yxEEAIEMk4Zf -0L/HEJVk0/o4fPpwvm8zc+KZQCFX70cBVU9BWJOcUquRg9JDJF9bOM5TxE7VOnkI -fPvjug5vqP0/vjIfW7LvzIWDhS6FcFaKeG4IoqrgghbAmQIoEWvVTx+7xrpjo1yO -qIMDQqYZEmsw+Zd6deQmkUYcbvytS82L0gx/AKC6DM0guH/ddkJlT4FQ9h5cv6dQ -AQQAgNdmGPW8VceCL2WaKMoOMmhwQGhqY3+1pDLo7HVFEPoe18A9jlMRHWfvGb2E -zMT46/Ugqkf8TzvZGFrWq7W/t45rp5O41YXQ2+ZJH3nl+t5Gw25Hwk0hvpK0jYRH -2nMFR+PKQL2mDbA94LvClAkgX1MX4lrUG8bYj6FrbEnvzoAD+wcRS8A6xznxhs+V -sg/KnYl0Qe9dNFPY0hJVG5MxCyDy9X32cxhHYJSHbvS4/LLbFloP+Rhwn3/WeBjs -L2lts1ahXvQ+QQw7+qPrs4hWJZU/NSEh1RGitukaG5zegHNTE6CJqXshshI9Ei0O -CDahmhjiGrJA3HwKPZlkDMOkza8K/wQBA3GTFCmP28PloZW7fHe9ipQH0TkH+yp2 -IXXRWNHjhcbOrwkv7+jedHX9JiM6RFNBX2ZhY3RvcjoAAK9nd2gdDGXr+aS4H9RN -o21VL8OsKJBj/SYjOkRTQV9mYWN0b3I6AACvXT7TUKyg8va6X0RToEWg4+feDJFE -n/0mIzpEU0FfZmFjdG9yOgAAr0s/BxXRDWjjCqZNI5VKmGD3EQ2CCWO0J1p1bHUg -VGVzdCAoZGVtbyBrZXkpIDx6dWx1QGV4YW1wbGUubmV0PohVBBMRAgAVBQI247XL -AwsKAwMVAwIDFgIBAheAAAoJEGvEd4BUrNJGQOsAnjgUjTj9/yeCyzBgwu2Fs1Z2 -HB9aAKCYdUx3OscN3QmqVVre3pwZY5GmSJ0BpQQ247XyEAQAzHzwwUKDM7+djJo2 -/EnWmCijc6g3fStaGNoXDEovi3B2oPiiRTsigX90qB5nFP7whDfi8k4JY2Eig5hH -+MGdvni36hYEnQSadsZueYofvQh14N3V8fUmx4hiQiMXyWiLJzc91ZiRjww4wZWn -/4Y5f+0mb0fjCaVSxTxo4+7joU8AAwUD/0oL9Gm3gl1XVV8BhJoXVdFQ6PN9yEEX -UbtcrfkC51kTBk2NaEGqbB+kC8GEmXwyZcW7AQN7X6ikraUUm3RjTU7CvkSHobBn -XYt7FhqZURpuV7eSqZGP5nP7SxWmCTTKgIH1kHCpWRwaexKFjIIkYgyVFqtEx9cE -Q6D2kXPh+Rna/wQBA3GTFCmP28PloZW7fHe9ipQEjson+R8J0cZFxO8B2k6Fas1C -pLvP8P0NdTIyitaiBUatIGDI8N22I6mqelpWZpTKZZymrDKe0n8h+rTNqb0uIt8F -R+6/1qFnL1k3E/+QxqS7VGkRz6xnT+la7OVrexXz18ynbpvzJMPe2SAPyqY+RSzW -wf5Z/bgM+A/ftNFfEencn7KIRgQYEQIABgUCNuO18gAKCRBrxHeAVKzSRn1jAJsF -3zuwZ09o7T0yZNm4zWcRGZvteACgroLrVdUuNxbdEllH4BbcvFB06zA= -=P9+G ------END PGP PRIVATE KEY BLOCK----- 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) -sec 800G/2E5FA4F4 1998-04-28 test two (no pp) -sec 768G/6D11D6D3 1998-04-28 test three (pp=abc) - ------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 - -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 - - * rndunix.c (my_popen): Make sure that stdin and stderr are - connected to a file. This is to avoid NetBSD to complain about - set{u,g}id programs invoked with fd 0, 2 closed. Reported by - Cristian Biere. - (start_gatherer): Likewise. Reordered code. - -2002-10-02 David Shaw - - * tiger.c (tiger_get_info): Select the OID to use for TIGER at - compile time. - -2002-09-27 David Shaw - - * Makefile.am, md.c (load_digest_module): TIGER is now always - enabled. - -2002-09-26 Werner Koch - - * tiger.c (tiger_get_info): Use a regular OID. Note that this - breaks all TIGER generated signatures; if we want to do something - about it we have to do it in ../g10/sig-check.c . - -2002-09-17 Werner Koch - - * rndw32.c (SIZEOF_DISK_PERFORMANCE_STRUCT): Increased to 256. - -2002-09-12 Stefan Bellon - - * rand-internal.h (rndriscos_gather_random): Added prototype. - -2002-08-30 Werner Koch - - * random.c: Automagically detect the entropy gatherer when - this feature is configured. - * rndegd.c (rndegd_connect_socket): New. Factored out from .. - (rndegd_gather_random): here and call it. - (do_read): Update the counter variables correctly. This was not a - problem due to the way EGD works. Bug found by Christian Biere. - -2002-08-20 Werner Koch - - * primegen.c (generate_elg_prime): Return all factors for mode 1. - Bug reported by Bob Mathews. - -2002-08-12 Werner Koch - - * cipher.c: Include the DUMMY cipher only when the new ALLOW_DUMMY - is defined. It should only be defined for hard core debugging. - -2002-08-08 David Shaw - - * Makefile.am, md.c (load_digest_module): Allow switching TIGER on - and off via configure. - -2002-08-07 David Shaw - - * md.c (md_algo_present): New function to check if a given algo is - in use for a given MD_HANDLE. - -2002-08-04 Werner Koch - - * blowfish.h, cast5.h, des.h: Removed after moving all prototypes to - * algorithms.h: here. Changed all sources to use this one. - -2002-08-03 Stefan Bellon - - * idea-stub.c (idea_get_info): RISC OS' Norcroft C needs a cast. - * random.c (getfnc_gather_random): Added RISC OS support. - * rndriscos.c: Removed dynload code and tidied up a bit. - -2002-08-03 Werner Koch - - * rndegd.c (do_read): Handle case when read returns 0 to avoid - gpg hanging when EGD died. By Christian Biere. - -2002-08-02 Werner Koch - - The big extension removal. - - * Makefile.am: Removed all extension stuff. - * dynload.c: Removed everything except for - register_cipher_extension. - (dynload_enum_module_names): New. - * dynload.h: Removed. - * random.c (getfnc_gather_random,getfnc_fast_random_poll): - New. Replaced all dynload functions with these ones. - * rndunix.c (rndunix_gather_random): Renamed from - gather_random. Made global. Removed all dynload stuff. - * rndlinux.c (rndlinux_gather_random): Likewise. - * rndegd.c (rndegd_gather_random): Likewise. - * rndw32.c (rndw32_gather_random) - (rndw32_gather_random_fast): Likewise. Also removed the unsued - entropy dll code. - * md.c (new_list_item): Changed return value to indicate whether - an algorithms was loaded. - (load_digest_module): Simplified by removing all the dynload code. - * algorithms.h: New. - * md5.c (md5_get_info): Made global. Removed all dynload stuff. - * rmd160.c (rmd160_get_info): Likewise. - * sha1.c (sha1_get_info): Likewise. - * tiger.c (tiger_get_info): Likewise. Return NULL if we can't use - this module. - * idea-stub.c: New. - * blowfish.h (idea_get_info): Add prototype. - * cipher.c (setup_cipher_table): Try to load IDEA. - (load_cipher_modules): Removed all dynload code. - * pubkey.c (load_pubkey_modules): Removed the dynloading code. - -2002-07-25 David Shaw - - * random.c: "warning" -> "WARNING" - -2002-07-02 Werner Koch - - * rndw32.c (slow_gatherer_windowsNT): Use a simple array for the - disk performance structure and increase it to the size required by - W2000. - -2002-06-29 Werner Koch - - * rndlinux.c: Removed HAVE_LINUX_RANDOM_H conditional because it - was never used and the configure test did set the wrong macro - anyway. - -2002-05-07 Stefan Bellon - - * md.c (md_start_debug): Use EXTSEP_S instead of ".". - -2002-04-24 Werner Koch - - * tiger.c (tiger_final): Removed superfluous token pasting operators. - * md5.c (md5_final): Ditto. - -2002-04-22 Stefan Bellon - - * rndriscos.c (func_table): Made func a function pointer. - (init_device): Improved loading of CryptRandom module. - -2002-04-18 Werner Koch - - * rndlinux.c, rndegd.c, rndunix.c (func_table): Made func a - function pointer. Note that we still need to change the module - interface to cope with data vs function pointer problems. Hmmm, - even dlsym has a problem with this. - -2002-04-10 David Shaw - - * cipher.c (setup_cipher_table, cipher_open, cipher_encrypt, - cipher_decrypt, dummy_setkey, dummy_encrypt_block, - dummy_decrypt_block): the dummy cipher should only be built on - development versions. - -2002-04-06 Werner Koch - - * rijndael.c (rijndael_get_info): We do only support a 128 bit - blocksize so it makes sense to change the algorithm strings to - AES. - * cipher.c (string_to_cipher_algo): Map "RIJNDAEL" to "AES". - -2002-02-14 Werner Koch - - * random.c (mix_pool): Removed the failsafe stuff again. It makes - the code more complicate and may give the path to more bugs. - -2002-02-10 Werner Koch - - * random.c (mix_pool): Carry an extra failsafe_digest buffer - around to make the function more robust. - -2002-02-08 Werner Koch - - * random.c (add_randomness): Xor new data into the pool and not - just copy it. This avoids any choosen input attacks which are not - serious in our setting because an outsider won't be able to mix - data in and even then we keep going with a PRNG. Thanks to Stefan - Keller for pointing this out. - -2002-01-02 Stefan Bellon - - * rndriscos.c [__riscos__]: Updated include file name. - -2001-12-21 Werner Koch - - * Makefile.am (DISCLEANFILES): Add construct.c - -2001-12-19 Werner Koch - - * rndw32.c [CYGWIN32]: Include winioctl.h. By Disastry. - -2001-11-08 Werner Koch - - * primegen.c (gen_prime): Set 2 high order bits for secret primes. - * rsa.c (generate): Loop until we find the exact modulus size. - Changed the exponent to 41. - -2001-10-22 Werner Koch - - * Makefile.am: Need to use $(EXEEXT) where approriate. - -2001-09-09 Werner Koch - - * rsa.c (rsa_get_info): s/usage/r_usage/ to avoid shadow warnings. - -2001-08-24 Werner Koch - - * md.c (md_write): Made buf arg const. - -2001-08-22 Werner Koch - - * random.c (fast_random_poll): Don't use gethrtime if it is broken. - -2001-08-20 Werner Koch - - Applied patches from Stefan Bellon to support - RISC OS. Nearly all of these patches are identified by the - __riscos__ macro. - * blowfish.c, twofish.c: Added pragmas for use with a Norcraft - compiler. - * dynload.c, md5.c, rmd160.c, sha1.c: Minor patches for RISC OS. - * rndriscos.c: New. - * rnd-internal.h: Added prototype. - * random.c (fast_random_poll): Use '#if defined' instead of just - 'defined'; needed for RISC OS. - * primegen.c (gen_prime): count? are now ints for consistence - with is_prime(). - -2001-08-08 Werner Koch - - * rndw32.c (gather_random): Use toolhelp in addition to the NT - gatherer for Windows2000. Suggested by Sami Tolvanen. - - * random.c (read_pool): Fixed length check, this used to be one - byte to strict. Made an assert out of it because the caller has - already made sure that only poolsize bytes are requested. - Reported by Marcus Brinkmann. - -2001-07-18 Werner Koch - - * rndlinux.c (gather_random): casted a size_t arg to int so that - the format string is correct. Casting is okay here and avoids - translation changes. - -2001-06-12 Werner Koch - - * cipher.c (string_to_cipher_algo): Use ascii_strcasecmp(). - * md.c (string_to_digest_algo): Ditto. - * pubkey.c (string_to_pubkey_algo): Ditto. - * rndw32.c (slow_gatherer_windowsNT): Ditto. Not really needed - here but anyway. - -2001-04-29 Werner Koch - - * random.c (fast_random_poll): Do not check the return code of - getrusage. - -2001-04-17 Werner Koch - - * rndunix.c: Add a signal.h header to avoid warnings on Solaris 7 - and 8. - -2001-04-16 Werner Koch - - * dynload.c [__MINGW32__]: Applied patch from Timo Schulz to make - it work under W32. This patches is based on the one from - Disastry@saiknes.lv - -2001-04-06 Werner Koch - - * rijndael.c, des.c, blowfish.c, twofish.c, cast5.c (burn_stack): - New. Add wrappers for most functions to be able to call - burn_stack after the function invocation. This methods seems to be - the most portable way to zeroise the stack used. It does only work - on stack frame based machines but it is highly portable and has no - side effects. Just setting the automatic variables at the end of - a function to zero does not work well because the compiler will - optimize them away - marking them as volatile would be bad for - performance. - * md5.c, sha1.c, rmd160.c, tiger.c (burn_stack): Likewise. - * random.c (burn_stack): New. - (mix_pool): Use it here to burn the stack of the mixblock function. - -2001-04-02 Werner Koch - - * primegen.c (generate_elg_prime): I was not initialized for mode - != 1. Freed q at 3 places. Thanks to Tommi Komulainen. - -2001-03-28 Werner Koch - - * md5.c (md5_final): Fixed calculation of hashed length. Thanks - to disastry@saiknes.lv for pointing out that it was horrible wrong - for more than 512MB of input. - * sha1.c (sha1_final): Ditto. - * rmd160.c (rmd160_final): Ditto. - * tiger.c (tiger_final): Ditto. - -2001-03-19 Werner Koch - - * blowfish.c (encrypt,do_encrypt): Changed name to do_encrypt to - avoid name clahses with an encrypt function in stdlib.h of - Dynix/PIX. Thanks to Gene Carter. - * elgamal.c (encrypt,do_encrypt): Ditto. - -2001-03-12 Werner Koch - - * twofish.c (gnupgext_enum_func): Add some static when comnpiled - as a module. - - * tiger.c (tiger_get_info): Return "TIGER192" and not just - "TIGER". By Edwin Woudt. - -2001-03-08 Werner Koch - - * random.c: Always include time.h - standard requirement. Thanks - to James Troup. - -2001-01-18 Werner Koch - - * rndw32.c: Fixed typo and wrong ifdef for VER_PLATFORM* macro - -2001-01-12 Werner Koch - - * cipher.c (cipher_encrypt,cipher_encrypt): Use blocksize and - not 8 for CBC mode (However: we don't use CBS in OpenPGP). - -2000-11-22 Werner Koch - - * rndegd.c (gather_random): Fixed default socket to be '=entropy'. - Thanks to Tomasz Kozlowski. - -2000-10-12 Werner Koch - - * rijndael.c: New. - * cipher.c: Add Rijndael support. - -Wed Oct 4 15:50:18 CEST 2000 Werner Koch - - * sha1.c (transform): Use rol() macro. Actually this is not needed - for a newer gcc but there are still aoter compilers. - -Thu Sep 14 14:20:38 CEST 2000 Werner Koch - - * random.c (fast_random_poll): Check ENOSYS for getrusage. - * rndunix.c: Add 2 sources for QNX. By Sam Roberts. - -Wed Sep 13 18:12:34 CEST 2000 Werner Koch - - * rsa.c (secret): Speed up by using the CRT. For a 2k keys this - is about 3 times faster. - (stronger_key_check): New but unused code to check the secret key. - -Wed Sep 6 17:55:47 CEST 2000 Werner Koch - - * rsa.c: Changed the comment about the patent. - * Makefile.am: Included rsa.[ch]. - * pubkey.c: Enabled RSA support. - (pubkey_get_npkey): Removed RSA workaround. - -Fri Aug 25 16:05:38 CEST 2000 Werner Koch - - * rndlinux.c (open_device): Loose random device checking. - By Nils Ellmenreich. - - * rndegd.c (gather_random): Name of socket is nom configurable. - -Wed Jun 28 11:54:44 CEST 2000 Werner Koch - - * rsa.c, rsa.h: New based on the old module version (only in CVS for now). - * pubkey.c (setup_pubkey_table): Added commented support for RSA. - -Fri Jun 9 10:09:52 CEST 2000 Werner Koch - - * rndunix.c (waitpid): New. For UTS 2.1. All by Dave Dykstra. - (my_popen): Do the FD_CLOEXEC only if it is available - (start_gatherer): Cope with missing _SC_OPEN_MAX - -Sun May 28 13:55:17 CEST 2000 Werner Koch - - * random.c (read_seed_file): Binary open for DOSish system - (update_random_seed_file): Ditto. - - * rndw32.c: Add some debuging code enabled by an environment variable. - -Tue May 23 09:19:00 CEST 2000 Werner Koch - - * rndw32.c: Started with alternative code to replace entropy.dll - -Thu May 18 11:38:54 CEST 2000 Werner Koch - - * primegen.c (register_primegen_progress): New. - * dsa.c (register_pk_dsa_progress): New. - * elgamal.c (register_pk_elg_progress): New. - -Fri Apr 14 19:37:08 CEST 2000 Werner Koch - - * twofish.c (twofish_get_info): Fixed warning about cast. - -Tue Mar 28 14:26:58 CEST 2000 Werner Koch - - * random.c [MINGW32]: Include process.h for getpid. - -Thu Mar 2 15:37:46 CET 2000 Werner Koch - - * random.c (fast_random_poll): Add clock_gettime() as fallback for - system which support this POSIX.4 fucntion. By Sam Roberts. - - * rndunix.c: Add some more headers for QNX. By Sam Roberts. - - * random.c (read_seed_file): Removed the S_ISLNK test becuase it - is already covered by !S_ISREG and is not defined in Unixware. - Reported by Dave Dykstra. - - * sha1.c (sha1_get_info): Removed those stupid double lines. Dave - is really a good lint. - -Wed Feb 23 10:07:57 CET 2000 Werner Koch - - * twofish.c (twofish_get_info): Add some const to the casts. By Martin - Kahlert. - -Mon Feb 14 14:30:20 CET 2000 Werner Koch - - (update_random_seed_file): Silently ignore update request when pool - is not filled. - -Fri Feb 11 17:44:40 CET 2000 Werner Koch - - * random.c (read_seed_file): New. - (set_random_seed_file): New. - (read_pool): Try to read the seeding file. - (update_random_seed_file): New. - - (read_pool): Do an initial extra seeding when level 2 quality random - is requested the first time. This requestes at least POOLSIZE/2 bytes - of entropy. Compined with the seeding file this should make normal - random bytes cheaper and increase the quality of the random bytes - used for key generation. - - * rndegd.c (gather_random): Shortcut level 0. - * rndunix.c (gather_random): Ditto. - * rndw32.c (gather_random): Ditto. - -Fri Jan 14 18:32:01 CET 2000 Werner Koch - - * rmd160.c (rmd160_get_info): Moved casting to the left side due to a - problem with UTS4.3. Suggested by Dave Dykstra. - * sha1.c (sha1_get_info): Ditto. - * tiger.c (tiger_get_info): Ditto. - * md5.c (md5_get_info): Ditto - * des.c (des_get_info): Ditto. - * blowfish.c (blowfish_get_info): Ditto. - * cast5.c (cast5_get_info): Ditto. - * twofish.c (twofish_get_info): Ditto. - -Thu Jan 13 19:31:58 CET 2000 Werner Koch - - * elgamal.c (wiener_map): New. - (gen_k): Use a much smaller k. - (generate): Calculate the qbits using the wiener map and - choose an x at a size comparable to the one choosen in gen_k - - * random.c (read_pool): Print a more friendly error message in - cases when too much random is requested in one call. - - * Makefile.am (tiger): Replaced -O1 by -O. Suggested by Alec Habig. - -Sat Dec 4 12:30:28 CET 1999 Werner Koch - - * primegen.c (generate_elg_prime): All primes are now generated with - the lowest random quality level. Becuase they are public anyway we - don't need stronger random and by this we do not drain the systems - entropy so much. - -Thu Oct 28 16:08:20 CEST 1999 Werner Koch - - * random.c (fast_random_poll): Check whether RUSAGE_SELF is defined; - this is not the case for some ESIX and Unixware, although they have - getrusage(). - - * elgamal.c (sign): Hugh found strange code here. Replaced by BUG(). - -Mon Oct 11 09:24:12 CEST 1999 Werner Koch - - * rndw32.c (gather_random): Handle PCP_SEEDER_TOO_SMALL. - -Sat Oct 9 20:34:41 CEST 1999 Werner Koch - - * Makefile.am: Tweaked module build and removed libtool - -Fri Oct 8 20:32:01 CEST 1999 Werner Koch - - * rndw32.c (load_and_init_winseed): Use the Registry to locate the DLL - -Mon Oct 4 21:23:04 CEST 1999 Werner Koch - - * md.c (md_reset): Clear finalized; thanks to Ulf Moeller for - fixing this bug. - -Sat Sep 18 12:51:51 CEST 1999 Werner Koch - - * Makefile.am: Never compile mingw32 as module - -Wed Sep 15 14:39:59 CEST 1999 Michael Roth - - * des.c: Various speed improvements: One bit pre rotation - trick after initial permutation (Richard Outerbridge). - Finished test of SSLeay Tripple-DES patterns. - -Wed Sep 15 16:22:17 CEST 1999 Werner Koch - - * rndw32.c: New. - -Mon Sep 13 10:51:29 CEST 1999 Werner Koch - - * bithelp.h: New. - * rmd160.h, sha1.h, md5.h: Use the rol macro from bithelp.h - -Tue Sep 7 16:23:36 CEST 1999 Werner Koch - - * Makefile.am: Fixed seds for latest egcc. By Ollivier Robert. - -Mon Sep 6 19:59:08 CEST 1999 Werner Koch - - * des.c (selftest): Add some testpattern - -Mon Aug 30 20:38:33 CEST 1999 Werner Koch - - * cipher.c (do_cbc_encrypt): Fixed serious bug occuring when not using - in place encryption. Pointed out by Frank Stajano. - -Mon Jul 26 09:34:46 CEST 1999 Werner Koch - - * md5.c (md5_final): Fix for a SCO cpp bug. - -Thu Jul 15 10:15:35 CEST 1999 Werner Koch - - * elgamal.c (elg_check_secret_key,elg_encrypt - elg_decrypt,elg_sign,elg_verify): Sanity check on the args. - * dsa.c (dsa_check_secret_key,dsa_sign,dsa_verify): Ditto. - - * pubkey.c (disable_pubkey_algo): New. - (check_pubkey_algo2): Look at disabled algo table. - * cipher.c (disable_cipher_algo): New. - (check_cipher_algo): Look at disabled algo table. - -Wed Jul 7 13:08:40 CEST 1999 Werner Koch - - * Makefile.am: Support for libtool. - -Fri Jul 2 11:45:54 CEST 1999 Werner Koch - - * dsa.c (gen_k): Changed algorithm to consume less random bytes - * elgamal.c (gen_k): Ditto. - - * random.c (random_dump_stats): New. - -Thu Jul 1 12:47:31 CEST 1999 Werner Koch - - * primegen.c, elgamal.c, dsa.c (progess): New and replaced all - fputc with a call to this function. - -Sat Jun 26 12:15:59 CEST 1999 Werner Koch - - * rndegd.c (do_write): s/ssize_t/int/ due to SunOS 4.1 probs. - - * cipher.c (do_cbc_encrypt, do_cbc_decrypt): New. - - * dynload.c (HAVE_DL_SHL_LOAD): Map hpux API to dlopen (Dave Dykstra). - * Makefile.am (install-exec-hook): Removed. - -Sun May 23 14:20:22 CEST 1999 Werner Koch - - * cipher.c (setup_cipher_table): Enable Twofish - - * random.c (fast_random_poll): Disable use of times() for mingw32. - -Mon May 17 21:54:43 CEST 1999 Werner Koch - - * dynload.c (register_internal_cipher_extension): Minor init fix. - -Tue May 4 15:47:53 CEST 1999 Werner Koch - - * primegen.c (gen_prime): Readded the Fermat test. Fixed the bug - that we didn't correct for step when passing the prime to the - Rabin-Miller test which led to bad performance (Stefan Keller). - (check_prime): Add a first Fermat test. - -Sun Apr 18 10:11:28 CEST 1999 Werner Koch - - * cipher.c (cipher_setiv): Add ivlen arg, changed all callers. - - * random.c (randomize_buffer): alway use secure memory because - we can't use m_is_secure() on a statically allocated buffer. - - * twofish.c: Replaced some macros by a loop to reduce text size. - * Makefile.am (twofish): No more need for sed editing. - -Fri Apr 9 12:26:25 CEST 1999 Werner Koch - - * cipher.c (cipher_open): Reversed the changes for AUTO_CFB. - - * blowfish.c: Dropped the Blowfish 160 mode. - * cipher.c (cipher_open): Ditto. - (setup_cipher_table): Ditto. And removed support of twofish128 - -Wed Apr 7 20:51:39 CEST 1999 Werner Koch - - * random.c (get_random_bits): Can now handle requests > POOLSIZE - - * cipher.c (cipher_open): Now uses standard CFB for automode if - the blocksize is gt 8 (according to rfc2440). - - * twofish.c: Applied Matthew Skala's patches for 256 bit key. - -Tue Apr 6 19:58:12 CEST 1999 Werner Koch - - * random.c (get_random_bits): Can now handle requests > POOLSIZE - - * cipher.c (cipher_open): Now uses standard CFB for automode if - the blocksize is gt 8 (according to rfc2440). - -Sat Mar 20 11:44:21 CET 1999 Werner Koch - - * rndlinux.c (tty_printf) [IS_MODULE]: Removed. - - * rndegd.c (gather_random): Some fixes. - -Wed Mar 17 13:09:03 CET 1999 Werner Koch - - * rndegd.c (do_read): New. - (gather_random): Changed the implementation. - -Mon Mar 8 20:47:17 CET 1999 Werner Koch - - * dynload.c (DLSYM_NEEDS_UNDERSCORE): Renamed. - -Fri Feb 26 17:55:41 CET 1999 Werner Koch - - * md.c: Nearly a total rewrote. - -Wed Feb 24 11:07:27 CET 1999 Werner Koch - - * cipher.c (context): Fixed alignment - * md.c: Ditto. - - * rndegd.c: New - -Mon Feb 22 20:04:00 CET 1999 Werner Koch - - * rndegd.c: New. - -Wed Feb 10 17:15:39 CET 1999 Werner Koch - - * Makefile.am: Modules are now figured out by configure - * construct.c: New. Generated by configure. Changed all modules - to work with that. - * sha1.h: Removed. - * md5.h: Removed. - - * twofish.c: Changed interface to allow Twofish/256 - - * rndunix.c (start_gatherer): Die on SIGPIPE. - -Wed Jan 20 18:59:49 CET 1999 Werner Koch - - * rndunix.c (gather_random): Fix to avoid infinite loop. - -Sun Jan 17 11:04:33 CET 1999 Werner Koch - - * des.c (is_weak_key): Replace system memcmp due to bugs - in SunOS's memcmp. - (des_get_info): Return error on failed selftest. - * twofish.c (twofish_setkey): Return error on failed selftest or - invalid keylength. - * cast5.c (cast_setkey): Ditto. - * blowfish.c (bf_setkey): Return error on failed selftest. - -Tue Jan 12 11:17:18 CET 1999 Werner Koch - - * random.c (random_is_faked): New. - - * tiger.c: Only compile if we have the u64 type - -Sat Jan 9 16:02:23 CET 1999 Werner Koch - - * rndunix.c (gather_random): check for setuid. - - * Makefile.am: Add a way to staically link random modules - -Thu Jan 7 18:00:58 CET 1999 Werner Koch - - * md.c (md_stop_debug): Do a flush first. - (md_open): size of buffer now depends on the secure parameter - -Sun Jan 3 15:28:44 CET 1999 Werner Koch - - * rndunix.c (start_gatherer): Fixed stupid ==/= bug - -1998-12-31 Geoff Keating - - * des.c (is_weak_key): Rewrite loop end condition. - -Tue Dec 29 14:41:47 CET 1998 Werner Koch - - * random.c: add unistd.h for getpid(). - (RAND_MAX): Fallback value for Sun. - -Wed Dec 23 17:12:24 CET 1998 Werner Koch - - * md.c (md_copy): Reset debug. - -Mon Dec 14 21:18:49 CET 1998 Werner Koch - - * random.c (read_random_source): Changed the interface to the - random gathering function. - (gather_faked): Use new interface. - * dynload.c (dynload_getfnc_fast_random_poll): Ditto. - (dynload_getfnc_gather_random): Ditto. - * rndlinux.c (gather_random): Ditto. - * rndunix.c (gather_random): Ditto. - -Sat Dec 12 18:40:32 CET 1998 Werner Koch - - * dynload.c (SYMBOL_VERSION): New to cope with system which needs - underscores. - - * rndunix.c: Rewrote large parts - -Thu Dec 10 20:15:36 CET 1998 Werner Koch - - * dynload.c (load_extension): increased needed verbosity level. - - * random.c (fast_random_poll): Fallback to a default fast random - poll function. - (read_random_source): Always use the faked entroy gatherer if no - gather module is available. - * rndlinux.c (fast_poll): Removed. - * rndunix.c (fast_poll): Removed. - - -Wed Nov 25 12:33:41 1998 Werner Koch (wk@isil.d.shuttle.de) - - * rand-*.c: Removed. - * rndlinux.c : New. - * rndunix.c : New. - * random.c : Restructured the interface to the gather modules. - (intialize): Call constructor functions - (read_radnom_source): Moved to here. - * dynload.c (dynload_getfnc_gather_random): New. - (dynload_getfnc_fast_random_poll): New. - (register_internal_cipher_extension): New. - (register_cipher_extension): Support of internal modules. - -Sun Nov 8 17:44:36 1998 Werner Koch (wk@isil.d.shuttle.de) - - * rand-unix.c (read_random_source): Removed the assert. - -Mon Oct 19 18:34:30 1998 me,,, (wk@tobold) - - * pubkey.c: Hack to allow us to give some info about RSA keys back. - -Thu Oct 15 11:47:57 1998 Werner Koch (wk@isil.d.shuttle.de) - - * dynload.c: Support for DLD - -Wed Oct 14 12:13:07 1998 Werner Koch (wk@isil.d.shuttle.de) - - * rand-unix.c: Now uses names from configure for /dev/random. - -1998-10-10 SL Baur - - * Makefile.am: fix sed -O substitutions to catch -O6, etc. - -Tue Oct 6 10:06:32 1998 Werner Koch (wk@isil.d.shuttle.de) - - * rand-unix.c (HAVE_GETTIMEOFDAY): Fixed (was ..GETTIMEOFTIME :-) - * rand-dummy.c (HAVE_GETTIMEOFDAY): Ditto. - -Mon Sep 28 13:23:09 1998 Werner Koch (wk@isil.d.shuttle.de) - - * md.c (md_digest): New. - (md_reset): New. - -Wed Sep 23 12:27:02 1998 Werner Koch (wk@isil.d.shuttle.de) - - * tiger.c (TIGER_CONTEXT): moved "buf", so that it is 64 bit aligned. - -Mon Sep 21 06:22:53 1998 Werner Koch (wk@(none)) - - * des.c: Some patches from Michael. - -Thu Sep 17 19:00:06 1998 Werner Koch (wk@(none)) - - * des.c : New file from Michael Roth - -Mon Sep 14 11:10:55 1998 Werner Koch (wk@(none)) - - * blowfish.c (bf_setkey): Niklas Hernaeus patch to detect weak keys. - -Mon Sep 14 09:19:25 1998 Werner Koch (wk@(none)) - - * dynload.c (RTLD_NOW): Now defined to 1 if it is undefined. - -Mon Sep 7 17:04:33 1998 Werner Koch (wk@(none)) - - * Makefile.am: Fixes to allow a different build directory - -Thu Aug 6 17:25:38 1998 Werner Koch,mobil,,, (wk@tobold) - - * random.c (get_random_byte): Removed and changed all callers - to use get_random_bits() - -Mon Jul 27 10:30:22 1998 Werner Koch (wk@(none)) - - * cipher.c : Support for other blocksizes - (cipher_get_blocksize): New. - * twofish.c: New. - * Makefile.am: Add twofish module. - -Mon Jul 13 21:30:52 1998 Werner Koch (wk@isil.d.shuttle.de) - - * random.c (read_pool): Simple alloc if secure_alloc is not set. - (get_random_bits): Ditto. - -Thu Jul 9 13:01:14 1998 Werner Koch (wk@isil.d.shuttle.de) - - * dynload.c (load_extension): Function now nbails out if - the program is run setuid. - -Wed Jul 8 18:58:23 1998 Werner Koch (wk@isil.d.shuttle.de) - - * rmd160.c (rmd160_hash_buffer): New. - -Thu Jul 2 10:50:30 1998 Werner Koch (wk@isil.d.shuttle.de) - - * cipher.c (cipher_open): algos >=100 use standard CFB - -Thu Jun 25 11:18:25 1998 Werner Koch (wk@isil.d.shuttle.de) - - * Makefile.am: Support for extensions - -Thu Jun 18 12:09:38 1998 Werner Koch (wk@isil.d.shuttle.de) - - * random.c (mix_pool): simpler handling for level 0 - -Mon Jun 15 14:40:48 1998 Werner Koch (wk@isil.d.shuttle.de) - - * tiger.c: Removed from dist, will reappear as dynload module - -Sat Jun 13 14:16:57 1998 Werner Koch (wk@isil.d.shuttle.de) - - * pubkey.c: Major changes to allow extensions. Changed the inteface - of all public key ciphers and added the ability to load extensions - on demand. - - * misc.c: Removed. - -Wed Jun 10 07:52:08 1998 Werner Koch,mobil,,, (wk@tobold) - - * dynload.c: New. - * cipher.c: Major changes to allow extensions. - -Mon Jun 8 22:43:00 1998 Werner Koch (wk@isil.d.shuttle.de) - - * cipher.c: Major internal chnages to support extensions. - * blowfish.c (blowfish_get_info): New and made all internal - functions static, changed heder. - * cast5.c (cast5_get_info): Likewise. - -Mon Jun 8 12:27:52 1998 Werner Koch (wk@isil.d.shuttle.de) - - * tiger.c (transform): Fix for big endian - - * cipher.c (do_cfb_decrypt): Big endian fix. - -Fri May 22 07:30:39 1998 Werner Koch (wk@isil.d.shuttle.de) - - * md.c (md_get_oid): Add a new one for TIGER. - -Thu May 21 13:24:52 1998 Werner Koch (wk@isil.d.shuttle.de) - - * cipher.c: Add support for a dummy cipher - -Thu May 14 15:40:36 1998 Werner Koch (wk@isil.d.shuttle.de) - - * rmd160.c (transform): fixed sigbus - I should better - add Christian von Roques's new implemenation of rmd160_write. - -Fri May 8 18:07:44 1998 Werner Koch (wk@isil.d.shuttle.de) - - * rand-internal.h, rand-unix.c, rand-w32.c, rand_dummy.c: New - * random.c: Moved system specific functions to rand-****.c - -Fri May 8 14:01:17 1998 Werner Koch (wk@isil.d.shuttle.de) - - * random.c (fast_random_poll): add call to gethrtime. - -Tue May 5 21:28:55 1998 Werner Koch (wk@isil.d.shuttle.de) - - * elgamal.c (elg_generate): choosing x was not correct, could - yield 6 bytes which are not from the random pool, tsss, tsss.. - -Tue May 5 14:09:06 1998 Werner Koch (wk@isil.d.shuttle.de) - - * primegen.c (generate_elg_prime): Add arg mode, changed all - callers and implemented mode 1. - -Mon Apr 27 14:41:58 1998 Werner Koch (wk@isil.d.shuttle.de) - - * cipher.c (cipher_get_keylen): New. - -Sun Apr 26 14:44:52 1998 Werner Koch (wk@isil.d.shuttle.de) - - * tiger.c, tiger.h: New. - -Wed Apr 8 14:57:11 1998 Werner Koch (wk@isil.d.shuttle.de) - - * misc.c (check_pubkey_algo2): New. - -Tue Apr 7 18:46:49 1998 Werner Koch (wk@isil.d.shuttle.de) - - * cipher.c: New - * misc.c (check_cipher_algo): Moved to cipher.c - * cast5.c: Moved many functions to cipher.c - * blowfish.c: Likewise. - -Sat Apr 4 19:52:08 1998 Werner Koch (wk@isil.d.shuttle.de) - - * cast5.c: Implemented and tested. - -Wed Apr 1 16:38:27 1998 Werner Koch (wk@isil.d.shuttle.de) - - * elgamal.c (elg_generate): Faster generation of x in some cases. - -Thu Mar 19 13:54:48 1998 Werner Koch (wk@isil.d.shuttle.de) - - * blowfish.c (blowfish_decode_cfb): changed XOR operation - (blowfish_encode_cfb): Ditto. - -Thu Mar 12 14:04:05 1998 Werner Koch (wk@isil.d.shuttle.de) - - * sha1.c (transform): Rewrote - - * blowfish.c (encrypt): Unrolled for rounds == 16 - (decrypt): Ditto. - -Tue Mar 10 16:32:08 1998 Werner Koch (wk@isil.d.shuttle.de) - - * rmd160.c (transform): Unrolled the loop. - -Tue Mar 10 13:05:14 1998 Werner Koch (wk@isil.d.shuttle.de) - - * random.c (read_pool): Add pool_balance stuff. - (get_random_bits): New. - - * elgamal.c (elg_generate): Now uses get_random_bits to generate x. - - -Tue Mar 10 11:33:51 1998 Werner Koch (wk@isil.d.shuttle.de) - - * md.c (md_digest_length): New. - -Tue Mar 10 11:27:41 1998 Werner Koch (wk@isil.d.shuttle.de) - - * dsa.c (dsa_verify): Works. - -Mon Mar 9 12:59:08 1998 Werner Koch (wk@isil.d.shuttle.de) - - * dsa.c, dsa.h: Removed some unused code. - -Wed Mar 4 10:39:22 1998 Werner Koch (wk@isil.d.shuttle.de) - - * md.c (md_open): Add call to fast_random_poll. - blowfish.c (blowfish_setkey): Ditto. - -Tue Mar 3 13:32:54 1998 Werner Koch (wk@isil.d.shuttle.de) - - * rmd160.c (rmd160_mixblock): New. - * random.c: Restructured to start with a new RNG implementation. - * random.h: New. - -Mon Mar 2 19:21:46 1998 Werner Koch (wk@isil.d.shuttle.de) - - * gost.c, gost.h: Removed because they did only conatin trash. - -Sun Mar 1 16:42:29 1998 Werner Koch (wk@isil.d.shuttle.de) - - * random.c (fill_buffer): removed error message if n == -1. - -Fri Feb 27 16:39:34 1998 Werner Koch (wk@isil.d.shuttle.de) - - * md.c (md_enable): No init if called twice. - -Thu Feb 26 07:57:02 1998 Werner Koch (wk@isil.d.shuttle.de) - - * primegen.c (generate_elg_prime): Changed the progress printing. - (gen_prime): Ditto. - -Tue Feb 24 12:28:42 1998 Werner Koch (wk@isil.d.shuttle.de) - - * md5.c, md.5 : Replaced by a modified version of md5.c from - GNU textutils 1.22. - -Wed Feb 18 14:08:30 1998 Werner Koch (wk@isil.d.shuttle.de) - - * md.c, md.h : New debugging support - -Mon Feb 16 10:08:47 1998 Werner Koch (wk@isil.d.shuttle.de) - - * misc.c (cipher_algo_to_string): New - (pubkey_algo_to_string): New. - (digest_algo_to_string): New. - - - - Copyright 1998, 1999, 2000, 2001 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 -#include -#include -#include -#include -#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 -#include -#include -#include -#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 -#include -#include -#include -#include -#include -#include "util.h" -#include "errors.h" -#include "cipher.h" -#include "algorithms.h" - -/* We have support for a DUMMY encryption cipher which comes handy to - debug MDCs and similar things. Because this is a bit dangerous it - is not enabled. */ -/*#define ALLOW_DUMMY 1 */ - -#define MAX_BLOCKSIZE 16 -#define TABLE_SIZE 14 - -struct cipher_table_s { - const char *name; - int algo; - size_t blocksize; - size_t keylen; - size_t contextsize; /* allocate this amount of context */ - int (*setkey)( void *c, 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 , 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 -#include -#include /* 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<> 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 -#include -#include -#include -#include -#include "util.h" -#include "mpi.h" -#include "cipher.h" -#include "dsa.h" - -typedef struct { - MPI p; /* prime */ - MPI q; /* group order */ - MPI g; /* group generator */ - MPI y; /* g^x mod p */ -} DSA_public_key; - - -typedef struct { - MPI p; /* prime */ - MPI q; /* group order */ - MPI g; /* group generator */ - MPI y; /* g^x mod p */ - MPI x; /* secret exponent */ -} DSA_secret_key; - - -static MPI gen_k( MPI q ); -static void test_keys( DSA_secret_key *sk, unsigned qbits ); -static int check_secret_key( DSA_secret_key *sk ); -static void generate( DSA_secret_key *sk, unsigned nbits, 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 -#include -#include -#include -#include -#include "util.h" -#include "cipher.h" -#include "algorithms.h" - - -typedef struct ext_list { - struct ext_list *next; - char name[1]; -} *EXTLIST; - -static EXTLIST extensions; - -/* This is actually not used anymore but we keep a list of already - * set extensions modules here. - * - * Here is the ancient comment: - * Register an extension module. The last registered module will - * be loaded first. A name may have a list of classes - * appended; e.g: - * mymodule.so(1:17,3:20,3:109) - * means that this module provides digest algorithm 17 and public key - * algorithms 20 and 109. This is only a hint but if it is there the - * loader may decide to only load a module which claims to have a - * requested algorithm. - * - * mainpgm is the path to the program which wants to load a module - * it is only used in some environments. - */ -void -register_cipher_extension( const char *mainpgm, const char *fname ) -{ - EXTLIST r, el, 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 -#include -#include -#include -#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 -#include -#include -#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 -#include -#include -#include -#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 -#include -#include -#include -#include -#ifdef HAVE_DL_DLOPEN - #include -#endif -#ifdef __MINGW32__ - #include -#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 -#include -#include -#include -#include -#include -#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 , 1995. */ -/* Heavily modified for GnuPG by */ - -/* Test values: - * "" D4 1D 8C D9 8F 00 B2 04 E9 80 09 98 EC F8 42 7E - * "a" 0C C1 75 B9 C0 F1 B6 A8 31 C3 99 E2 69 77 26 61 - * "abc 90 01 50 98 3C D2 4F B0 D6 96 3F 7D 28 E1 7F 72 - * "message digest" F9 6B 69 7D 7C B7 93 8D 52 5A 2F 31 AA F1 61 D0 - */ - -#include -#include -#include -#include -#include -#include "util.h" -#include "memory.h" -#include "algorithms.h" - -#include "bithelp.h" - - -typedef struct { - u32 A,B,C,D; /* chaining variables */ - u32 nblocks; - byte buf[64]; - int count; -} MD5_CONTEXT; - - -static void -md5_init( MD5_CONTEXT *ctx ) -{ - ctx->A = 0x67452301; - ctx->B = 0xefcdab89; - ctx->C = 0x98badcfe; - ctx->D = 0x10325476; - - ctx->nblocks = 0; - ctx->count = 0; -} - - - - -/* These are the four functions used in the four steps of the MD5 algorithm - and defined in the RFC 1321. The first function is a little bit optimized - (as found in Colin Plumbs public domain implementation). */ -/* #define FF(b, c, d) ((b & c) | (~b & d)) */ -#define FF(b, c, d) (d ^ (b & (c ^ d))) -#define FG(b, c, d) FF (d, b, c) -#define FH(b, c, d) (b ^ c ^ d) -#define FI(b, c, d) (c ^ (b | ~d)) - -static void -burn_stack (int bytes) -{ - char buf[128]; - - 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 -#include -#include -#include -#include -#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 -#include -#include -#include -#include -#include -#include "util.h" -#include "errors.h" -#include "mpi.h" -#include "cipher.h" -#include "elgamal.h" -#include "dsa.h" -#include "rsa.h" - -#define TABLE_SIZE 10 - -struct pubkey_table_s { - const char *name; - int algo; - int npkey; - int nskey; - int nenc; - int nsig; - int use; - int (*generate)( int algo, unsigned nbits, MPI *skey, MPI **retfactors ); - int (*check_secret_key)( int algo, MPI *skey ); - int (*encrypt)( int algo, MPI *resarr, MPI data, MPI *pkey ); - int (*decrypt)( int algo, MPI *result, MPI *data, MPI *skey ); - int (*sign)( int algo, MPI *resarr, MPI data, MPI *skey ); - int (*verify)( int algo, MPI hash, MPI *data, MPI *pkey, - 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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef HAVE_GETHRTIME - #include -#endif -#ifdef HAVE_GETTIMEOFDAY - #include -#endif -#ifdef HAVE_GETRUSAGE - #include -#endif -#ifdef __MINGW32__ - #include -#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 -#include -#include -#include /* for memcmp() */ - -#include "types.h" /* for byte and u32 typedefs */ -#include "util.h" -#include "errors.h" -#include "algorithms.h" - -#define MAXKC (256/32) -#define MAXROUNDS 14 - - -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 -#include -#include -#include -#include -#include "util.h" -#include "memory.h" -#include "rmd.h" -#include "cipher.h" /* for rmd160_hash_buffer */ -#include "algorithms.h" - -#include "bithelp.h" - -/********************************* - * RIPEMD-160 is not patented, see (as of 25.10.97) - * http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html - * Note that the code uses Little Endian byteorder, which is good for - * 386 etc, but we must add some conversion when used on a big endian box. - * - * - * Pseudo-code for RIPEMD-160 - * - * RIPEMD-160 is an iterative hash function that operates on 32-bit words. - * The round function takes as input a 5-word chaining variable and a 16-word - * message block and maps this to a new chaining variable. All operations are - * defined on 32-bit words. Padding is identical to that of MD4. - * - * - * RIPEMD-160: definitions - * - * - * nonlinear functions at bit level: exor, mux, -, mux, - - * - * f(j, x, y, z) = x XOR y XOR z (0 <= j <= 15) - * f(j, x, y, z) = (x AND y) OR (NOT(x) AND z) (16 <= j <= 31) - * f(j, x, y, z) = (x OR NOT(y)) XOR z (32 <= j <= 47) - * f(j, x, y, z) = (x AND z) OR (y AND NOT(z)) (48 <= j <= 63) - * f(j, x, y, z) = x XOR (y OR NOT(z)) (64 <= j <= 79) - * - * - * added constants (hexadecimal) - * - * K(j) = 0x00000000 (0 <= j <= 15) - * K(j) = 0x5A827999 (16 <= j <= 31) int(2**30 x sqrt(2)) - * K(j) = 0x6ED9EBA1 (32 <= j <= 47) int(2**30 x sqrt(3)) - * K(j) = 0x8F1BBCDC (48 <= j <= 63) int(2**30 x sqrt(5)) - * K(j) = 0xA953FD4E (64 <= j <= 79) int(2**30 x sqrt(7)) - * K'(j) = 0x50A28BE6 (0 <= j <= 15) int(2**30 x cbrt(2)) - * K'(j) = 0x5C4DD124 (16 <= j <= 31) int(2**30 x cbrt(3)) - * K'(j) = 0x6D703EF3 (32 <= j <= 47) int(2**30 x cbrt(5)) - * K'(j) = 0x7A6D76E9 (48 <= j <= 63) int(2**30 x cbrt(7)) - * K'(j) = 0x00000000 (64 <= j <= 79) - * - * - * selection of message word - * - * r(j) = j (0 <= j <= 15) - * r(16..31) = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8 - * r(32..47) = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12 - * r(48..63) = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2 - * r(64..79) = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 - * r0(0..15) = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12 - * r0(16..31)= 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2 - * r0(32..47)= 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13 - * r0(48..63)= 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14 - * r0(64..79)= 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 - * - * - * amount for rotate left (rol) - * - * s(0..15) = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8 - * s(16..31) = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12 - * s(32..47) = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5 - * s(48..63) = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12 - * s(64..79) = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 - * s'(0..15) = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6 - * s'(16..31)= 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11 - * s'(32..47)= 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5 - * s'(48..63)= 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8 - * s'(64..79)= 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 - * - * - * initial value (hexadecimal) - * - * h0 = 0x67452301; h1 = 0xEFCDAB89; h2 = 0x98BADCFE; h3 = 0x10325476; - * h4 = 0xC3D2E1F0; - * - * - * RIPEMD-160: pseudo-code - * - * It is assumed that the message after padding consists of t 16-word blocks - * that will be denoted with X[i][j], with 0 <= i <= t-1 and 0 <= j <= 15. - * The symbol [+] denotes addition modulo 2**32 and rol_s denotes cyclic left - * shift (rotate) over s positions. - * - * - * for i := 0 to t-1 { - * A := h0; B := h1; C := h2; D = h3; E = h4; - * A' := h0; B' := h1; C' := h2; D' = h3; E' = h4; - * for j := 0 to 79 { - * T := rol_s(j)(A [+] f(j, B, C, D) [+] X[i][r(j)] [+] K(j)) [+] E; - * A := E; E := D; D := rol_10(C); C := B; B := T; - * T := rol_s'(j)(A' [+] f(79-j, B', C', D') [+] X[i][r'(j)] - [+] K'(j)) [+] E'; - * A' := E'; E' := D'; D' := rol_10(C'); C' := B'; B' := T; - * } - * T := h1 [+] C [+] D'; h1 := h2 [+] D [+] E'; h2 := h3 [+] E [+] A'; - * h3 := h4 [+] A [+] B'; h4 := h0 [+] B [+] C'; h0 := T; - * } - */ - -/* Some examples: - * "" 9c1185a5c5e9fc54612808977ee8f548b2258d31 - * "a" 0bdc9d2d256b3ee9daae347be6f4dc835a467ffe - * "abc" 8eb208f7e05d987a9b044a8e98c6b087f15a0bfc - * "message digest" 5d0689ef49d2fae572b881b123a85ffa21595f36 - * "a...z" f71c27109c692c1b56bbdceb5b9d2865b3708dbc - * "abcdbcde...nopq" 12a053384a9c0c88e405a06c27dcf49ada62eb2b - * "A...Za...z0...9" b0e20b6e3116640286ed3a87a5713079b21f5189 - * 8 times "1234567890" 9b752e45573d4b39f4dbd3323cab82bf63326bfb - * 1 million times "a" 52783243c1697bdbe16d37f97f68f08325dc1528 - */ - -static void -burn_stack (int bytes) -{ - char buf[150]; - - 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 -#include -#include -#include - -#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 - -#ifdef USE_RNDEGD - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "types.h" -#include "util.h" -#include "ttyio.h" -#include "algorithms.h" -#include "cipher.h" -#include "i18n.h" - - -#ifndef offsetof -#define offsetof(type, member) ((size_t) &((type *)0)->member) -#endif - -static int egd_socket = -1; - -static int -do_write( int fd, void *buf, size_t nbytes ) -{ - size_t nleft = nbytes; - int nwritten; - - while( nleft > 0 ) { - nwritten = write( fd, buf, nleft); - if( nwritten < 0 ) { - if( errno == EINTR ) - continue; - return -1; - } - nleft -= nwritten; - buf = (char*)buf + nwritten; - } - return 0; -} - -static int -do_read( int fd, void *buf, size_t nbytes ) -{ - int n, nread = 0; - - while (nbytes) - { - do { - n = read(fd, (char*)buf + nread, nbytes ); - } while( n == -1 && errno == EINTR ); - if( n == -1 ) - return nread? nread:-1; - else if( n == 0 ) { - /* EGD probably died. */ - errno = ECONNRESET; - return -1; - } - nread += n; - nbytes -= n; - } - return nread; -} - -/* Connect to the EGD and return the file descriptor. Return -1 on - error. With NOFAIL set to true, silently fail and return the - error, otherwise print an error message and die. */ -int -rndegd_connect_socket (int nofail) -{ - int fd; - const char *bname = NULL; - char *name; - struct sockaddr_un addr; - int addr_len; - - if (egd_socket != -1) - { - close (egd_socket); - egd_socket = -1; - } - -#ifdef EGD_SOCKET_NAME - bname = EGD_SOCKET_NAME; -#endif - if ( !bname || !*bname ) - bname = "=entropy"; - - if ( *bname == '=' && bname[1] ) - name = make_filename( g10_opt_homedir, bname+1 , NULL ); - else - name = make_filename( bname , NULL ); - - if ( strlen(name)+1 >= sizeof addr.sun_path ) - g10_log_fatal ("EGD socketname is too long\n"); - - memset( &addr, 0, sizeof addr ); - addr.sun_family = AF_UNIX; - strcpy( addr.sun_path, name ); - addr_len = (offsetof( struct sockaddr_un, sun_path ) - + strlen( addr.sun_path )); - - fd = socket(AF_UNIX, SOCK_STREAM, 0); - if (fd == -1 && !nofail) - g10_log_fatal("can't create unix domain socket: %s\n", - strerror(errno) ); - else if (connect (fd, (struct sockaddr*)&addr, addr_len) == -1) - { - if (!nofail) - g10_log_fatal("can't connect to `%s': %s\n", - name, strerror(errno) ); - close (fd); - fd = -1; - } - 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 - -#ifdef USE_RNDLINUX - -#include -#include -#include -#include -#include -#include -#include -#ifdef HAVE_GETTIMEOFDAY - #include -#endif -#include -#include -#include -#if 0 - #include - #include - #include -#endif -#include "types.h" -#include "util.h" -#include "ttyio.h" -#include "algorithms.h" - -#include "i18n.h" - -static int open_device( const char *name, int minor ); - - -#if 0 -#ifdef HAVE_DEV_RANDOM_IOCTL -static ulong -get_entropy_count( int fd ) -{ - ulong count; - - if( ioctl( fd, RNDGETENTCNT, &count ) == -1 ) - g10_log_fatal("ioctl(RNDGETENTCNT) failed: %s\n", strerror(errno) ); - return count; -} -#endif -#endif - -/**************** - * Used to open the /dev/random devices (Linux, xBSD, Solaris (if it exists), ...) - */ -static int -open_device( const char *name, int minor ) -{ - int fd; - struct stat sb; - - fd = open( name, O_RDONLY ); - if( fd == -1 ) - g10_log_fatal("can't open %s: %s\n", name, strerror(errno) ); - if( fstat( fd, &sb ) ) - g10_log_fatal("stat() off %s failed: %s\n", name, strerror(errno) ); - /* Don't check device type for better portability */ - /* if( (!S_ISCHR(sb.st_mode)) && (!S_ISFIFO(sb.st_mode)) ) - g10_log_fatal("invalid random device!\n" ); */ - return fd; -} - - -/**************** - * Note: Using a level of 0 should never block and better add nothing - * to the pool. This is easy to accomplish with /dev/urandom. - */ -int -rndlinux_gather_random( void (*add)(const void*, size_t, int), int requester, - size_t length, int level ) -{ - static int fd_urandom = -1; - static int fd_random = -1; - int fd; - int n; - int warn=0; - byte buffer[768]; - - if( level >= 2 ) { - if( fd_random == -1 ) - fd_random = open_device( NAME_OF_DEV_RANDOM, 8 ); - fd = fd_random; - } - else { - /* this will also be used for 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 - -#ifdef USE_RNDRISCOS - -#include -#include -#include -#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, 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 - -#ifdef USE_RNDUNIX - -#include -#include -#include -#include - -/* OS-specific includes */ - -#ifdef __osf__ - /* Somewhere in the morass of system-specific cruft which OSF/1 pulls in - * via the following includes are various endianness defines, so we - * undefine the cryptlib ones, which aren't really needed for this module - * anyway */ -#undef BIG_ENDIAN -#undef LITTLE_ENDIAN -#endif /* __osf__ */ - -#include -#include -#include -#ifndef __QNX__ -#include -#include -#endif /* __QNX__ */ -#include /* SCO and SunOS need this before resource.h */ -#ifndef __QNX__ -#include -#endif /* __QNX__ */ -#if defined( _AIX ) || defined( __QNX__ ) -#include -#endif /* _AIX || __QNX__ */ -#ifndef __QNX__ -#include -#include -#include -#endif /* __QNX__ */ -#include -#include /* Verschiedene komische Typen */ -#if defined( __hpux ) && ( OS_VERSION == 9 ) -#include -#endif /* __hpux 9.x, after that it's in unistd.h */ -#include -/* #include */ -#ifdef __QNX__ -#include -#include -#endif /* __QNX__ */ -#include - -#include "types.h" /* for byte and u32 typedefs */ -#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, 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 - -#ifdef USE_RNDW32 - -#include -#include -#include -#include -#include - -#include -#ifdef __CYGWIN32__ -# include -#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 -#include -#include -#include -#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 -#include -#include -#include -#include -#include "util.h" -#include "memory.h" -#include "algorithms.h" -#include "bithelp.h" - - -typedef struct { - u32 h0,h1,h2,h3,h4; - u32 nblocks; - byte buf[64]; - int count; -} SHA1_CONTEXT; - -static void -burn_stack (int bytes) -{ - char buf[128]; - - 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 -#include -#include -#include "util.h" -#include "types.h" - -/* Note: 2 is not included because it can be tested more easily - * by looking at bit 0. The last entry in this list is marked by a zero - */ -ushort -small_prime_numbers[] = { - 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, - 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, - 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, - 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, - 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, - 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, - 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, - 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, - 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, - 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, - 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, - 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, - 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, - 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, - 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, - 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, - 991, 997, 1009, 1013, 1019, 1021, 1031, 1033, - 1039, 1049, 1051, 1061, 1063, 1069, 1087, 1091, - 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, - 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213, - 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277, - 1279, 1283, 1289, 1291, 1297, 1301, 1303, 1307, - 1319, 1321, 1327, 1361, 1367, 1373, 1381, 1399, - 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451, - 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, - 1499, 1511, 1523, 1531, 1543, 1549, 1553, 1559, - 1567, 1571, 1579, 1583, 1597, 1601, 1607, 1609, - 1613, 1619, 1621, 1627, 1637, 1657, 1663, 1667, - 1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733, - 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789, - 1801, 1811, 1823, 1831, 1847, 1861, 1867, 1871, - 1873, 1877, 1879, 1889, 1901, 1907, 1913, 1931, - 1933, 1949, 1951, 1973, 1979, 1987, 1993, 1997, - 1999, 2003, 2011, 2017, 2027, 2029, 2039, 2053, - 2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111, - 2113, 2129, 2131, 2137, 2141, 2143, 2153, 2161, - 2179, 2203, 2207, 2213, 2221, 2237, 2239, 2243, - 2251, 2267, 2269, 2273, 2281, 2287, 2293, 2297, - 2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357, - 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411, - 2417, 2423, 2437, 2441, 2447, 2459, 2467, 2473, - 2477, 2503, 2521, 2531, 2539, 2543, 2549, 2551, - 2557, 2579, 2591, 2593, 2609, 2617, 2621, 2633, - 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687, - 2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729, - 2731, 2741, 2749, 2753, 2767, 2777, 2789, 2791, - 2797, 2801, 2803, 2819, 2833, 2837, 2843, 2851, - 2857, 2861, 2879, 2887, 2897, 2903, 2909, 2917, - 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999, - 3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061, - 3067, 3079, 3083, 3089, 3109, 3119, 3121, 3137, - 3163, 3167, 3169, 3181, 3187, 3191, 3203, 3209, - 3217, 3221, 3229, 3251, 3253, 3257, 3259, 3271, - 3299, 3301, 3307, 3313, 3319, 3323, 3329, 3331, - 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391, - 3407, 3413, 3433, 3449, 3457, 3461, 3463, 3467, - 3469, 3491, 3499, 3511, 3517, 3527, 3529, 3533, - 3539, 3541, 3547, 3557, 3559, 3571, 3581, 3583, - 3593, 3607, 3613, 3617, 3623, 3631, 3637, 3643, - 3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709, - 3719, 3727, 3733, 3739, 3761, 3767, 3769, 3779, - 3793, 3797, 3803, 3821, 3823, 3833, 3847, 3851, - 3853, 3863, 3877, 3881, 3889, 3907, 3911, 3917, - 3919, 3923, 3929, 3931, 3943, 3947, 3967, 3989, - 4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049, - 4051, 4057, 4073, 4079, 4091, 4093, 4099, 4111, - 4127, 4129, 4133, 4139, 4153, 4157, 4159, 4177, - 4201, 4211, 4217, 4219, 4229, 4231, 4241, 4243, - 4253, 4259, 4261, 4271, 4273, 4283, 4289, 4297, - 4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391, - 4397, 4409, 4421, 4423, 4441, 4447, 4451, 4457, - 4463, 4481, 4483, 4493, 4507, 4513, 4517, 4519, - 4523, 4547, 4549, 4561, 4567, 4583, 4591, 4597, - 4603, 4621, 4637, 4639, 4643, 4649, 4651, 4657, - 4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729, - 4733, 4751, 4759, 4783, 4787, 4789, 4793, 4799, - 4801, 4813, 4817, 4831, 4861, 4871, 4877, 4889, - 4903, 4909, 4919, 4931, 4933, 4937, 4943, 4951, - 4957, 4967, 4969, 4973, 4987, 4993, 4999, - 0 -}; - - 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 -#include -#include -#include -#include -#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 , July 26, 1998 - * 256-bit key length added March 20, 1999 - * Some modifications to reduce the text size by Werner Koch, April, 1998 - * - * The original author has disclaimed all copyright interest in this - * code and thus putting it in the public domain. - * - * This code is a "clean room" implementation, written from the paper - * _Twofish: A 128-Bit Block Cipher_ by Bruce Schneier, John Kelsey, - * Doug Whiting, David Wagner, Chris Hall, and Niels Ferguson, available - * through http://www.counterpane.com/twofish.html - * - * For background information on multiplication in finite fields, used for - * the matrix operations in the key schedule, see the book _Contemporary - * Abstract Algebra_ by Joseph A. Gallian, especially chapter 22 in the - * Third Edition. - * - * Only the 128- and 256-bit key sizes are supported. This code is intended - * for GNU C on a 32-bit system, but it should work almost anywhere. Loops - * are unrolled, precomputation tables are used, etc., for maximum speed at - * some cost in memory consumption. */ - -#include -#include -#include -#include /* for memcmp() */ - -#include "types.h" /* for byte and u32 typedefs */ -#include "util.h" -#include "errors.h" -#include "algorithms.h" - -/* Prototype for the self-test function. */ -static const char *selftest(void); - -/* Structure for an expanded Twofish key. s contains the key-dependent - * S-boxes composed with the MDS matrix; w contains the eight "whitening" - * subkeys, K[0] through K[7]. k holds the remaining, "round" subkeys. Note - * that k[i] corresponds to what the Twofish paper calls K[i+8]. */ -typedef struct { - u32 s[4][256], w[8], k[32]; -} TWOFISH_context; - -/* These two tables are the q0 and q1 permutations, exactly as described in - * the Twofish paper. */ - -static const byte q0[256] = { - 0xA9, 0x67, 0xB3, 0xE8, 0x04, 0xFD, 0xA3, 0x76, 0x9A, 0x92, 0x80, 0x78, - 0xE4, 0xDD, 0xD1, 0x38, 0x0D, 0xC6, 0x35, 0x98, 0x18, 0xF7, 0xEC, 0x6C, - 0x43, 0x75, 0x37, 0x26, 0xFA, 0x13, 0x94, 0x48, 0xF2, 0xD0, 0x8B, 0x30, - 0x84, 0x54, 0xDF, 0x23, 0x19, 0x5B, 0x3D, 0x59, 0xF3, 0xAE, 0xA2, 0x82, - 0x63, 0x01, 0x83, 0x2E, 0xD9, 0x51, 0x9B, 0x7C, 0xA6, 0xEB, 0xA5, 0xBE, - 0x16, 0x0C, 0xE3, 0x61, 0xC0, 0x8C, 0x3A, 0xF5, 0x73, 0x2C, 0x25, 0x0B, - 0xBB, 0x4E, 0x89, 0x6B, 0x53, 0x6A, 0xB4, 0xF1, 0xE1, 0xE6, 0xBD, 0x45, - 0xE2, 0xF4, 0xB6, 0x66, 0xCC, 0x95, 0x03, 0x56, 0xD4, 0x1C, 0x1E, 0xD7, - 0xFB, 0xC3, 0x8E, 0xB5, 0xE9, 0xCF, 0xBF, 0xBA, 0xEA, 0x77, 0x39, 0xAF, - 0x33, 0xC9, 0x62, 0x71, 0x81, 0x79, 0x09, 0xAD, 0x24, 0xCD, 0xF9, 0xD8, - 0xE5, 0xC5, 0xB9, 0x4D, 0x44, 0x08, 0x86, 0xE7, 0xA1, 0x1D, 0xAA, 0xED, - 0x06, 0x70, 0xB2, 0xD2, 0x41, 0x7B, 0xA0, 0x11, 0x31, 0xC2, 0x27, 0x90, - 0x20, 0xF6, 0x60, 0xFF, 0x96, 0x5C, 0xB1, 0xAB, 0x9E, 0x9C, 0x52, 0x1B, - 0x5F, 0x93, 0x0A, 0xEF, 0x91, 0x85, 0x49, 0xEE, 0x2D, 0x4F, 0x8F, 0x3B, - 0x47, 0x87, 0x6D, 0x46, 0xD6, 0x3E, 0x69, 0x64, 0x2A, 0xCE, 0xCB, 0x2F, - 0xFC, 0x97, 0x05, 0x7A, 0xAC, 0x7F, 0xD5, 0x1A, 0x4B, 0x0E, 0xA7, 0x5A, - 0x28, 0x14, 0x3F, 0x29, 0x88, 0x3C, 0x4C, 0x02, 0xB8, 0xDA, 0xB0, 0x17, - 0x55, 0x1F, 0x8A, 0x7D, 0x57, 0xC7, 0x8D, 0x74, 0xB7, 0xC4, 0x9F, 0x72, - 0x7E, 0x15, 0x22, 0x12, 0x58, 0x07, 0x99, 0x34, 0x6E, 0x50, 0xDE, 0x68, - 0x65, 0xBC, 0xDB, 0xF8, 0xC8, 0xA8, 0x2B, 0x40, 0xDC, 0xFE, 0x32, 0xA4, - 0xCA, 0x10, 0x21, 0xF0, 0xD3, 0x5D, 0x0F, 0x00, 0x6F, 0x9D, 0x36, 0x42, - 0x4A, 0x5E, 0xC1, 0xE0 -}; - -static const byte q1[256] = { - 0x75, 0xF3, 0xC6, 0xF4, 0xDB, 0x7B, 0xFB, 0xC8, 0x4A, 0xD3, 0xE6, 0x6B, - 0x45, 0x7D, 0xE8, 0x4B, 0xD6, 0x32, 0xD8, 0xFD, 0x37, 0x71, 0xF1, 0xE1, - 0x30, 0x0F, 0xF8, 0x1B, 0x87, 0xFA, 0x06, 0x3F, 0x5E, 0xBA, 0xAE, 0x5B, - 0x8A, 0x00, 0xBC, 0x9D, 0x6D, 0xC1, 0xB1, 0x0E, 0x80, 0x5D, 0xD2, 0xD5, - 0xA0, 0x84, 0x07, 0x14, 0xB5, 0x90, 0x2C, 0xA3, 0xB2, 0x73, 0x4C, 0x54, - 0x92, 0x74, 0x36, 0x51, 0x38, 0xB0, 0xBD, 0x5A, 0xFC, 0x60, 0x62, 0x96, - 0x6C, 0x42, 0xF7, 0x10, 0x7C, 0x28, 0x27, 0x8C, 0x13, 0x95, 0x9C, 0xC7, - 0x24, 0x46, 0x3B, 0x70, 0xCA, 0xE3, 0x85, 0xCB, 0x11, 0xD0, 0x93, 0xB8, - 0xA6, 0x83, 0x20, 0xFF, 0x9F, 0x77, 0xC3, 0xCC, 0x03, 0x6F, 0x08, 0xBF, - 0x40, 0xE7, 0x2B, 0xE2, 0x79, 0x0C, 0xAA, 0x82, 0x41, 0x3A, 0xEA, 0xB9, - 0xE4, 0x9A, 0xA4, 0x97, 0x7E, 0xDA, 0x7A, 0x17, 0x66, 0x94, 0xA1, 0x1D, - 0x3D, 0xF0, 0xDE, 0xB3, 0x0B, 0x72, 0xA7, 0x1C, 0xEF, 0xD1, 0x53, 0x3E, - 0x8F, 0x33, 0x26, 0x5F, 0xEC, 0x76, 0x2A, 0x49, 0x81, 0x88, 0xEE, 0x21, - 0xC4, 0x1A, 0xEB, 0xD9, 0xC5, 0x39, 0x99, 0xCD, 0xAD, 0x31, 0x8B, 0x01, - 0x18, 0x23, 0xDD, 0x1F, 0x4E, 0x2D, 0xF9, 0x48, 0x4F, 0xF2, 0x65, 0x8E, - 0x78, 0x5C, 0x58, 0x19, 0x8D, 0xE5, 0x98, 0x57, 0x67, 0x7F, 0x05, 0x64, - 0xAF, 0x63, 0xB6, 0xFE, 0xF5, 0xB7, 0x3C, 0xA5, 0xCE, 0xE9, 0x68, 0x44, - 0xE0, 0x4D, 0x43, 0x69, 0x29, 0x2E, 0xAC, 0x15, 0x59, 0xA8, 0x0A, 0x9E, - 0x6E, 0x47, 0xDF, 0x34, 0x35, 0x6A, 0xCF, 0xDC, 0x22, 0xC9, 0xC0, 0x9B, - 0x89, 0xD4, 0xED, 0xAB, 0x12, 0xA2, 0x0D, 0x52, 0xBB, 0x02, 0x2F, 0xA9, - 0xD7, 0x61, 0x1E, 0xB4, 0x50, 0x04, 0xF6, 0xC2, 0x16, 0x25, 0x86, 0x56, - 0x55, 0x09, 0xBE, 0x91 -}; - -/* These MDS tables are actually tables of MDS composed with q0 and q1, - * because it is only ever used that way and we can save some time by - * precomputing. Of course the main saving comes from precomputing the - * GF(2^8) multiplication involved in the MDS matrix multiply; by looking - * things up in these tables we reduce the matrix multiply to four lookups - * and three XORs. Semi-formally, the definition of these tables is: - * mds[0][i] = MDS (q1[i] 0 0 0)^T mds[1][i] = MDS (0 q0[i] 0 0)^T - * mds[2][i] = MDS (0 0 q1[i] 0)^T mds[3][i] = MDS (0 0 0 q0[i])^T - * where ^T means "transpose", the matrix multiply is performed in GF(2^8) - * represented as GF(2)[x]/v(x) where v(x)=x^8+x^6+x^5+x^3+1 as described - * by Schneier et al, and I'm casually glossing over the byte/word - * conversion issues. */ - -static const u32 mds[4][256] = { - {0xBCBC3275, 0xECEC21F3, 0x202043C6, 0xB3B3C9F4, 0xDADA03DB, 0x02028B7B, - 0xE2E22BFB, 0x9E9EFAC8, 0xC9C9EC4A, 0xD4D409D3, 0x18186BE6, 0x1E1E9F6B, - 0x98980E45, 0xB2B2387D, 0xA6A6D2E8, 0x2626B74B, 0x3C3C57D6, 0x93938A32, - 0x8282EED8, 0x525298FD, 0x7B7BD437, 0xBBBB3771, 0x5B5B97F1, 0x474783E1, - 0x24243C30, 0x5151E20F, 0xBABAC6F8, 0x4A4AF31B, 0xBFBF4887, 0x0D0D70FA, - 0xB0B0B306, 0x7575DE3F, 0xD2D2FD5E, 0x7D7D20BA, 0x666631AE, 0x3A3AA35B, - 0x59591C8A, 0x00000000, 0xCDCD93BC, 0x1A1AE09D, 0xAEAE2C6D, 0x7F7FABC1, - 0x2B2BC7B1, 0xBEBEB90E, 0xE0E0A080, 0x8A8A105D, 0x3B3B52D2, 0x6464BAD5, - 0xD8D888A0, 0xE7E7A584, 0x5F5FE807, 0x1B1B1114, 0x2C2CC2B5, 0xFCFCB490, - 0x3131272C, 0x808065A3, 0x73732AB2, 0x0C0C8173, 0x79795F4C, 0x6B6B4154, - 0x4B4B0292, 0x53536974, 0x94948F36, 0x83831F51, 0x2A2A3638, 0xC4C49CB0, - 0x2222C8BD, 0xD5D5F85A, 0xBDBDC3FC, 0x48487860, 0xFFFFCE62, 0x4C4C0796, - 0x4141776C, 0xC7C7E642, 0xEBEB24F7, 0x1C1C1410, 0x5D5D637C, 0x36362228, - 0x6767C027, 0xE9E9AF8C, 0x4444F913, 0x1414EA95, 0xF5F5BB9C, 0xCFCF18C7, - 0x3F3F2D24, 0xC0C0E346, 0x7272DB3B, 0x54546C70, 0x29294CCA, 0xF0F035E3, - 0x0808FE85, 0xC6C617CB, 0xF3F34F11, 0x8C8CE4D0, 0xA4A45993, 0xCACA96B8, - 0x68683BA6, 0xB8B84D83, 0x38382820, 0xE5E52EFF, 0xADAD569F, 0x0B0B8477, - 0xC8C81DC3, 0x9999FFCC, 0x5858ED03, 0x19199A6F, 0x0E0E0A08, 0x95957EBF, - 0x70705040, 0xF7F730E7, 0x6E6ECF2B, 0x1F1F6EE2, 0xB5B53D79, 0x09090F0C, - 0x616134AA, 0x57571682, 0x9F9F0B41, 0x9D9D803A, 0x111164EA, 0x2525CDB9, - 0xAFAFDDE4, 0x4545089A, 0xDFDF8DA4, 0xA3A35C97, 0xEAEAD57E, 0x353558DA, - 0xEDEDD07A, 0x4343FC17, 0xF8F8CB66, 0xFBFBB194, 0x3737D3A1, 0xFAFA401D, - 0xC2C2683D, 0xB4B4CCF0, 0x32325DDE, 0x9C9C71B3, 0x5656E70B, 0xE3E3DA72, - 0x878760A7, 0x15151B1C, 0xF9F93AEF, 0x6363BFD1, 0x3434A953, 0x9A9A853E, - 0xB1B1428F, 0x7C7CD133, 0x88889B26, 0x3D3DA65F, 0xA1A1D7EC, 0xE4E4DF76, - 0x8181942A, 0x91910149, 0x0F0FFB81, 0xEEEEAA88, 0x161661EE, 0xD7D77321, - 0x9797F5C4, 0xA5A5A81A, 0xFEFE3FEB, 0x6D6DB5D9, 0x7878AEC5, 0xC5C56D39, - 0x1D1DE599, 0x7676A4CD, 0x3E3EDCAD, 0xCBCB6731, 0xB6B6478B, 0xEFEF5B01, - 0x12121E18, 0x6060C523, 0x6A6AB0DD, 0x4D4DF61F, 0xCECEE94E, 0xDEDE7C2D, - 0x55559DF9, 0x7E7E5A48, 0x2121B24F, 0x03037AF2, 0xA0A02665, 0x5E5E198E, - 0x5A5A6678, 0x65654B5C, 0x62624E58, 0xFDFD4519, 0x0606F48D, 0x404086E5, - 0xF2F2BE98, 0x3333AC57, 0x17179067, 0x05058E7F, 0xE8E85E05, 0x4F4F7D64, - 0x89896AAF, 0x10109563, 0x74742FB6, 0x0A0A75FE, 0x5C5C92F5, 0x9B9B74B7, - 0x2D2D333C, 0x3030D6A5, 0x2E2E49CE, 0x494989E9, 0x46467268, 0x77775544, - 0xA8A8D8E0, 0x9696044D, 0x2828BD43, 0xA9A92969, 0xD9D97929, 0x8686912E, - 0xD1D187AC, 0xF4F44A15, 0x8D8D1559, 0xD6D682A8, 0xB9B9BC0A, 0x42420D9E, - 0xF6F6C16E, 0x2F2FB847, 0xDDDD06DF, 0x23233934, 0xCCCC6235, 0xF1F1C46A, - 0xC1C112CF, 0x8585EBDC, 0x8F8F9E22, 0x7171A1C9, 0x9090F0C0, 0xAAAA539B, - 0x0101F189, 0x8B8BE1D4, 0x4E4E8CED, 0x8E8E6FAB, 0xABABA212, 0x6F6F3EA2, - 0xE6E6540D, 0xDBDBF252, 0x92927BBB, 0xB7B7B602, 0x6969CA2F, 0x3939D9A9, - 0xD3D30CD7, 0xA7A72361, 0xA2A2AD1E, 0xC3C399B4, 0x6C6C4450, 0x07070504, - 0x04047FF6, 0x272746C2, 0xACACA716, 0xD0D07625, 0x50501386, 0xDCDCF756, - 0x84841A55, 0xE1E15109, 0x7A7A25BE, 0x1313EF91}, - - {0xA9D93939, 0x67901717, 0xB3719C9C, 0xE8D2A6A6, 0x04050707, 0xFD985252, - 0xA3658080, 0x76DFE4E4, 0x9A084545, 0x92024B4B, 0x80A0E0E0, 0x78665A5A, - 0xE4DDAFAF, 0xDDB06A6A, 0xD1BF6363, 0x38362A2A, 0x0D54E6E6, 0xC6432020, - 0x3562CCCC, 0x98BEF2F2, 0x181E1212, 0xF724EBEB, 0xECD7A1A1, 0x6C774141, - 0x43BD2828, 0x7532BCBC, 0x37D47B7B, 0x269B8888, 0xFA700D0D, 0x13F94444, - 0x94B1FBFB, 0x485A7E7E, 0xF27A0303, 0xD0E48C8C, 0x8B47B6B6, 0x303C2424, - 0x84A5E7E7, 0x54416B6B, 0xDF06DDDD, 0x23C56060, 0x1945FDFD, 0x5BA33A3A, - 0x3D68C2C2, 0x59158D8D, 0xF321ECEC, 0xAE316666, 0xA23E6F6F, 0x82165757, - 0x63951010, 0x015BEFEF, 0x834DB8B8, 0x2E918686, 0xD9B56D6D, 0x511F8383, - 0x9B53AAAA, 0x7C635D5D, 0xA63B6868, 0xEB3FFEFE, 0xA5D63030, 0xBE257A7A, - 0x16A7ACAC, 0x0C0F0909, 0xE335F0F0, 0x6123A7A7, 0xC0F09090, 0x8CAFE9E9, - 0x3A809D9D, 0xF5925C5C, 0x73810C0C, 0x2C273131, 0x2576D0D0, 0x0BE75656, - 0xBB7B9292, 0x4EE9CECE, 0x89F10101, 0x6B9F1E1E, 0x53A93434, 0x6AC4F1F1, - 0xB499C3C3, 0xF1975B5B, 0xE1834747, 0xE66B1818, 0xBDC82222, 0x450E9898, - 0xE26E1F1F, 0xF4C9B3B3, 0xB62F7474, 0x66CBF8F8, 0xCCFF9999, 0x95EA1414, - 0x03ED5858, 0x56F7DCDC, 0xD4E18B8B, 0x1C1B1515, 0x1EADA2A2, 0xD70CD3D3, - 0xFB2BE2E2, 0xC31DC8C8, 0x8E195E5E, 0xB5C22C2C, 0xE9894949, 0xCF12C1C1, - 0xBF7E9595, 0xBA207D7D, 0xEA641111, 0x77840B0B, 0x396DC5C5, 0xAF6A8989, - 0x33D17C7C, 0xC9A17171, 0x62CEFFFF, 0x7137BBBB, 0x81FB0F0F, 0x793DB5B5, - 0x0951E1E1, 0xADDC3E3E, 0x242D3F3F, 0xCDA47676, 0xF99D5555, 0xD8EE8282, - 0xE5864040, 0xC5AE7878, 0xB9CD2525, 0x4D049696, 0x44557777, 0x080A0E0E, - 0x86135050, 0xE730F7F7, 0xA1D33737, 0x1D40FAFA, 0xAA346161, 0xED8C4E4E, - 0x06B3B0B0, 0x706C5454, 0xB22A7373, 0xD2523B3B, 0x410B9F9F, 0x7B8B0202, - 0xA088D8D8, 0x114FF3F3, 0x3167CBCB, 0xC2462727, 0x27C06767, 0x90B4FCFC, - 0x20283838, 0xF67F0404, 0x60784848, 0xFF2EE5E5, 0x96074C4C, 0x5C4B6565, - 0xB1C72B2B, 0xAB6F8E8E, 0x9E0D4242, 0x9CBBF5F5, 0x52F2DBDB, 0x1BF34A4A, - 0x5FA63D3D, 0x9359A4A4, 0x0ABCB9B9, 0xEF3AF9F9, 0x91EF1313, 0x85FE0808, - 0x49019191, 0xEE611616, 0x2D7CDEDE, 0x4FB22121, 0x8F42B1B1, 0x3BDB7272, - 0x47B82F2F, 0x8748BFBF, 0x6D2CAEAE, 0x46E3C0C0, 0xD6573C3C, 0x3E859A9A, - 0x6929A9A9, 0x647D4F4F, 0x2A948181, 0xCE492E2E, 0xCB17C6C6, 0x2FCA6969, - 0xFCC3BDBD, 0x975CA3A3, 0x055EE8E8, 0x7AD0EDED, 0xAC87D1D1, 0x7F8E0505, - 0xD5BA6464, 0x1AA8A5A5, 0x4BB72626, 0x0EB9BEBE, 0xA7608787, 0x5AF8D5D5, - 0x28223636, 0x14111B1B, 0x3FDE7575, 0x2979D9D9, 0x88AAEEEE, 0x3C332D2D, - 0x4C5F7979, 0x02B6B7B7, 0xB896CACA, 0xDA583535, 0xB09CC4C4, 0x17FC4343, - 0x551A8484, 0x1FF64D4D, 0x8A1C5959, 0x7D38B2B2, 0x57AC3333, 0xC718CFCF, - 0x8DF40606, 0x74695353, 0xB7749B9B, 0xC4F59797, 0x9F56ADAD, 0x72DAE3E3, - 0x7ED5EAEA, 0x154AF4F4, 0x229E8F8F, 0x12A2ABAB, 0x584E6262, 0x07E85F5F, - 0x99E51D1D, 0x34392323, 0x6EC1F6F6, 0x50446C6C, 0xDE5D3232, 0x68724646, - 0x6526A0A0, 0xBC93CDCD, 0xDB03DADA, 0xF8C6BABA, 0xC8FA9E9E, 0xA882D6D6, - 0x2BCF6E6E, 0x40507070, 0xDCEB8585, 0xFE750A0A, 0x328A9393, 0xA48DDFDF, - 0xCA4C2929, 0x10141C1C, 0x2173D7D7, 0xF0CCB4B4, 0xD309D4D4, 0x5D108A8A, - 0x0FE25151, 0x00000000, 0x6F9A1919, 0x9DE01A1A, 0x368F9494, 0x42E6C7C7, - 0x4AECC9C9, 0x5EFDD2D2, 0xC1AB7F7F, 0xE0D8A8A8}, - - {0xBC75BC32, 0xECF3EC21, 0x20C62043, 0xB3F4B3C9, 0xDADBDA03, 0x027B028B, - 0xE2FBE22B, 0x9EC89EFA, 0xC94AC9EC, 0xD4D3D409, 0x18E6186B, 0x1E6B1E9F, - 0x9845980E, 0xB27DB238, 0xA6E8A6D2, 0x264B26B7, 0x3CD63C57, 0x9332938A, - 0x82D882EE, 0x52FD5298, 0x7B377BD4, 0xBB71BB37, 0x5BF15B97, 0x47E14783, - 0x2430243C, 0x510F51E2, 0xBAF8BAC6, 0x4A1B4AF3, 0xBF87BF48, 0x0DFA0D70, - 0xB006B0B3, 0x753F75DE, 0xD25ED2FD, 0x7DBA7D20, 0x66AE6631, 0x3A5B3AA3, - 0x598A591C, 0x00000000, 0xCDBCCD93, 0x1A9D1AE0, 0xAE6DAE2C, 0x7FC17FAB, - 0x2BB12BC7, 0xBE0EBEB9, 0xE080E0A0, 0x8A5D8A10, 0x3BD23B52, 0x64D564BA, - 0xD8A0D888, 0xE784E7A5, 0x5F075FE8, 0x1B141B11, 0x2CB52CC2, 0xFC90FCB4, - 0x312C3127, 0x80A38065, 0x73B2732A, 0x0C730C81, 0x794C795F, 0x6B546B41, - 0x4B924B02, 0x53745369, 0x9436948F, 0x8351831F, 0x2A382A36, 0xC4B0C49C, - 0x22BD22C8, 0xD55AD5F8, 0xBDFCBDC3, 0x48604878, 0xFF62FFCE, 0x4C964C07, - 0x416C4177, 0xC742C7E6, 0xEBF7EB24, 0x1C101C14, 0x5D7C5D63, 0x36283622, - 0x672767C0, 0xE98CE9AF, 0x441344F9, 0x149514EA, 0xF59CF5BB, 0xCFC7CF18, - 0x3F243F2D, 0xC046C0E3, 0x723B72DB, 0x5470546C, 0x29CA294C, 0xF0E3F035, - 0x088508FE, 0xC6CBC617, 0xF311F34F, 0x8CD08CE4, 0xA493A459, 0xCAB8CA96, - 0x68A6683B, 0xB883B84D, 0x38203828, 0xE5FFE52E, 0xAD9FAD56, 0x0B770B84, - 0xC8C3C81D, 0x99CC99FF, 0x580358ED, 0x196F199A, 0x0E080E0A, 0x95BF957E, - 0x70407050, 0xF7E7F730, 0x6E2B6ECF, 0x1FE21F6E, 0xB579B53D, 0x090C090F, - 0x61AA6134, 0x57825716, 0x9F419F0B, 0x9D3A9D80, 0x11EA1164, 0x25B925CD, - 0xAFE4AFDD, 0x459A4508, 0xDFA4DF8D, 0xA397A35C, 0xEA7EEAD5, 0x35DA3558, - 0xED7AEDD0, 0x431743FC, 0xF866F8CB, 0xFB94FBB1, 0x37A137D3, 0xFA1DFA40, - 0xC23DC268, 0xB4F0B4CC, 0x32DE325D, 0x9CB39C71, 0x560B56E7, 0xE372E3DA, - 0x87A78760, 0x151C151B, 0xF9EFF93A, 0x63D163BF, 0x345334A9, 0x9A3E9A85, - 0xB18FB142, 0x7C337CD1, 0x8826889B, 0x3D5F3DA6, 0xA1ECA1D7, 0xE476E4DF, - 0x812A8194, 0x91499101, 0x0F810FFB, 0xEE88EEAA, 0x16EE1661, 0xD721D773, - 0x97C497F5, 0xA51AA5A8, 0xFEEBFE3F, 0x6DD96DB5, 0x78C578AE, 0xC539C56D, - 0x1D991DE5, 0x76CD76A4, 0x3EAD3EDC, 0xCB31CB67, 0xB68BB647, 0xEF01EF5B, - 0x1218121E, 0x602360C5, 0x6ADD6AB0, 0x4D1F4DF6, 0xCE4ECEE9, 0xDE2DDE7C, - 0x55F9559D, 0x7E487E5A, 0x214F21B2, 0x03F2037A, 0xA065A026, 0x5E8E5E19, - 0x5A785A66, 0x655C654B, 0x6258624E, 0xFD19FD45, 0x068D06F4, 0x40E54086, - 0xF298F2BE, 0x335733AC, 0x17671790, 0x057F058E, 0xE805E85E, 0x4F644F7D, - 0x89AF896A, 0x10631095, 0x74B6742F, 0x0AFE0A75, 0x5CF55C92, 0x9BB79B74, - 0x2D3C2D33, 0x30A530D6, 0x2ECE2E49, 0x49E94989, 0x46684672, 0x77447755, - 0xA8E0A8D8, 0x964D9604, 0x284328BD, 0xA969A929, 0xD929D979, 0x862E8691, - 0xD1ACD187, 0xF415F44A, 0x8D598D15, 0xD6A8D682, 0xB90AB9BC, 0x429E420D, - 0xF66EF6C1, 0x2F472FB8, 0xDDDFDD06, 0x23342339, 0xCC35CC62, 0xF16AF1C4, - 0xC1CFC112, 0x85DC85EB, 0x8F228F9E, 0x71C971A1, 0x90C090F0, 0xAA9BAA53, - 0x018901F1, 0x8BD48BE1, 0x4EED4E8C, 0x8EAB8E6F, 0xAB12ABA2, 0x6FA26F3E, - 0xE60DE654, 0xDB52DBF2, 0x92BB927B, 0xB702B7B6, 0x692F69CA, 0x39A939D9, - 0xD3D7D30C, 0xA761A723, 0xA21EA2AD, 0xC3B4C399, 0x6C506C44, 0x07040705, - 0x04F6047F, 0x27C22746, 0xAC16ACA7, 0xD025D076, 0x50865013, 0xDC56DCF7, - 0x8455841A, 0xE109E151, 0x7ABE7A25, 0x139113EF}, - - {0xD939A9D9, 0x90176790, 0x719CB371, 0xD2A6E8D2, 0x05070405, 0x9852FD98, - 0x6580A365, 0xDFE476DF, 0x08459A08, 0x024B9202, 0xA0E080A0, 0x665A7866, - 0xDDAFE4DD, 0xB06ADDB0, 0xBF63D1BF, 0x362A3836, 0x54E60D54, 0x4320C643, - 0x62CC3562, 0xBEF298BE, 0x1E12181E, 0x24EBF724, 0xD7A1ECD7, 0x77416C77, - 0xBD2843BD, 0x32BC7532, 0xD47B37D4, 0x9B88269B, 0x700DFA70, 0xF94413F9, - 0xB1FB94B1, 0x5A7E485A, 0x7A03F27A, 0xE48CD0E4, 0x47B68B47, 0x3C24303C, - 0xA5E784A5, 0x416B5441, 0x06DDDF06, 0xC56023C5, 0x45FD1945, 0xA33A5BA3, - 0x68C23D68, 0x158D5915, 0x21ECF321, 0x3166AE31, 0x3E6FA23E, 0x16578216, - 0x95106395, 0x5BEF015B, 0x4DB8834D, 0x91862E91, 0xB56DD9B5, 0x1F83511F, - 0x53AA9B53, 0x635D7C63, 0x3B68A63B, 0x3FFEEB3F, 0xD630A5D6, 0x257ABE25, - 0xA7AC16A7, 0x0F090C0F, 0x35F0E335, 0x23A76123, 0xF090C0F0, 0xAFE98CAF, - 0x809D3A80, 0x925CF592, 0x810C7381, 0x27312C27, 0x76D02576, 0xE7560BE7, - 0x7B92BB7B, 0xE9CE4EE9, 0xF10189F1, 0x9F1E6B9F, 0xA93453A9, 0xC4F16AC4, - 0x99C3B499, 0x975BF197, 0x8347E183, 0x6B18E66B, 0xC822BDC8, 0x0E98450E, - 0x6E1FE26E, 0xC9B3F4C9, 0x2F74B62F, 0xCBF866CB, 0xFF99CCFF, 0xEA1495EA, - 0xED5803ED, 0xF7DC56F7, 0xE18BD4E1, 0x1B151C1B, 0xADA21EAD, 0x0CD3D70C, - 0x2BE2FB2B, 0x1DC8C31D, 0x195E8E19, 0xC22CB5C2, 0x8949E989, 0x12C1CF12, - 0x7E95BF7E, 0x207DBA20, 0x6411EA64, 0x840B7784, 0x6DC5396D, 0x6A89AF6A, - 0xD17C33D1, 0xA171C9A1, 0xCEFF62CE, 0x37BB7137, 0xFB0F81FB, 0x3DB5793D, - 0x51E10951, 0xDC3EADDC, 0x2D3F242D, 0xA476CDA4, 0x9D55F99D, 0xEE82D8EE, - 0x8640E586, 0xAE78C5AE, 0xCD25B9CD, 0x04964D04, 0x55774455, 0x0A0E080A, - 0x13508613, 0x30F7E730, 0xD337A1D3, 0x40FA1D40, 0x3461AA34, 0x8C4EED8C, - 0xB3B006B3, 0x6C54706C, 0x2A73B22A, 0x523BD252, 0x0B9F410B, 0x8B027B8B, - 0x88D8A088, 0x4FF3114F, 0x67CB3167, 0x4627C246, 0xC06727C0, 0xB4FC90B4, - 0x28382028, 0x7F04F67F, 0x78486078, 0x2EE5FF2E, 0x074C9607, 0x4B655C4B, - 0xC72BB1C7, 0x6F8EAB6F, 0x0D429E0D, 0xBBF59CBB, 0xF2DB52F2, 0xF34A1BF3, - 0xA63D5FA6, 0x59A49359, 0xBCB90ABC, 0x3AF9EF3A, 0xEF1391EF, 0xFE0885FE, - 0x01914901, 0x6116EE61, 0x7CDE2D7C, 0xB2214FB2, 0x42B18F42, 0xDB723BDB, - 0xB82F47B8, 0x48BF8748, 0x2CAE6D2C, 0xE3C046E3, 0x573CD657, 0x859A3E85, - 0x29A96929, 0x7D4F647D, 0x94812A94, 0x492ECE49, 0x17C6CB17, 0xCA692FCA, - 0xC3BDFCC3, 0x5CA3975C, 0x5EE8055E, 0xD0ED7AD0, 0x87D1AC87, 0x8E057F8E, - 0xBA64D5BA, 0xA8A51AA8, 0xB7264BB7, 0xB9BE0EB9, 0x6087A760, 0xF8D55AF8, - 0x22362822, 0x111B1411, 0xDE753FDE, 0x79D92979, 0xAAEE88AA, 0x332D3C33, - 0x5F794C5F, 0xB6B702B6, 0x96CAB896, 0x5835DA58, 0x9CC4B09C, 0xFC4317FC, - 0x1A84551A, 0xF64D1FF6, 0x1C598A1C, 0x38B27D38, 0xAC3357AC, 0x18CFC718, - 0xF4068DF4, 0x69537469, 0x749BB774, 0xF597C4F5, 0x56AD9F56, 0xDAE372DA, - 0xD5EA7ED5, 0x4AF4154A, 0x9E8F229E, 0xA2AB12A2, 0x4E62584E, 0xE85F07E8, - 0xE51D99E5, 0x39233439, 0xC1F66EC1, 0x446C5044, 0x5D32DE5D, 0x72466872, - 0x26A06526, 0x93CDBC93, 0x03DADB03, 0xC6BAF8C6, 0xFA9EC8FA, 0x82D6A882, - 0xCF6E2BCF, 0x50704050, 0xEB85DCEB, 0x750AFE75, 0x8A93328A, 0x8DDFA48D, - 0x4C29CA4C, 0x141C1014, 0x73D72173, 0xCCB4F0CC, 0x09D4D309, 0x108A5D10, - 0xE2510FE2, 0x00000000, 0x9A196F9A, 0xE01A9DE0, 0x8F94368F, 0xE6C742E6, - 0xECC94AEC, 0xFDD25EFD, 0xAB7FC1AB, 0xD8A8E0D8} -}; - -/* The exp_to_poly and poly_to_exp tables are used to perform efficient - * operations in GF(2^8) represented as GF(2)[x]/w(x) where - * w(x)=x^8+x^6+x^3+x^2+1. We care about doing that because it's part of the - * definition of the RS matrix in the key schedule. Elements of that field - * are polynomials of degree not greater than 7 and all coefficients 0 or 1, - * which can be represented naturally by bytes (just substitute x=2). In that - * form, GF(2^8) addition is the same as bitwise XOR, but GF(2^8) - * multiplication is inefficient without hardware support. To multiply - * faster, I make use of the fact x is a generator for the nonzero elements, - * so that every element p of GF(2)[x]/w(x) is either 0 or equal to (x)^n for - * some n in 0..254. Note that that caret is exponentiation in GF(2^8), - * *not* polynomial notation. So if I want to compute pq where p and q are - * in GF(2^8), I can just say: - * 1. if p=0 or q=0 then pq=0 - * 2. otherwise, find m and n such that p=x^m and q=x^n - * 3. pq=(x^m)(x^n)=x^(m+n), so add m and n and find pq - * The translations in steps 2 and 3 are looked up in the tables - * poly_to_exp (for step 2) and exp_to_poly (for step 3). To see this - * in action, look at the CALC_S macro. As additional wrinkles, note that - * one of my operands is always a constant, so the poly_to_exp lookup on it - * is done in advance; I included the original values in the comments so - * readers can have some chance of recognizing that this *is* the RS matrix - * from the Twofish paper. I've only included the table entries I actually - * need; I never do a lookup on a variable input of zero and the biggest - * exponents I'll ever see are 254 (variable) and 237 (constant), so they'll - * never sum to more than 491. I'm repeating part of the exp_to_poly table - * so that I don't have to do mod-255 reduction in the exponent arithmetic. - * Since I know my constant operands are never zero, I only have to worry - * about zero values in the variable operand, and I do it with a simple - * conditional branch. I know conditionals are expensive, but I couldn't - * see a non-horrible way of avoiding them, and I did manage to group the - * statements so that each if covers four group multiplications. */ - -static const byte poly_to_exp[255] = { - 0x00, 0x01, 0x17, 0x02, 0x2E, 0x18, 0x53, 0x03, 0x6A, 0x2F, 0x93, 0x19, - 0x34, 0x54, 0x45, 0x04, 0x5C, 0x6B, 0xB6, 0x30, 0xA6, 0x94, 0x4B, 0x1A, - 0x8C, 0x35, 0x81, 0x55, 0xAA, 0x46, 0x0D, 0x05, 0x24, 0x5D, 0x87, 0x6C, - 0x9B, 0xB7, 0xC1, 0x31, 0x2B, 0xA7, 0xA3, 0x95, 0x98, 0x4C, 0xCA, 0x1B, - 0xE6, 0x8D, 0x73, 0x36, 0xCD, 0x82, 0x12, 0x56, 0x62, 0xAB, 0xF0, 0x47, - 0x4F, 0x0E, 0xBD, 0x06, 0xD4, 0x25, 0xD2, 0x5E, 0x27, 0x88, 0x66, 0x6D, - 0xD6, 0x9C, 0x79, 0xB8, 0x08, 0xC2, 0xDF, 0x32, 0x68, 0x2C, 0xFD, 0xA8, - 0x8A, 0xA4, 0x5A, 0x96, 0x29, 0x99, 0x22, 0x4D, 0x60, 0xCB, 0xE4, 0x1C, - 0x7B, 0xE7, 0x3B, 0x8E, 0x9E, 0x74, 0xF4, 0x37, 0xD8, 0xCE, 0xF9, 0x83, - 0x6F, 0x13, 0xB2, 0x57, 0xE1, 0x63, 0xDC, 0xAC, 0xC4, 0xF1, 0xAF, 0x48, - 0x0A, 0x50, 0x42, 0x0F, 0xBA, 0xBE, 0xC7, 0x07, 0xDE, 0xD5, 0x78, 0x26, - 0x65, 0xD3, 0xD1, 0x5F, 0xE3, 0x28, 0x21, 0x89, 0x59, 0x67, 0xFC, 0x6E, - 0xB1, 0xD7, 0xF8, 0x9D, 0xF3, 0x7A, 0x3A, 0xB9, 0xC6, 0x09, 0x41, 0xC3, - 0xAE, 0xE0, 0xDB, 0x33, 0x44, 0x69, 0x92, 0x2D, 0x52, 0xFE, 0x16, 0xA9, - 0x0C, 0x8B, 0x80, 0xA5, 0x4A, 0x5B, 0xB5, 0x97, 0xC9, 0x2A, 0xA2, 0x9A, - 0xC0, 0x23, 0x86, 0x4E, 0xBC, 0x61, 0xEF, 0xCC, 0x11, 0xE5, 0x72, 0x1D, - 0x3D, 0x7C, 0xEB, 0xE8, 0xE9, 0x3C, 0xEA, 0x8F, 0x7D, 0x9F, 0xEC, 0x75, - 0x1E, 0xF5, 0x3E, 0x38, 0xF6, 0xD9, 0x3F, 0xCF, 0x76, 0xFA, 0x1F, 0x84, - 0xA0, 0x70, 0xED, 0x14, 0x90, 0xB3, 0x7E, 0x58, 0xFB, 0xE2, 0x20, 0x64, - 0xD0, 0xDD, 0x77, 0xAD, 0xDA, 0xC5, 0x40, 0xF2, 0x39, 0xB0, 0xF7, 0x49, - 0xB4, 0x0B, 0x7F, 0x51, 0x15, 0x43, 0x91, 0x10, 0x71, 0xBB, 0xEE, 0xBF, - 0x85, 0xC8, 0xA1 -}; - -static const byte exp_to_poly[492] = { - 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x4D, 0x9A, 0x79, 0xF2, - 0xA9, 0x1F, 0x3E, 0x7C, 0xF8, 0xBD, 0x37, 0x6E, 0xDC, 0xF5, 0xA7, 0x03, - 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xCD, 0xD7, 0xE3, 0x8B, 0x5B, 0xB6, - 0x21, 0x42, 0x84, 0x45, 0x8A, 0x59, 0xB2, 0x29, 0x52, 0xA4, 0x05, 0x0A, - 0x14, 0x28, 0x50, 0xA0, 0x0D, 0x1A, 0x34, 0x68, 0xD0, 0xED, 0x97, 0x63, - 0xC6, 0xC1, 0xCF, 0xD3, 0xEB, 0x9B, 0x7B, 0xF6, 0xA1, 0x0F, 0x1E, 0x3C, - 0x78, 0xF0, 0xAD, 0x17, 0x2E, 0x5C, 0xB8, 0x3D, 0x7A, 0xF4, 0xA5, 0x07, - 0x0E, 0x1C, 0x38, 0x70, 0xE0, 0x8D, 0x57, 0xAE, 0x11, 0x22, 0x44, 0x88, - 0x5D, 0xBA, 0x39, 0x72, 0xE4, 0x85, 0x47, 0x8E, 0x51, 0xA2, 0x09, 0x12, - 0x24, 0x48, 0x90, 0x6D, 0xDA, 0xF9, 0xBF, 0x33, 0x66, 0xCC, 0xD5, 0xE7, - 0x83, 0x4B, 0x96, 0x61, 0xC2, 0xC9, 0xDF, 0xF3, 0xAB, 0x1B, 0x36, 0x6C, - 0xD8, 0xFD, 0xB7, 0x23, 0x46, 0x8C, 0x55, 0xAA, 0x19, 0x32, 0x64, 0xC8, - 0xDD, 0xF7, 0xA3, 0x0B, 0x16, 0x2C, 0x58, 0xB0, 0x2D, 0x5A, 0xB4, 0x25, - 0x4A, 0x94, 0x65, 0xCA, 0xD9, 0xFF, 0xB3, 0x2B, 0x56, 0xAC, 0x15, 0x2A, - 0x54, 0xA8, 0x1D, 0x3A, 0x74, 0xE8, 0x9D, 0x77, 0xEE, 0x91, 0x6F, 0xDE, - 0xF1, 0xAF, 0x13, 0x26, 0x4C, 0x98, 0x7D, 0xFA, 0xB9, 0x3F, 0x7E, 0xFC, - 0xB5, 0x27, 0x4E, 0x9C, 0x75, 0xEA, 0x99, 0x7F, 0xFE, 0xB1, 0x2F, 0x5E, - 0xBC, 0x35, 0x6A, 0xD4, 0xE5, 0x87, 0x43, 0x86, 0x41, 0x82, 0x49, 0x92, - 0x69, 0xD2, 0xE9, 0x9F, 0x73, 0xE6, 0x81, 0x4F, 0x9E, 0x71, 0xE2, 0x89, - 0x5F, 0xBE, 0x31, 0x62, 0xC4, 0xC5, 0xC7, 0xC3, 0xCB, 0xDB, 0xFB, 0xBB, - 0x3B, 0x76, 0xEC, 0x95, 0x67, 0xCE, 0xD1, 0xEF, 0x93, 0x6B, 0xD6, 0xE1, - 0x8F, 0x53, 0xA6, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x4D, - 0x9A, 0x79, 0xF2, 0xA9, 0x1F, 0x3E, 0x7C, 0xF8, 0xBD, 0x37, 0x6E, 0xDC, - 0xF5, 0xA7, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xCD, 0xD7, 0xE3, - 0x8B, 0x5B, 0xB6, 0x21, 0x42, 0x84, 0x45, 0x8A, 0x59, 0xB2, 0x29, 0x52, - 0xA4, 0x05, 0x0A, 0x14, 0x28, 0x50, 0xA0, 0x0D, 0x1A, 0x34, 0x68, 0xD0, - 0xED, 0x97, 0x63, 0xC6, 0xC1, 0xCF, 0xD3, 0xEB, 0x9B, 0x7B, 0xF6, 0xA1, - 0x0F, 0x1E, 0x3C, 0x78, 0xF0, 0xAD, 0x17, 0x2E, 0x5C, 0xB8, 0x3D, 0x7A, - 0xF4, 0xA5, 0x07, 0x0E, 0x1C, 0x38, 0x70, 0xE0, 0x8D, 0x57, 0xAE, 0x11, - 0x22, 0x44, 0x88, 0x5D, 0xBA, 0x39, 0x72, 0xE4, 0x85, 0x47, 0x8E, 0x51, - 0xA2, 0x09, 0x12, 0x24, 0x48, 0x90, 0x6D, 0xDA, 0xF9, 0xBF, 0x33, 0x66, - 0xCC, 0xD5, 0xE7, 0x83, 0x4B, 0x96, 0x61, 0xC2, 0xC9, 0xDF, 0xF3, 0xAB, - 0x1B, 0x36, 0x6C, 0xD8, 0xFD, 0xB7, 0x23, 0x46, 0x8C, 0x55, 0xAA, 0x19, - 0x32, 0x64, 0xC8, 0xDD, 0xF7, 0xA3, 0x0B, 0x16, 0x2C, 0x58, 0xB0, 0x2D, - 0x5A, 0xB4, 0x25, 0x4A, 0x94, 0x65, 0xCA, 0xD9, 0xFF, 0xB3, 0x2B, 0x56, - 0xAC, 0x15, 0x2A, 0x54, 0xA8, 0x1D, 0x3A, 0x74, 0xE8, 0x9D, 0x77, 0xEE, - 0x91, 0x6F, 0xDE, 0xF1, 0xAF, 0x13, 0x26, 0x4C, 0x98, 0x7D, 0xFA, 0xB9, - 0x3F, 0x7E, 0xFC, 0xB5, 0x27, 0x4E, 0x9C, 0x75, 0xEA, 0x99, 0x7F, 0xFE, - 0xB1, 0x2F, 0x5E, 0xBC, 0x35, 0x6A, 0xD4, 0xE5, 0x87, 0x43, 0x86, 0x41, - 0x82, 0x49, 0x92, 0x69, 0xD2, 0xE9, 0x9F, 0x73, 0xE6, 0x81, 0x4F, 0x9E, - 0x71, 0xE2, 0x89, 0x5F, 0xBE, 0x31, 0x62, 0xC4, 0xC5, 0xC7, 0xC3, 0xCB -}; - - -/* The table constants are indices of - * S-box entries, preprocessed through q0 and q1. */ -static byte calc_sb_tbl[512] = { - 0xA9, 0x75, 0x67, 0xF3, 0xB3, 0xC6, 0xE8, 0xF4, - 0x04, 0xDB, 0xFD, 0x7B, 0xA3, 0xFB, 0x76, 0xC8, - 0x9A, 0x4A, 0x92, 0xD3, 0x80, 0xE6, 0x78, 0x6B, - 0xE4, 0x45, 0xDD, 0x7D, 0xD1, 0xE8, 0x38, 0x4B, - 0x0D, 0xD6, 0xC6, 0x32, 0x35, 0xD8, 0x98, 0xFD, - 0x18, 0x37, 0xF7, 0x71, 0xEC, 0xF1, 0x6C, 0xE1, - 0x43, 0x30, 0x75, 0x0F, 0x37, 0xF8, 0x26, 0x1B, - 0xFA, 0x87, 0x13, 0xFA, 0x94, 0x06, 0x48, 0x3F, - 0xF2, 0x5E, 0xD0, 0xBA, 0x8B, 0xAE, 0x30, 0x5B, - 0x84, 0x8A, 0x54, 0x00, 0xDF, 0xBC, 0x23, 0x9D, - 0x19, 0x6D, 0x5B, 0xC1, 0x3D, 0xB1, 0x59, 0x0E, - 0xF3, 0x80, 0xAE, 0x5D, 0xA2, 0xD2, 0x82, 0xD5, - 0x63, 0xA0, 0x01, 0x84, 0x83, 0x07, 0x2E, 0x14, - 0xD9, 0xB5, 0x51, 0x90, 0x9B, 0x2C, 0x7C, 0xA3, - 0xA6, 0xB2, 0xEB, 0x73, 0xA5, 0x4C, 0xBE, 0x54, - 0x16, 0x92, 0x0C, 0x74, 0xE3, 0x36, 0x61, 0x51, - 0xC0, 0x38, 0x8C, 0xB0, 0x3A, 0xBD, 0xF5, 0x5A, - 0x73, 0xFC, 0x2C, 0x60, 0x25, 0x62, 0x0B, 0x96, - 0xBB, 0x6C, 0x4E, 0x42, 0x89, 0xF7, 0x6B, 0x10, - 0x53, 0x7C, 0x6A, 0x28, 0xB4, 0x27, 0xF1, 0x8C, - 0xE1, 0x13, 0xE6, 0x95, 0xBD, 0x9C, 0x45, 0xC7, - 0xE2, 0x24, 0xF4, 0x46, 0xB6, 0x3B, 0x66, 0x70, - 0xCC, 0xCA, 0x95, 0xE3, 0x03, 0x85, 0x56, 0xCB, - 0xD4, 0x11, 0x1C, 0xD0, 0x1E, 0x93, 0xD7, 0xB8, - 0xFB, 0xA6, 0xC3, 0x83, 0x8E, 0x20, 0xB5, 0xFF, - 0xE9, 0x9F, 0xCF, 0x77, 0xBF, 0xC3, 0xBA, 0xCC, - 0xEA, 0x03, 0x77, 0x6F, 0x39, 0x08, 0xAF, 0xBF, - 0x33, 0x40, 0xC9, 0xE7, 0x62, 0x2B, 0x71, 0xE2, - 0x81, 0x79, 0x79, 0x0C, 0x09, 0xAA, 0xAD, 0x82, - 0x24, 0x41, 0xCD, 0x3A, 0xF9, 0xEA, 0xD8, 0xB9, - 0xE5, 0xE4, 0xC5, 0x9A, 0xB9, 0xA4, 0x4D, 0x97, - 0x44, 0x7E, 0x08, 0xDA, 0x86, 0x7A, 0xE7, 0x17, - 0xA1, 0x66, 0x1D, 0x94, 0xAA, 0xA1, 0xED, 0x1D, - 0x06, 0x3D, 0x70, 0xF0, 0xB2, 0xDE, 0xD2, 0xB3, - 0x41, 0x0B, 0x7B, 0x72, 0xA0, 0xA7, 0x11, 0x1C, - 0x31, 0xEF, 0xC2, 0xD1, 0x27, 0x53, 0x90, 0x3E, - 0x20, 0x8F, 0xF6, 0x33, 0x60, 0x26, 0xFF, 0x5F, - 0x96, 0xEC, 0x5C, 0x76, 0xB1, 0x2A, 0xAB, 0x49, - 0x9E, 0x81, 0x9C, 0x88, 0x52, 0xEE, 0x1B, 0x21, - 0x5F, 0xC4, 0x93, 0x1A, 0x0A, 0xEB, 0xEF, 0xD9, - 0x91, 0xC5, 0x85, 0x39, 0x49, 0x99, 0xEE, 0xCD, - 0x2D, 0xAD, 0x4F, 0x31, 0x8F, 0x8B, 0x3B, 0x01, - 0x47, 0x18, 0x87, 0x23, 0x6D, 0xDD, 0x46, 0x1F, - 0xD6, 0x4E, 0x3E, 0x2D, 0x69, 0xF9, 0x64, 0x48, - 0x2A, 0x4F, 0xCE, 0xF2, 0xCB, 0x65, 0x2F, 0x8E, - 0xFC, 0x78, 0x97, 0x5C, 0x05, 0x58, 0x7A, 0x19, - 0xAC, 0x8D, 0x7F, 0xE5, 0xD5, 0x98, 0x1A, 0x57, - 0x4B, 0x67, 0x0E, 0x7F, 0xA7, 0x05, 0x5A, 0x64, - 0x28, 0xAF, 0x14, 0x63, 0x3F, 0xB6, 0x29, 0xFE, - 0x88, 0xF5, 0x3C, 0xB7, 0x4C, 0x3C, 0x02, 0xA5, - 0xB8, 0xCE, 0xDA, 0xE9, 0xB0, 0x68, 0x17, 0x44, - 0x55, 0xE0, 0x1F, 0x4D, 0x8A, 0x43, 0x7D, 0x69, - 0x57, 0x29, 0xC7, 0x2E, 0x8D, 0xAC, 0x74, 0x15, - 0xB7, 0x59, 0xC4, 0xA8, 0x9F, 0x0A, 0x72, 0x9E, - 0x7E, 0x6E, 0x15, 0x47, 0x22, 0xDF, 0x12, 0x34, - 0x58, 0x35, 0x07, 0x6A, 0x99, 0xCF, 0x34, 0xDC, - 0x6E, 0x22, 0x50, 0xC9, 0xDE, 0xC0, 0x68, 0x9B, - 0x65, 0x89, 0xBC, 0xD4, 0xDB, 0xED, 0xF8, 0xAB, - 0xC8, 0x12, 0xA8, 0xA2, 0x2B, 0x0D, 0x40, 0x52, - 0xDC, 0xBB, 0xFE, 0x02, 0x32, 0x2F, 0xA4, 0xA9, - 0xCA, 0xD7, 0x10, 0x61, 0x21, 0x1E, 0xF0, 0xB4, - 0xD3, 0x50, 0x5D, 0x04, 0x0F, 0xF6, 0x00, 0xC2, - 0x6F, 0x16, 0x9D, 0x25, 0x36, 0x86, 0x42, 0x56, - 0x4A, 0x55, 0x5E, 0x09, 0xC1, 0xBE, 0xE0, 0x91 -}; -/* Macro to perform one column of the RS matrix multiplication. The - * parameters a, b, c, and d are the four bytes of output; i is the index - * of the key bytes, and w, x, y, and z, are the column of constants from - * the RS matrix, preprocessed through the poly_to_exp table. */ - -#define CALC_S(a, b, c, d, i, w, x, y, z) \ - if (key[i]) { \ - tmp = poly_to_exp[key[i] - 1]; \ - (a) ^= exp_to_poly[tmp + (w)]; \ - (b) ^= exp_to_poly[tmp + (x)]; \ - (c) ^= exp_to_poly[tmp + (y)]; \ - (d) ^= exp_to_poly[tmp + (z)]; \ - } - -/* Macros to calculate the key-dependent S-boxes for a 128-bit key using - * the S vector from CALC_S. CALC_SB_2 computes a single entry in all - * four S-boxes, where i is the index of the entry to compute, and a and b - * are the index numbers preprocessed through the q0 and q1 tables - * respectively. CALC_SB is simply a convenience to make the code shorter; - * it calls CALC_SB_2 four times with consecutive indices from i to i+3, - * using the remaining parameters two by two. */ - -#define CALC_SB_2(i, a, b) \ - ctx->s[0][i] = mds[0][q0[(a) ^ sa] ^ se]; \ - ctx->s[1][i] = mds[1][q0[(b) ^ sb] ^ sf]; \ - ctx->s[2][i] = mds[2][q1[(a) ^ sc] ^ sg]; \ - ctx->s[3][i] = mds[3][q1[(b) ^ sd] ^ sh] - -#define CALC_SB(i, a, b, c, d, e, f, g, h) \ - CALC_SB_2 (i, a, b); CALC_SB_2 ((i)+1, c, d); \ - CALC_SB_2 ((i)+2, e, f); CALC_SB_2 ((i)+3, g, h) - -/* Macros exactly like CALC_SB and CALC_SB_2, but for 256-bit keys. */ - -#define CALC_SB256_2(i, a, b) \ - ctx->s[0][i] = mds[0][q0[q0[q1[(b) ^ sa] ^ se] ^ si] ^ sm]; \ - ctx->s[1][i] = mds[1][q0[q1[q1[(a) ^ sb] ^ sf] ^ sj] ^ sn]; \ - ctx->s[2][i] = mds[2][q1[q0[q0[(a) ^ sc] ^ sg] ^ sk] ^ so]; \ - ctx->s[3][i] = mds[3][q1[q1[q0[(b) ^ sd] ^ sh] ^ sl] ^ sp]; - -#define CALC_SB256(i, a, b, c, d, e, f, g, h) \ - CALC_SB256_2 (i, a, b); CALC_SB256_2 ((i)+1, c, d); \ - CALC_SB256_2 ((i)+2, e, f); CALC_SB256_2 ((i)+3, g, h) - -/* Macros to calculate the whitening and round subkeys. CALC_K_2 computes the - * last two stages of the h() function for a given index (either 2i or 2i+1). - * a, b, c, and d are the four bytes going into the last two stages. For - * 128-bit keys, this is the entire h() function and a and c are the index - * preprocessed through q0 and q1 respectively; for longer keys they are the - * output of previous stages. j is the index of the first key byte to use. - * CALC_K computes a pair of subkeys for 128-bit Twofish, by calling CALC_K_2 - * twice, doing the Psuedo-Hadamard Transform, and doing the necessary - * rotations. Its parameters are: a, the array to write the results into, - * j, the index of the first output entry, k and l, the preprocessed indices - * for index 2i, and m and n, the preprocessed indices for index 2i+1. - * CALC_K256_2 expands CALC_K_2 to handle 256-bit keys, by doing two - * additional lookup-and-XOR stages. The parameters a and b are the index - * preprocessed through q0 and q1 respectively; j is the index of the first - * key byte to use. CALC_K256 is identical to CALC_K but for using the - * CALC_K256_2 macro instead of CALC_K_2. */ - -#define CALC_K_2(a, b, c, d, j) \ - mds[0][q0[a ^ key[(j) + 8]] ^ key[j]] \ - ^ mds[1][q0[b ^ key[(j) + 9]] ^ key[(j) + 1]] \ - ^ mds[2][q1[c ^ key[(j) + 10]] ^ key[(j) + 2]] \ - ^ mds[3][q1[d ^ key[(j) + 11]] ^ key[(j) + 3]] - -#define CALC_K(a, j, k, l, m, n) \ - x = CALC_K_2 (k, l, k, l, 0); \ - y = CALC_K_2 (m, n, m, n, 4); \ - y = (y << 8) + (y >> 24); \ - x += y; y += x; ctx->a[j] = x; \ - ctx->a[(j) + 1] = (y << 9) + (y >> 23) - -#define CALC_K256_2(a, b, j) \ - CALC_K_2 (q0[q1[b ^ key[(j) + 24]] ^ key[(j) + 16]], \ - q1[q1[a ^ key[(j) + 25]] ^ key[(j) + 17]], \ - q0[q0[a ^ key[(j) + 26]] ^ key[(j) + 18]], \ - q1[q0[b ^ key[(j) + 27]] ^ key[(j) + 19]], j) - -#define CALC_K256(a, j, k, l, m, n) \ - x = CALC_K256_2 (k, l, 0); \ - y = CALC_K256_2 (m, n, 4); \ - y = (y << 8) + (y >> 24); \ - x += y; y += x; ctx->a[j] = x; \ - ctx->a[(j) + 1] = (y << 9) + (y >> 23) - - -static void -burn_stack (int bytes) -{ - char buf[64]; - - 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 -#include -#include - -int -main() -{ - TWOFISH_context ctx; /* Expanded key. */ - int i, j; /* Loop counters. */ - - const char *encrypt_msg; /* Message to print regarding encryption test; - * the printf is done outside the loop to avoid - * stuffing up the timing. */ - clock_t timer; /* For computing elapsed time. */ - - /* Test buffer. */ - byte buffer[4][16] = { - {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, - 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF}, - {0x0F, 0x1E, 0x2D, 0x3C, 0x4B, 0x5A, 0x69, 0x78, - 0x87, 0x96, 0xA5, 0xB4, 0xC3, 0xD2 ,0xE1, 0xF0}, - {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54 ,0x32, 0x10}, - {0x01, 0x23, 0x45, 0x67, 0x76, 0x54 ,0x32, 0x10, - 0x89, 0xAB, 0xCD, 0xEF, 0xFE, 0xDC, 0xBA, 0x98} - }; - - /* Expected outputs for the million-operation test */ - static const byte test_encrypt[4][16] = { - {0xC8, 0x23, 0xB8, 0xB7, 0x6B, 0xFE, 0x91, 0x13, - 0x2F, 0xA7, 0x5E, 0xE6, 0x94, 0x77, 0x6F, 0x6B}, - {0x90, 0x36, 0xD8, 0x29, 0xD5, 0x96, 0xC2, 0x8E, - 0xE4, 0xFF, 0x76, 0xBC, 0xE5, 0x77, 0x88, 0x27}, - {0xB8, 0x78, 0x69, 0xAF, 0x42, 0x8B, 0x48, 0x64, - 0xF7, 0xE9, 0xF3, 0x9C, 0x42, 0x18, 0x7B, 0x73}, - {0x7A, 0x88, 0xFB, 0xEB, 0x90, 0xA4, 0xB4, 0xA8, - 0x43, 0xA3, 0x1D, 0xF1, 0x26, 0xC4, 0x53, 0x57} - }; - static const byte test_decrypt[4][16] = { - {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, - 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF}, - {0x0F, 0x1E, 0x2D, 0x3C, 0x4B, 0x5A, 0x69, 0x78, - 0x87, 0x96, 0xA5, 0xB4, 0xC3, 0xD2 ,0xE1, 0xF0}, - {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54 ,0x32, 0x10}, - {0x01, 0x23, 0x45, 0x67, 0x76, 0x54 ,0x32, 0x10, - 0x89, 0xAB, 0xCD, 0xEF, 0xFE, 0xDC, 0xBA, 0x98} - }; - - /* Start the timer ticking. */ - timer = clock (); - - /* Encryption test. */ - for (i = 0; i < 125; i++) { - twofish_setkey (&ctx, buffer[0], sizeof (buffer[0])); - for (j = 0; j < 1000; j++) - twofish_encrypt (&ctx, buffer[2], buffer[2]); - twofish_setkey (&ctx, buffer[1], sizeof (buffer[1])); - for (j = 0; j < 1000; j++) - twofish_encrypt (&ctx, buffer[3], buffer[3]); - twofish_setkey (&ctx, buffer[2], sizeof (buffer[2])*2); - for (j = 0; j < 1000; j++) { - twofish_encrypt (&ctx, buffer[0], buffer[0]); - twofish_encrypt (&ctx, buffer[1], buffer[1]); - } - } - encrypt_msg = memcmp (buffer, test_encrypt, sizeof (test_encrypt)) ? - "encryption failure!\n" : "encryption OK!\n"; - - /* Decryption test. */ - for (i = 0; i < 125; i++) { - twofish_setkey (&ctx, buffer[2], sizeof (buffer[2])*2); - for (j = 0; j < 1000; j++) { - twofish_decrypt (&ctx, buffer[0], buffer[0]); - twofish_decrypt (&ctx, buffer[1], buffer[1]); - } - twofish_setkey (&ctx, buffer[1], sizeof (buffer[1])); - for (j = 0; j < 1000; j++) - twofish_decrypt (&ctx, buffer[3], buffer[3]); - twofish_setkey (&ctx, buffer[0], sizeof (buffer[0])); - for (j = 0; j < 1000; j++) - twofish_decrypt (&ctx, buffer[2], buffer[2]); - } - - /* Stop the timer, and print results. */ - timer = clock () - timer; - printf (encrypt_msg); - printf (memcmp (buffer, test_decrypt, sizeof (test_decrypt)) ? - "decryption failure!\n" : "decryption OK!\n"); - printf ("elapsed time: %.1f s.\n", (float) timer / CLOCKS_PER_SEC); - - return 0; -} - -#endif /* TEST */ - -#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 - - * 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 - - * errors.h: Added STATUS_IMPORT_PROBLEM. - -2002-08-20 Werner Koch - - * vasprintf.c: Hack to handle NULL for %s. - -2002-08-09 Werner Koch - - * signal.c: New. Taken from GnuPG 1.1.91. - -2002-07-23 Werner Koch - - * util.h (_IO_cookie_io_functions_t): Fixed typo. Noted by - Richard Lefebvre. - -2002-07-22 Werner Koch - - * fseeko.c, ftello.c: New. - -2002-06-28 Werner Koch - - * maperror.c (map_to_assuan_status): Map more errorcodes to Bad - Certificate. - -2002-06-26 Werner Koch - - * maperror.c (map_to_assuan_status): Map EOF to No_Data_Available. - -2002-06-10 Werner Koch - - * 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 - - * maperror.c (map_to_assuan_status): Map Bad_CA_Certificate. - -2002-05-23 Werner Koch - - * no-pth.c, Makefile.am: Removed. - -2002-05-22 Werner Koch - - * mkdtemp.c: Replaced byte by unsigned char because it is no longer - defined in gcrypt.h. - -2002-05-21 Werner Koch - - * maperror.c (map_gcry_err): Add libgcrypt's new S-expression errors. - (map_ksba_err): Add a few mappings. - -2002-05-14 Werner Koch - - * gettime.c: New. - -2002-05-03 Werner Koch - - * errors.h: Added STARUS_EXPSIG and STATUS_EXPKEYSIG. - -2002-04-15 Werner Koch - - * cryptmiss.c: New. - -2002-02-14 Werner Koch - - * maperror.c: Add more assuan<->gnupg mappings. - -2002-02-12 Werner Koch - - * 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 - - * mkdtemp.c: Copied from gnupg-1.0.6c and changed to use libgcrypt. - -2002-01-19 Werner Koch - - * 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 - - * maperror.c: Add mapping for Not_Trusted. - -2002-01-11 Werner Koch - - * maperror.c (map_assuan_err): Codes for CRL - -2002-01-08 Werner Koch - - * util.h (spacep): New. - -2002-01-02 Werner Koch - - * maperror.c (map_to_assuan_status): New. Merged from ../agent - and ../sm. - -2001-12-20 Werner Koch - - * maperror.c (map_gcry_err): Add some mappings. - -2001-12-18 Werner Koch - - * Makefile.am (AM_CPPFLAGS): Include flags for gcrypt and ksba - -2001-12-14 Werner Koch - - * 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 -#include -#include - -#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 -#include -#include -#include -#include -#include -#include - -#include - -#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 -#include -#include -#include -#include -#include -#include -#include - -#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 /* we need this for the memory function protos */ -#include /* 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 -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: - - - --- -James Troup , 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 Mon, 30 Apr 2001 02:12:38 +0100 - -gnupg (1.0.4-4) unstable; urgency=low - - * po/ru.po: patch by Ilya Martynov 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 , closes: - #93664. - - * Deprecated depreciated; noticed by Vincent Broman - . - - * 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 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 , closes: #87487. - * debian/preinst: the old GnuPG debs have moved to people.debian.org. - * cipher/random.c: #include as well as - * 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 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 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 Tue, 17 Oct 2000 17:26:17 +0100 - -gnupg (1.0.3b-1) unstable; urgency=low - - * New upstream snapshot version. - - -- James Troup 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 - 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 - . [#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 's request. [#57314] - - -- James Troup Sun, 1 Oct 2000 14:55:03 +0100 - -gnupg (1.0.3-1) unstable; urgency=low - - * New upstream version. - - -- James Troup Mon, 18 Sep 2000 15:56:54 +0100 - -gnupg (1.0.2-1) unstable; urgency=low - - * New upstream version. - - -- James Troup 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 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 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 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 Wed, 20 Oct 1999 23:39:05 +0100 - -gnupg (1.0.0-1) unstable; urgency=low - - * New upstream release. [#44545] - - -- James Troup 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 . [#42288] - * debian/rules (binary-arch): correct the path where modules are looked - for. Reported by Karl M. Hegbloom . [#40881] - * debian/postinst, debian/postrm: under protest, register gpg the - package with suidmanager and make it suid by default. - [#29780,#32590,#40391] - - -- James Troup Tue, 10 Aug 1999 00:12:40 +0100 - -gnupg (0.9.10-1) unstable; urgency=low - - * New upstream version. - - -- James Troup Fri, 6 Aug 1999 01:16:21 +0100 - -gnupg (0.9.9-1) unstable; urgency=low - - * New upstream version. - - -- James Troup 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 - . [#38864] - - -- James Troup Sun, 27 Jun 1999 01:07:58 +0100 - -gnupg (0.9.7-1) unstable; urgency=low - - * New upstream version. - - -- James Troup 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 - . - * debian/control (Depends): depend on makedev (>= 2.3.1-13) to ensure - that /dev/urandom exists; reported by Steffen Markert - . [#32076] - - -- James Troup 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 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 Mon, 8 Mar 1999 19:58:28 +0100 - -gnupg (0.9.3-1) unstable; urgency=low - - * New upstream version. - - -- James Troup 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 Wed, 20 Jan 1999 21:23:11 +0100 - -gnupg (0.9.1-1) unstable; urgency=low - - * New upstream version. - - -- James Troup 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 . - - -- James Troup 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 Tue, 8 Dec 1998 22:40:23 +0000 - -gnupg (0.4.4-1) unstable; urgency=low - - * New upstream version. - - -- James Troup 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 . - * debian/rules (binary-arch): install `README.Debian' - * debian/control (Standards-Version): updated to 2.5.0.0. - - -- James Troup 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 - . - * debian/rules (binary-arch): don't install the now non-existent `rfcs', - but do install `OpenPGP'. - - -- James Troup 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 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 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 Thu, 9 Jul 1998 21:06:07 +0200 - -gnupg (0.3.1-1) unstable; urgency=low - - * New upstream version. - - -- James Troup Tue, 7 Jul 1998 00:26:21 +0200 - -gnupg (0.3.0-2) unstable; urgency=low - - * Applied bug-fix patch from Werner. - - -- James Troup 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 . - * 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 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 Sat, 30 May 1998 12:12:35 +0200 - -gnupg (0.2.18-1) unstable; urgency=low - - * New upstream version. - - -- James Troup 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 Mon, 4 May 1998 22:36:51 +0200 - -gnupg (0.2.15-1) unstable; urgency=high - - * New upstream version. - - -- James Troup Fri, 10 Apr 1998 01:12:20 +0100 - -gnupg (0.2.13-1) unstable; urgency=high - - * New upstream version. - - -- James Troup Wed, 11 Mar 1998 01:52:51 +0000 - -gnupg (0.2.12-1) unstable; urgency=low - - * New upstream version. - - -- James Troup Sat, 7 Mar 1998 13:52:40 +0000 - -gnupg (0.2.11-1) unstable; urgency=low - - * New upstream version. - - -- James Troup Wed, 4 Mar 1998 01:32:12 +0000 - -gnupg (0.2.10-1) unstable; urgency=low - - * New upstream version. - * Name changed upstream. - - -- James Troup Mon, 2 Mar 1998 07:32:05 +0000 - -g10 (0.2.7-1) unstable; urgency=low - - * Initial release. - - -- James Troup 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 -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 , -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 < 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 - - * DETAILS (KEY_CREATED): Enhanced by fingerprint. - -2002-10-03 David Shaw - - * gpg.sgml: Note that '#' means secret-key-unavailable, and that - keyserver schemes are case-insensitive. - -2002-09-30 David Shaw - - * gpg.sgml: Note that --pgp2 disables --textmode when encrypting. - -2002-09-20 David Shaw - - * gpg.sgml: Some minor language cleanup. - -2002-09-20 Werner Koch - - * DETAILS: s/XORed/ORed/. - -2002-09-15 Werner Koch - - * gpg.sgml: Add rebuild-keydb-caches. - -2002-09-12 David Shaw - - * DETAILS: Fix batch key generation example. - -2002-09-11 Werner Koch - - * Makefile.am (EXTRA_DIST): Include gnupg-32.reg - -2002-09-02 Werner Koch - - * gpg.sgml: Updated the charset option. - - * DETAILS: Added status IMPORT_OK. - - * gnupg.7: New mini man page. - -2002-08-30 David Shaw - - * gpg.sgml: Document keyserver-option include-subkeys. Note that - honor-http-proxy is a keyserver-option now. - - * DETAILS: Add "Key not trusted" to INV_RECP status code. - -2002-08-23 Werner Koch - - * faq.raw: Updated. New Maintainer is David D. Scribner. - -2002-08-22 David Shaw - - * gpg.sgml: Clarify meaning of keyserver option include-revoked. - -2002-08-21 Werner Koch - - * DETAILS: Added IMPORT_PROBLEM. - -2002-08-20 David Shaw - - * DETAILS: Clarify that trust letters 'q' and '-' can be treated - identically. - - * gpg.sgml: Document --ignore-mdc-error. - -2002-08-06 David Shaw - - * gpg.sgml: Clarify that only long-form options can go in the - config file. - -2002-08-06 Werner Koch - - * gpg.sgml: Fixed doc regarding the name change of the option - file. - -2002-07-30 David Shaw - - * gpg.sgml: Clarify --edit/addrevoker (sensitive), and - --keyserver-options (--import/export-options may be used as well). - Document --import-options and --export-options with their various - options. --show-photos now works during signature verification as - well. Document --exec-path. Note in --simple-sk-checksum that - the passphrase must be changed for this to take effect. Note that - --pgp7 does not disable MDC. Document --no-mdc-warning. - -2002-07-25 Werner Koch - - * gpg.sgml: Document new --delete behaviour. - -2002-07-25 David Shaw - - * gpg.sgml: Clarify the differences between "pref" and "showpref". - Note in "setpref" that a list of available algorithms can be - printed with "gpg -v --version". Note in "updpref" that we don't - select keys via attribute uids, so preferences there will be - ignored. - -2002-07-01 David Shaw - - * gpg.sgml: Clarify "group". - -2002-07-01 Werner Koch - - * Makefile.am: Due to problems with VPATH builds we don't try to - build the texi vesions of the manual pages anymore automatically. - -2002-06-30 Werner Koch - - * README.W32: Adjusted some descriptions. Fixed the regsitry - entry descriptions. - -2002-06-21 David Shaw - - * DETAILS: Document "uat". - - * gpg.sgml: Document - --personal-{compress|digest|compress}-preferences, --group, and - add comments to --expert. - -2002-06-17 Werner Koch - - * gpg.sgml: Grammar fix. - -2002-06-03 David Shaw - - * DETAILS: Details of ATTRIBUTE. - - * gpg.sgml: Document --attribute-fd - -2002-06-03 Timo Schulz - - * DETAILS: Add ATTRIBUTE. - -2002-05-31 David Shaw - - * gpg.sgml: Add "edit/addrevoker". Document --desig-revoke. Note - that -z and --compress are the same option. Note that - --digest-algo can no longer violate OpenPGP with a non-160 bit - hash with DSA. Document --cert-digest-algo with suitable warnings - not to use it. Note the default s2k-cipher-algo is now CAST5. - Note that --force-v3-sigs overrides --ask-sig-expire. Revise - --expert documentation, as it is now definitely legal to have more - than one photo ID on a key. --preference-list is now - --default-preference-list with the new meaning. Document - --personal-preference-list. - - * DETAILS: Document "Revoker" for batch key generation. - -2002-05-22 Werner Koch - - * gpg.sgml: sgml syntax fix. - -2002-05-12 Werner Koch - - * gpg.sgml: Fixed URL in the description section. - - * faq.raw: Minor typo fixes noted by kromJx@myrealbox.com. - -2002-05-11 Werner Koch - - * gpg.sgml: Typo fix. - -2002-05-07 David Shaw - - * gpg.sgml: Add entries for --sk-comments, --no-sk-comments, - --pgp7, and --no-pgp7. Fix --pgp2 and --pgp6: the proper name is - --escape-from-lines and not --escape-from. - -2002-04-30 Timo Schulz - - * gpg.sgml: Add an entry for --encrypt-files and --decrypt-files. - -2002-04-29 David Shaw - - * gpg.sgml: Fix minor error in --pgp6 documentation: it does not - imply --digest-algo MD5 - -2002-04-29 Werner Koch - - * samplekeys.asc: Added gnupg distribution key 57548DCD. - - * faq.raw: Inserted Douglas Calvert as new maintainer. Acknowledge - Nils. Add entry about trust packet parsing problems. - -2002-04-24 David Shaw - - * gpg.sgml: Add some documentation for - --edit/{addphoto|showphoto|nrsign|nrlsign}, and the difference - between %t and %T in photo viewer command lines. - -2002-04-23 Stefan Bellon - - * gpg.sgml: Moved options from section "COMMANDS" to - section "OPTIONS". - -2002-04-20 David Shaw - - * samplekeys.asc: Added 0x5B0358A2 - -2002-04-19 David Shaw - - * gpg.sgml: Add "%t" flag for photo IDs, a note about primary - having different meanings for photo and regular IDs, rename - --default-check-level to --default-cert-check-level, add - --auto-check-trustdb, and --pgp6. - - * DETAILS: Add EXPSIG, EXPKEYSIG, and KEYEXPIRED. Add notes to - SIGEXPIRED (deprecated), and VALIDSIG (added expiration date). - Add "Preferences" command to unattended key generation - instructions. Also fixed a few typos. - - * samplekeys.asc: new (added to EXTRA_DIST in Makefile.am as well) - -2002-01-31 Marcus Brinkmann - - * DETAILS: Fix a spelling error, correct IMPORTED_RES to IMPORT_RES, - correct INV_RECP (the second occurence) to NO_RECP. - -2002-04-03 David Shaw - - * gpg.sgml: auto-key-retrieve is a keyserver-option (noted by - Roger Sondermann). - -2002-03-27 David Shaw - - * gpg.sgml: --pgp2 also means --disable-mdc, --no-ask-sig-expire, - and --no-ask-cert-expire. It does not mean --no-force-v3-sigs - (noted by Timo). - -2002-03-27 David Shaw - - * gpg.sgml: Add a few notes about --pgp2 meaning MIT PGP 2.6.2, - and keyserver details about HKP and NAI HKP. - -2002-03-18 David Shaw - - * gpg.sgml: Change meaning of --allow-non-selfsigned-uid to match - change in code, and add --no-allow-non-selfsigned-uid. - -2002-03-13 Werner Koch - - * faq.raw: Due to a lack of time Nils can't serve anymore as a - maintainer. Removed his address and setup a generic address. - -2002-03-06 Werner Koch - - * gpg.sgml: Add an entry for --export-ownertrust. Suggested by - Bernhard Reiter. - -2002-01-26 Timo Schulz - - * gnupg-w32.reg: New. Registry file for W32 in registry format. - -2002-01-26 Werner Koch - - * gpg.sgml: A few words about --gpg-agent-info and GPG_AGENT_INFO. - -2002-01-25 Timo Schulz - - * README.W32: Modify the filename because now the .exe extension - is automatically added to the binary. - -2002-01-14 Werner Koch - - * gpg.sgml: Talk about PGP 5 and higher. - -2002-01-11 David Shaw - - * gpg.sgml: Added documentation for --{no-}ask-cert-expire, - --{no-}ask-sig-expire, and revise --expert (it doesn't switch on - the expiration prompt anymore) and --default-check-level (to be - clearer as to what makes a good key check before signing). - -2002-01-07 Werner Koch - - * DETAILS: Removed the comment that unattended key generation is - experimental. It is now a standard feature. - -2001-12-22 David Shaw - - * gpg.sgml: Fixed a few typos. - - * gpg.sgml: Added documentation for --show-photos, - --no-show-photos, --photo-viewer, --nrsign-key, - --default-check-level, --search-keys, --keyserver-options, - --show-notation, --no-show-notation, --show-policy-url, - --no-show-policy-url, --for-your-eyes-only, - --no-for-your-eyes-only, --pgp2, --no-pgp2, - --no-permission-warning, --expert, --no-expert. - -2001-10-31 Werner Koch - - * gpg.sgml: Add a remark on how to get the long key ID. Suggested - by Sebastian Klemke. - -2001-10-23 Werner Koch - - * gpg.sgml: Add missing tag. - -2001-09-28 Werner Koch - - * gpg.sgml: Add a note on option parsing. - -2001-09-24 Werner Koch - - * gpg.sgml: Described --{update,check}-trustdb. - -2001-09-03 Werner Koch - - * gpg.sgml, gpgv.sgml: Removed GDBM stuff. - -2001-08-29 Werner Koch - - * faq.raw: Described how to delete a secret key w/o a public key - and changed the entry on updating the preferences. - -2001-08-08 Werner Koch - - * gpg.sgml: Documented --print-mds and marked the --print-md * as - deprecated because it does not work in the W32 version. Suggested - by John Kane. - (WARNINGS): Typo fix. - (--with-colons): Clarified that the output is in UTF-8. - -2001-08-01 Werner Koch - - * gpg.sgml: Added --ignore-valid-from - -2001-04-20 Werner Koch - - * faq.raw (Maintained-by): Removed note that load-extension is not - available under Windoze. - - * gpg.sgml: Add new --charset UTF-8. - -2001-04-19 Werner Koch - - * faq.raw: Add a note about dates displayed as ????-??-??. - -2001-04-17 Werner Koch - - * Makefile.am (%.texi): Add rules to create .texi from .sgml. - However we can't automate this because automake does not like - .texi files as BUILT_SOURCES. - (%.dvi,%.ps): Removed these rules, because they are not needed - and get in the way of automake's dvi target - - * HACKING: Changed CVS description. - -2001-04-06 Werner Koch - - * gpg.sgml: Small typo fixes by Florian Weimer. - -2001-03-27 Werner Koch - - * gpg.sgml: Add --no-sig-cache and --no-sig-create-check. - -2001-03-23 Werner Koch - - * DETAILS: New status UNEXPECTED. - -2001-03-13 Werner Koch - - * gpg.sgml: Described --fixed-list-mode. - -2001-03-06 Werner Koch - - * gpgv.sgml: Changed some gpg to gpgv. Thanks to John A. Murdie. - -2001-03-03 Werner Koch - - * gpg.sgml: Tell something about the 0x12345678! key ID syntax. - -2001-01-18 Werner Koch - - * README.W32: Changed building instructions for MinGW32/CPD 0.3 - -2001-01-09 Werner Koch - - * DETAILS: Fixed docs for NEED_PASSPHRASE and added USERID_HINT. - -2000-11-30 Werner Koch - - * gpg.sgml: Fixed the description of --verify. Add a short note - the warnings sections. - -2000-10-19 Werner Koch - - * gpg.sgml: Fixed doc for --allow-non-selfsigned-uid. - Add entry for --ignore-crc-error. - -2000-10-18 Werner Koch - - * OpenPGP: Dropped the paragraph that RSA is not implemented. - -2000-10-14 Werner Koch - - * faq.raw: Add an answer to the problem of multiple signatures. - -Wed Oct 4 15:50:18 CEST 2000 Werner Koch - - * gpgv.sgml: New. - * Makefile.am: build it. - -Thu Sep 14 14:20:38 CEST 2000 Werner Koch - - * faq.raw: New. - * Makefile.am: Support to build FAQs - -Wed Jul 12 13:32:06 CEST 2000 Werner Koch - - * gpg.sgml: Add a note about the availability of the GPH. - -2000-07-03 13:59:24 Werner Koch (wk@habibti.openit.de) - - * DETAILS, FAQ: Typo fixes by Yosiaki IIDA. - -2000-05-12 10:57:21 Werner Koch (wk@habibti.openit.de) - - * gpg.sgml: Documented --no-tty. - -2000-03-09 15:01:51 Werner Koch (wk@habibti.openit.de) - - * DETAILS: Ad a short blurb about unattended key generation. - -Wed Feb 9 15:33:44 CET 2000 Werner Koch - - * gpg.sgml: Describe --ignore-time-conflict. - - * gpg.sgml: Fixed a few typos. Thanks to Holger Trapp. - -Wed Jan 5 11:51:17 CET 2000 Werner Koch - - * FAQ: Enhanced answer for the 3des-s2k bug. - -Sat Dec 4 12:30:28 CET 1999 Werner Koch - - * gpg.sgml: Add section about the user ID - -Mon Nov 22 11:14:53 CET 1999 Werner Koch - - * gph: Removed the directory from the dist becuase it will - go into it's own package. - -Thu Sep 23 09:52:58 CEST 1999 Werner Koch - - * README.W32: New. - -Mon Sep 6 19:59:08 CEST 1999 Werner Koch - - - * Makefile.am (SUBDIRS): New subdir gph for the manual. - -Thu Jul 22 20:03:03 CEST 1999 Werner Koch - - - * gpg.sgml (--always-trust): Added. - -Wed Jul 14 19:42:08 CEST 1999 Werner Koch - - - * Makefile.am: Create a dummy man page if docbook-to-man is missing. - -Wed Jun 16 20:16:21 CEST 1999 Werner Koch - - - * gpg1.pod: Removed. - * gpg.sgml: New. Replaces the pod file - * Makefile.am: Add rule to make a man file from sgml - -Tue Jun 15 12:21:08 CEST 1999 Werner Koch - - - * Makefile.in.in: Use DESTDIR. - -Mon May 31 19:41:10 CEST 1999 Werner Koch - - * gpg.1pod: Enhanced the Bugs section (Michael). - -Wed Feb 10 17:15:39 CET 1999 Werner Koch - - - * gpg.1pod: Spelling and grammar corrections (John A. Martin) - * FAQ: Ditto. - * DETAILS: Ditto. - - - Copyright 1998, 1999, 2000, 2001 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 : -uid:f::::::::Werner Koch : -sub:f:1536:16:06AD222CADF6A6E1:919537416:1036177416:::::e: -fpr:::::::::CF8BCC4B18DE08FCD8A1615906AD222CADF6A6E1: -sub:r:1536:20:5CE086B5B5A18FF4:899817788:1025961788:::::esc: -fpr:::::::::AB059359A3B81F410FCFF97F5CE086B5B5A18FF4: - -The double --with-fingerprint prints the fingerprint for the subkeys -too, --fixed-list-mode is themodern listing way printing dates in -seconds since Epoch and does not merge the first userID with the pub -record. - - - 1. Field: Type of record - pub = public key - crt = X.509 certificate - crs = X.509 certificate and private key available - sub = subkey (secondary key) - sec = secret key - ssb = secret subkey (secondary key) - uid = user id (only field 10 is used). - uat = user attribute (same as user id except for field 10). - sig = signature - rev = revocation signature - fpr = fingerprint: (fingerprint is in field 10) - pkd = public key data (special field format, see below) - grp = reserved for gpgsm - rvk = revocation key - - 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 - The signature with the keyid is good. For each signature only - one of the three codes GOODSIG, BADSIG or ERRSIG will be - emitted and they may be used as a marker for a new signature. - The username is the primary one encoded in UTF-8 and %XX - escaped. - - EXPSIG - The signature with the keyid is good, but the signature is - expired. The username is the primary one encoded in UTF-8 and - %XX escaped. - - EXPKEYSIG - The signature with the keyid is good, but the signature was - made by an expired key. The username is the primary one - encoded in UTF-8 and %XX escaped. - - BADSIG - The signature with the keyid has not been verified okay. - The username is the primary one encoded in UTF-8 and %XX - escaped. - - ERRSIG \ - - It was not possible to check the signature. This may be - caused by a missing public key or an unsupported algorithm. - A RC of 4 indicates unknown algorithm, a 9 indicates a missing - public key. The other fields give more information about - this signature. sig_class is a 2 byte hex-value. - - VALIDSIG - - - The signature with the keyid is good. This is the same - as GOODSIG but has the fingerprint as the argument. Both - status lines are emitted for a good signature. - 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 - 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 - The message is encrypted to this keyid. - keytype is the numerical value of the public key algorithm, - keylength is the length of the key or 0 if it is not known - (which is currently always the case). - - NODATA - No data has been found. Codes for what are: - 1 - No armored data. - 2 - Expected a packet but did not found one. - 3 - Invalid packet found, this may indicate a non OpenPGP message. - You may see more than one of these status lines. - - UNEXPECTED - Unexpected data has been encountered - 0 - not further specified 1 - - - TRUST_UNDEFINED - TRUST_NEVER - TRUST_MARGINAL - TRUST_FULLY - TRUST_ULTIMATE - For good signatures one of these status lines are emitted - to indicate how trustworthy the signature is. The error token - values are currently only emiited by gpgsm. - - SIGEXPIRED - This is deprecated in favor of KEYEXPIRED. - - KEYEXPIRED - 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 - Issued whenever a passphrase is needed. - keytype is the numerical value of the public key algorithm - or 0 if this is not applicable, keylength is the length - of the key or 0 if it is not known (this is currently always the case). - - NEED_PASSPHRASE_SYM - Issued whenever a passphrase for symmetric encryption is needed. - - MISSING_PASSPHRASE - No passphrase was supplied. An application which encounters this - message may want to stop parsing immediately because the next message - will probably be a BAD_PASSPHRASE. However, if the application - is a wrapper around the key edit menu functionality it might not - make sense to stop parsing but simply ignoring the following - BAD_PASSPHRASE. - - BAD_PASSPHRASE - The supplied passphrase was wrong or not given. In the latter case - you may have seen a MISSING_PASSPHRASE. - - GOOD_PASSPHRASE - The supplied passphrase was good and the secret key material - is therefore usable. - - DECRYPTION_FAILED - The symmetric decryption failed - one reason could be a wrong - passphrase for a symmetrical encrypted message. - - DECRYPTION_OKAY - The decryption process succeeded. This means, that either the - correct secret key has been used or the correct passphrase - for a conventional encrypted message was given. The program - itself may return an errorcode because it may not be possible to - verify a signature for some reasons. - - NO_PUBKEY - NO_SECKEY - The key is not available - - IMPORTED - The keyid and name of the signature just imported - - IMPORT_OK [] - The key with the primary key's FINGERPRINT has been imported. - Reason flags: - 0 := Not actually changed - 1 := Entirely new key. - 2 := New user IDs - 4 := New signatures - 8 := New subkeys - 16 := Contains private key. - The flags may be ORed. - - IMPORT_PROBLEM [] - Issued for each import failure. Reason codes are: - 0 := "No specific reason given". - 1 := "Invalid Certificate". - 2 := "Issuer Certificate missing". - 3 := "Certificate Chain too long". - 4 := "Error storing certificate". - - IMPORT_RES - - Final statistics on import process (this is one long line) - - FILE_START - Start processing a file . indicates the performed - operation: - 1 - verify - 2 - encrypt - 3 - decrypt - - FILE_DONE - Marks the end of a file processing which has been started - by FILE_START. - - BEGIN_DECRYPTION - END_DECRYPTION - Mark the start and end of the actual decryption process. These - are also emitted when in --list-only mode. - - BEGIN_ENCRYPTION - END_ENCRYPTION - Mark the start and end of the actual encryption process. - - 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 - 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 - 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 : - 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 - NOTATION_DATA - name and string are %XX escaped; the data may be splitted - among several notation_data lines. - - USERID_HINT - Give a hint about the user ID for a certain keyID. - - POLICY_URL - string is %XX escaped - - BEGIN_STREAM - END_STREAM - Issued by pipemode. - - INV_RECP - Issued for each unusable recipient. The reasons codes - currently in use are: - 0 := "No specific reason given". - 1 := "Not Found" - 2 := "Ambigious specification" - 3 := "Wrong key usage" - 4 := "Key revoked" - 5 := "Key expired" - 6 := "No CRL known" - 7 := "CRL too old" - 8 := "Policy mismatch" - 9 := "Not a secret key" - 10 := "Key not trusted" - - Note that this status is also used for gpgsm's SIGNER command - where it relates to signer's of course. - - NO_RECP - Issued when no recipients are usable. - - ALREADY_SIGNED - Warning: This is experimental and might be removed at any time. - - TRUNCATED - The output was truncated to MAXNO items. This status code is issued - for certain external requests - - ERROR - This is a generic error status message, it might be followed - by error location specific data. and - should not contain a space. - - ATTRIBUTE - - This is one long line issued for each attribute subpacket when - an attribute packet is seen during key listing. is the - fingerprint of the key. is the length of the - attribute subpacket. is the attribute type - (1==image). / indicates that this is the Nth - indexed subpacket of count total subpackets in this attribute - packet. and are from the - self-signature on the attribute packet. If the attribute - packet does not have a valid self-signature, then the - timestamp is 0. are a bitwise OR of: - 0x01 = this attribute packet is a primary uid - 0x02 = this attribute packet is revoked - 0x04 = this attribute packet is expired - - -Key generation -============== - Key generation shows progress by printing different characters to - stderr: - "." Last 10 Miller-Rabin tests failed - "+" Miller-Rabin test succeeded - "!" Reloading the pool with fresh prime numbers - "^" Checking a new value for the generator - "<" Size of one factor decreased - ">" Size of one factor increased - - The prime number for ElGamal is generated this way: - - 1) Make a prime number q of 160, 200, 240 bits (depending on the keysize) - 2) Select the length of the other prime factors to be at least the size - of q and calculate the number of prime factors needed - 3) Make a pool of prime numbers, each of the length determined in step 2 - 4) Get a new permutation out of the pool or continue with step 3 - if we have tested all permutations. - 5) Calculate a candidate prime p = 2 * q * p[1] * ... * p[n] + 1 - 6) Check that this prime has the correct length (this may change q if - it seems not to be possible to make a prime of the desired length) - 7) Check whether this is a prime using trial divisions and the - Miller-Rabin test. - 8) Continue with step 4 if we did not find a prime in step 7. - 9) Find a generator for that prime. - - This algorithm is based on Lim and Lee's suggestion from the - Crypto '97 proceedings p. 260. - - -Unattended key generation -========================= -This feature allows unattended generation of keys controlled by a -parameter file. To use this feature, you use --gen-key together with ---batch and feed the parameters either from stdin or from a file given -on the commandline. - -The format of this file is as follows: - o Text only, line length is limited to about 1000 chars. - o You must use UTF-8 encoding to specify non-ascii characters. - o Empty lines are ignored. - o Leading and trailing spaces are ignored. - o A hash sign as the first non white space character indicates a comment line. - o Control statements are indicated by a leading percent sign, the - arguments are separated by white space from the keyword. - o Parameters are specified by a keyword, followed by a colon. Arguments - are separated by white space. - o The first parameter must be "Key-Type", control statements - may be placed anywhere. - o Key generation takes place when either the end of the parameter file - is reached, the next "Key-Type" parameter is encountered or at the - control statement "%commit" - o Control statements: - %echo - Print . - %dry-run - Suppress actual key generation (useful for syntax checking). - %commit - Perform the key generation. An implicit commit is done - at the next "Key-Type" parameter. - %pubring - %secring - Do not write the key to the default or commandline given - keyring but to . This must be given before the first - commit to take place, duplicate specification of the same filename - is ignored, the last filename before a commit is used. - The filename is used until a new filename is used (at commit points) - and all keys are written to that file. If a new filename is given, - this file is created (and overwrites an existing one). - Both control statements must be given. - o The order of the parameters does not matter except for "Key-Type" - which must be the first parameter. The parameters are only for the - generated keyblock and parameters from previous key generations are not - used. Some syntactically checks may be performed. - The currently defined parameters are: - Key-Type: | - Starts a new parameter block by giving the type of the - primary key. The algorithm must be capable of signing. - This is a required parameter. - Key-Length: - Length of the key in bits. Default is 1024. - Key-Usage: - Space or comma delimited list of key usage, allowed values are - "encrypt" and "sign". This is used to generate the key flags. - Please make sure that the algorithm is capable of this usage. - Subkey-Type: | - This generates a secondary key. Currently only one subkey - can be handled. - Subkey-Length: - Length of the subkey in bits. Default is 1024. - Subkey-Usage: - Similar to Key-Usage. - Passphrase: - If you want to specify a passphrase for the secret key, - enter it here. Default is not to use any passphrase. - Name-Real: - Name-Comment: - Name-Email: - The 3 parts of a key. Remember to use UTF-8 here. - If you don't give any of them, no user ID is created. - Expire-Date: |([d|w|m|y]) - Set the expiration date for the key (and the subkey). It - may either be entered in ISO date format (2000-08-15) or as - number of days, weeks, month or years. Without a letter days - are assumed. - Preferences: - Set the cipher, hash, and compression preference values for - this key. This expects the same type of string as "setpref" - in the --edit menu. - Revoker: : [sensitive] - Add a designated revoker to the generated key. Algo is the - public key algorithm of the designated revoker (i.e. RSA=1, - DSA=17, etc.) Fpr is the fingerprint of the designated - revoker. The optional "sensitive" flag marks the designated - revoker as sensitive information. Only v4 keys may be - designated revokers. - -Here is an example: -$ cat >foo < -ssb 1024g/8F70E2C0 2000-03-09 - - - -Layout of the TrustDB -===================== -The TrustDB is built from fixed length records, where the first byte -describes the record type. All numeric values are stored in network -byte order. The length of each record is 40 bytes. The first record of -the DB is always of type 1 and this is the only record of this type. - -FIXME: The layout changed, document it here. - - Record type 0: - -------------- - Unused record, can be reused for any purpose. - - Record type 1: - -------------- - Version information for this TrustDB. This is always the first - record of the DB and the only one with type 1. - 1 byte value 1 - 3 bytes 'gpg' magic value - 1 byte Version of the TrustDB (2) - 1 byte marginals needed - 1 byte completes needed - 1 byte max_cert_depth - The three items are used to check whether the cached - validity value from the dir record can be used. - 1 u32 locked flags - 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 , - where , binary 10 1000 11, is an indefinite-length packet. The - proper interpretation is "until the end of the enclosing structure", - although it should never appear outermost (where the enclosing - structure is a file). - -+ This will be changed with another version, where the new meaning of -+ the value 11 (see below) will also take place. -+ -+ A value of 11 for other packets enables a special length encoding, -+ which is used in case, where the length of the following packet can -+ not be determined prior to writing the packet; especially this will -+ be used if large amounts of data are processed in filter mode. -+ -+ It works like this: After the CTB (with a length field of 11) a -+ marker field is used, which gives the length of the following datablock. -+ This is a simple 2 byte field (MSB first) containing the amount of data -+ following this field, not including this length field. After this datablock -+ another length field follows, which gives the size of the next datablock. -+ A value of 0 indicates the end of the packet. The maximum size of a -+ data block is limited to 65534, thereby reserving a value of 0xffff for -+ future extensions. These length markers must be inserted into the data -+ stream just before writing the data out. -+ -+ This 2 byte field is large enough, because the application must buffer -+ this amount of data to prepend the length marker before writing it out. -+ Data block sizes larger than about 32k doesn't make any sense. Note -+ that this may also be used for compressed data streams, but we must use -+ another packet version to tell the application that it can not assume, -+ that this is the last packet. - - -GNU extensions to the S2K algorithm -=================================== -S2K mode 101 is used to identify these extensions. -After the hash algorithm the 3 bytes "GNU" are used to make -clear that these are extensions for GNU, the next bytes gives the -GNU protection mode - 1000. Defined modes are: - 1001 - do not store the secret part at all - - -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') - -"@t" - Signed text follows. - This emits the control packet (2, 'B') - -"@." - End of operation. The final control packet forces signature - verification -"@>" - End of stream - - - - - - -Other Notes -=========== - * For packet version 3 we calculate the keyids this way: - RSA := low 64 bits of n - ELGAMAL := build a v3 pubkey packet (with CTB 0x99) and calculate - a rmd160 hash value from it. This is used as the - fingerprint and the low 64 bits are the keyid. - - * Revocation certificates consist only of the signature packet; - "import" knows how to handle this. The rationale behind it is - to keep them small. - - - - - - - -Keyserver Message Format -========================= - -The keyserver may be contacted by a Unix Domain socket or via TCP. - -The format of a request is: - -==== -command-tag -"Content-length:" digits -CRLF -======= - -Where command-tag is - -NOOP -GET -PUT -DELETE - - -The format of a response is: - -====== -"GNUPG/1.0" status-code status-text -"Content-length:" digits -CRLF -============ -followed by bytes of data - - -Status codes are: - - o 1xx: Informational - Request received, continuing process - - o 2xx: Success - The action was successfully received, understood, - and accepted - - o 4xx: Client Error - The request contains bad syntax or cannot be - fulfilled - - o 5xx: Server Error - The server failed to fulfill an apparently - valid request - - - -Documentation on HKP (the http keyserver protocol): - -A minimalistic HTTP server on port 11371 recognizes a GET for /pks/lookup. -The standard http URL encoded query parameters are this (always key=value): - -- op=index (like pgp -kv), op=vindex (like pgp -kvv) and op=get (like - pgp -kxa) - -- search=. This is a list of words that must occur in the key. - The words are delimited with space, points, @ and so on. The delimiters - are not searched for and the order of the words doesn't matter (but see - next option). - -- exact=on. This switch tells the hkp server to only report exact matching - keys back. In this case the order and the "delimiters" are important. - -- fingerprint=on. Also reports the fingerprints when used with 'index' or - 'vindex' - -The keyserver also recognizes http-POSTs to /pks/add. Use this to upload -keys. - - -A better way to do this would be a request like: - - /pks/lookup/?op= - -This can be implemented using Hurd's translator mechanism. -However, I think the whole key server stuff has to be re-thought; -I have some ideas and probably create a white paper. - 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 - -] -[$usenetheader= -] -[$maintainer=David D. Scribner, ] -[$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] - -[H HR] - - - GENERAL - - 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. - - 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 for details. - - - SOURCES of INFORMATION - - 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][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][H/a],[H br] - GnuPG-devel: [H a href=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] - - 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. - - - INSTALLATION - - 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] - - [H /a] - - 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][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][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. - - - 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/][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] - - - USAGE - - 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 - [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. - - 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). - - 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. - - 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] - - 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. - - 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"). - - 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. - - 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. - - 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". - - 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. - - 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. - - 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] - - 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. - - 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] - - 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]. - - 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]. - - 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). - - 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. - - - COMPATIBILITY ISSUES - - - 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 ), 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] - - 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 - 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. - - (removed) - - (empty) - - 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. - - 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. - - 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. - - 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 - [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 - [H /pre] - - - PROBLEMS and ERROR MESSAGES - - 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. - - 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. - - 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. - - 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. - - GnuPG 1.0.4 doesn't create ~/.gnupg ... - - That's a known bug, already fixed in newer versions. - - An ElGamal signature does not verify anymore since version 1.0.2 ... - - Use the option --emulate-md-encode-bug. - - Old versions of GnuPG can't verify ElGamal signatures - - Update to GnuPG 1.0.2 or newer. - - 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. - - 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. - - 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. - - 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. - - 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. - - 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. - - 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. - - 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]. - - 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. - - 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, å (0xE5 in ISO-8859-1) becomes Ã¥ (0xC3, - 0xA5). This might also be the reason why keyservers can't find - your key. - - 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. - - 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] - - - ADVANCED TOPICS - - 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. - - 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. - - 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). - - 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. - - 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 (..//..). - - 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. - - 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. - - 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. - - - 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 - - * 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 : -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 - "#" 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 - 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 - La signature keyid n'a pas été vérifiée correctement. - - ERRSIG \ - - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - NO_SECKEY - La clef n'est pas utilisable. - - IMPORTED - Le keyid et la signature ont été importés. - - IMPORTED_RES - - Statistiques finales sur le processus d'importation (cette ligne est longue!) - - FILE_START - Début de traitement du fichier . 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 - 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 - Une clef a été créée - type: 'B' = primaire et sous-clef - 'P' = primaire - 'S' = sous-clef - - SESSION_KEY : - 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 - NOTATION_DATA - 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 - Donne un indice sur l'ID utilisateur pour un keyID donné. - - POLICY_URL - 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 - Affiche - - %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 - %secring - Ne renvoie pas la clef vers le sortie par défaut ou dans le keyring - indiqué en ligne de commande, mais vers le fichier . 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: | - 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: - Indique la taille de la clef, en bits. La valeur par défaut est - 1024. - - Subkey-Type: | - Permet de produire une clef secondaire. Actuellement, seule une - sous-clef peut être gérée. - - Subkey-Length: - Taille de la sous-clef en bits. La valeur par défaut est - 1024. - - Passphrase: - 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: - Name-Comment: - Name-Email: - 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: |([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 < -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 à : 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') - -"@t" - Le texte signé suit. - Ceci émet le paquet de contrôle (2, 'B') - -"@." - 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 -PUT -DELETE - - -Le format de réponse utilisé est : - -====== -"GNUPG/1.0" status-code status-text -"Content-length:" digits -CRLF -============ - -suivi par 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=. 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/?op= - -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 -Traduction : Gilbert Fernandes - -Ce document est la FAQ de GnuPG. La dernière version HTML est -disponble ici : - -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 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 : 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 : - - - -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. - - - -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 : - - - -Ou depuis l'un des mirroirs : - - - -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 à : - - - -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 : - - - -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 : - - - -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 - -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 - -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 - -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 - -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 @@ - - - - -directory"> -file"> -&ParmFile;"> -files"> -&ParmFiles;"> -names"> -&ParmNames;"> -name"> -&ParmName;"> -key IDs"> -n"> -flags"> -string"> -value"> -name=value"> -name=value1 value2 value3 ..."> -]> - - - - gpg - 1 - GNU Tools - - - encryption and signing tool - - - -gpg - --homedir - --options - - command - - - - - - DESCRIPTION - - - -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 "--". - - - - -COMMANDS - - - - - - --s, --sign - -Make a signature. This command may be combined -with --encrypt. - - - - ---clearsign - -Make a clear text signature. - - - - --b, --detach-sign - -Make a detached signature. - - - - --e, --encrypt - -Encrypt data. This option may be combined with --sign. - - - - --c, --symmetric - -Encrypt with symmetric cipher only. -This command asks for a passphrase. - - - ---store - -Store only (make a simple RFC1991 packet). - - - - ---decrypt &OptParmFile; - -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. - - - - ---verify - - -Assume that - as the second filename. -For security reasons a detached signature cannot read the signed -material from stdin without denoting it in the above way. - - - ---verify-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. - - - ---encrypt-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. - - - ---decrypt-files - -The same as --encrypt-files with the difference that files will be -decrypted. The syntax or the filenames is the same. - - - - - ---list-keys &OptParmNames; ---list-public-keys &OptParmNames; - -List all keys from the public keyrings, or just the -ones given on the command line. - - - - ---list-secret-keys &OptParmNames; - -List all keys from the secret keyrings, or just the ones given on the -command line. A '#' after the letters 'sec' means that the secret key -is not usable (for example, if it was created via ---export-secret-subkeys). - - - - ---list-sigs &OptParmNames; - -Same as --list-keys, but the signatures are listed too. - - - - ---check-sigs &OptParmNames; - -Same as --list-sigs, but the signatures are verified. - - - ---fingerprint &OptParmNames; - -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. - - - - ---list-packets - -List only the sequence of packets. This is mainly -useful for debugging. - - - - ---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 doc/DETAILS -in the source distribution on how to use this. - - - - ---edit-key &ParmName; - -Present a menu which enables you to do all key -related tasks: - - - - sign - -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. - - lsign - -Same as --sign but the signature is marked as -non-exportable and will therefore never be used -by others. This may be used to make keys valid -only in the local environment. - - nrsign - -Same as --sign but the signature is marked as non-revocable and can -therefore never be revoked. - - nrlsign - -Combines the functionality of nrsign and lsign to make a signature -that is both non-revocable and -non-exportable. - - revsig - -Revoke a signature. For every signature which has been generated by -one of the secret keys, GnuPG asks whether a revocation certificate -should be generated. - - - trust - -Change the owner trust value. This updates the -trust-db immediately and no save is required. - - disable - enable - -Disable or enable an entire key. A disabled key can normally not be used -for encryption. - - adduid - -Create an alternate user id. - - addphoto - -Create a photographic user id. - - deluid - -Delete a user id. - - addkey - -Add a subkey to this key. - - delkey - -Remove a subkey. - - 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). - - revkey - -Revoke a subkey. - - expire - -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. - - - passwd - -Change the passphrase of the secret key. - - 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. - - - uid &ParmN; - -Toggle selection of user id with index &ParmN;. -Use 0 to deselect all. - - key &ParmN; - -Toggle selection of subkey with index &ParmN;. -Use 0 to deselect all. - - check - -Check all selected user ids. - - showphoto - -Display the selected photographic user -id. - - pref - -List preferences from the selected user ID. This shows the actual -preferences, without including any implied preferences. - - - showpref - -More verbose preferences listing for the selected user ID. This shows -the preferences in effect by including the implied preferences of -3DES (cipher), SHA-1 (digest), and Uncompressed (compression) if they -are not already included in the preference list. - - - setpref &ParmString; - -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. - - - 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. - - - toggle - -Toggle between public and secret key listing. - - save - -Save all changes to the key rings and quit. - - quit - -Quit the program without updating the -key rings. - - -The listing shows you the key with its secondary -keys and all user ids. Selected keys or user ids -are indicated by an asterisk. The trust value is -displayed with the primary key: the first is the -assigned owner trust and the second is the calculated -trust value. Letters are used for the values: - - -No ownertrust assigned / not yet calculated. - eTrust -calculation has failed; probably due to an expired key. - qNot enough information for calculation. - nNever trust this key. - mMarginally trusted. - fFully trusted. - uUltimately trusted. - - - - ---sign-key &ParmName; - -Signs a public key with your secret key. This is a shortcut version of -the subcommand "sign" from --edit. - - - ---lsign-key &ParmName; - -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. - - - ---nrsign-key &ParmName; - -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. - - - ---delete-key &ParmName; - -Remove key from the public keyring. In batch mode either --yes is -required or the key must be specified by fingerprint. This is a -safeguard against accidental deletion of multiple keys. - - - ---delete-secret-key &ParmName; - -Remove key from the secret and public keyring. In batch mode the key -must be specified by fingerprint. - - - ---delete-secret-and-public-key &ParmName; - -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. - - - ---gen-revoke - -Generate a revocation certificate for the complete key. To revoke -a subkey or a signature, use the --edit command. - - - ---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. - - - ---export &OptParmNames; - -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. - - - - ---send-keys &OptParmNames; - -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. - - - - ---export-all &OptParmNames; - -Same as --export, but also exports keys which -are not compatible with OpenPGP. - - - - ---export-secret-keys &OptParmNames; ---export-secret-subkeys &OptParmNames; - -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. - - - - ---import &OptParmFiles; ---fast-import &OptParmFiles; - -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. - - - - ---recv-keys &ParmKeyIDs; - -Import the keys with the given key IDs from a keyserver. Option ---keyserver must be used to give the name of this keyserver. - - - ---search-keys &OptParmNames; - -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. - - - ---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. - - - ---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. - - - - ---export-ownertrust &OptParmFile; - -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. - - - ---import-ownertrust &OptParmFiles; - -Update the trustdb with the ownertrust values stored -in &ParmFiles; (or stdin if not given); existing -values will be overwritten. - - - ---rebuild-keydb-caches - -When updating from version 1.0.6 to 1.0.7 this command should be used -to create signature caches in the keyring. It might be handy in other -situations too. - - - ---print-md algo &OptParmFiles; ---print-mds &OptParmFiles; - -Print message digest of algorithm ALGO for all given files or stdin. -With the second form (or a deprecated "*" as algo) digests for all -available algorithms are printed. - - - - ---gen-random 0|1|2 - count - -Emit COUNT random bytes of the given quality level. 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! - - - ---gen-prime mode - bits - qbits - -Use the source, Luke :-). The output format is still subject to change. - - - - ---version - -Print version information along with a list -of supported algorithms. - - - - ---warranty - -Print warranty information. - - - - --h, --help - -Print usage information. This is a really long list even though it doesn't list -all options. - - - - - - - - -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. - - - - - - - - --a, --armor - -Create ASCII armored output. - - - - --o, --output &ParmFile; - -Write output to &ParmFile;. - - - - --u, --local-user &ParmName; - -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. - - - - ---default-key &ParmName; - -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. - - - - --r, --recipient &ParmName; - - -Encrypt for user id &ParmName;. If this option is not -specified, GnuPG asks for the user-id unless --default-recipient is given - - - ---default-recipient &ParmName; - -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. - - - ---default-recipient-self - -Use the default key as default recipient if option --recipient is not used and -don't ask if this is a valid one. The default key is the first one from the -secret keyring or the one set with --default-key. - - - - ---no-default-recipient - -Reset --default-recipient and --default-recipient-self. - - - ---encrypt-to &ParmName; - -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. - - - - ---no-encrypt-to - -Disable the use of all --encrypt-to keys. - - - - --v, --verbose - -Give more information during processing. If used -twice, the input data is listed in detail. - - - - --q, --quiet - -Try to be as quiet as possible. - - - - --z &ParmN;, --compress &ParmN; - -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). - - - - --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. - - - - --n, --dry-run - -Don't make any changes (this is not completely implemented). - - - - --i, --interactive - -Prompt before overwriting any files. - - - - ---batch - -Use batch mode. Never ask, do not allow interactive -commands. - - - ---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. - - - - ---no-batch - -Disable batch mode. This may be of use if --batch -is enabled from an options file. - - - - ---yes - -Assume "yes" on most questions. - - - - ---no - - Assume "no" on most questions. - - - ---default-cert-check-level &ParmN; - -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. - - - - - ---trusted-key long key ID - -Assume that the specified key (which must be given -as a full 8 byte key ID) is as trustworthy as one of -your own secret keys. This option is useful if you -don't want to keep your secret keys (or one of them) -online but still want to be able to check the validity of a given -recipient's or signator's key. - - - ---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. - - - - ---keyserver &ParmName; - -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. - -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. - - - ---keyserver-options 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: - - - -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). - - - -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. - - - -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. - - - -use-temp-files - -On most Unix-like platforms, GnuPG communicates with the keyserver -helper program via pipes, which is the most efficient method. This -option forces GnuPG to use temporary files to communicate. On some -platforms (such as Win32 and RISC OS), this option is always enabled. - - - -keep-temp-files - -If using `use-temp-files', do not delete the temp files after using -them. This option is useful to learn the keyserver communication -protocol by reading the temporary files. - - - -verbose - -Tell the keyserver helper program to be more verbose. This option can -be repeated multiple times to increase the verbosity level. - - - -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". - - - -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. - - - - - - ---import-options parameters - -This is a space or comma delimited string that gives options for -importing keys. Options can be prepended with a `no-' to give the -opposite meaning. The options are: - - - -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. - - - -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. - - - - - - ---export-options parameters - -This is a space or comma delimited string that gives options for -exporting keys. Options can be prepended with a `no-' to give the -opposite meaning. The options are: - - - -include-non-rfc - -Include non-RFC compliant keys in the export. Defaults to yes. - - - -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. - - - -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. - - - -include-sensitive-revkeys - -Include designated revoker information that was marked as -"sensitive". Defaults to no. - - - - - - ---show-photos - -Causes --list-keys, --list-sigs, --list-public-keys, ---list-secret-keys, and verifying a signature to also display the -photo ID attached to the key, if any. -See also --photo-viewer. - - - ---no-show-photos - -Resets the --show-photos flag. - - - ---photo-viewer &ParmString; - -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" - - - ---exec-path &ParmString; - -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. - - - ---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. - - - ---keyring &ParmFile; - -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: -"gnupg-ring:" is the default one. -It might make sense to use it together with --no-default-keyring. - - - - ---secret-keyring &ParmFile; - -Same as --keyring but for the secret keyrings. - - - - ---homedir &ParmDir; - -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". - - - - ---charset &ParmName; - -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: - - -iso-8859-1This is the Latin 1 set. - - -iso-8859-2The Latin 2 set. - - -iso-8859-15This is currently an alias for -the Latin 1 set. - - -koi8-rThe usual Russian set (rfc1489). - - -utf-8Bypass all translations and assume -that the OS uses native UTF-8 encoding. - - - - - - ---utf8-strings ---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. - - - - ---options &ParmFile; - -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. - - - - ---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. - - - - ---load-extension &ParmName; - -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. - - - - ---debug &ParmFlags; - -Set debugging flags. All flags are or-ed and &ParmFlags; may -be given in C syntax (e.g. 0x0042). - - - - ---debug-all - - Set all useful debugging flags. - - - - ---status-fd &ParmN; - -Write special status strings to the file descriptor &ParmN;. -See the file DETAILS in the documentation for a listing of them. - - - - ---logger-fd &ParmN; - -Write log output to file descriptor &ParmN; and not to stderr. - - - - ---attribute-fd &ParmN; - -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. - - - - ---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. - - - ---no-sk-comments - -Resets the --sk-comments option. - - - ---no-comment - -See --sk-comments. This option is deprecated and may be removed soon. - - - - ---comment &ParmString; - -Use &ParmString; as comment string in clear text signatures. -The default is not do write a comment string. - - - - ---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. - - - - ---no-version - -Omit the version string in clear text signatures. - - - - ---emit-version - -Force to write the version string in clear text -signatures. Use this to overwrite a previous ---no-version from a config file. - - - - --N, --notation-data &ParmNameValue; - -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). - - - ---show-notation - -Show key signature notations in the --list-sigs or --check-sigs -listings. - - - ---no-show-notation - -Do not show key signature notations in the --list-sigs or --check-sigs -listings. - - - ---set-policy-url &ParmString; - -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. - - - ---show-policy-url - -Show any policy URLs set in the --list-sigs or --check-sigs listings. - - - ---no-show-policy-url - -Do not show any policy URLs set in the --list-sigs or --check-sigs -listings. - - - ---set-filename &ParmString; - -Use &ParmString; as the name of file which is stored in -messages. - - - ---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. - ---no-for-your-eyes-only - -Resets the --for-your-eyes-only flag. - ---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. - - - - ---completes-needed &ParmN; - -Number of completely trusted users to introduce a new -key signer (defaults to 1). - - - - ---marginals-needed &ParmN; - -Number of marginally trusted users to introduce a new -key signer (defaults to 3) - - - - ---max-cert-depth &ParmN; - -Maximum depth of a certification chain (default is 5). - - - - ---cipher-algo &ParmName; - -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. - - - - ---digest-algo &ParmName; - -Use &ParmName; as the message digest algorithm. Running the program -with the command --version yields a list of supported algorithms. - - - - ---cert-digest-algo &ParmName; - -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. - - - - ---s2k-cipher-algo &ParmName; - -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. - - - - ---s2k-digest-algo &ParmName; - -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. - - - - ---s2k-mode &ParmN; - -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. - - - - ---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). - - - - ---compress-algo &ParmN; - -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. - - - - ---disable-cipher-algo &ParmName; - -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. - - - ---disable-pubkey-algo &ParmName; - -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. - - - ---no-sig-cache - -Do not cache the verification status of key signatures. -Caching gives a much better performance in key listings. However, if -you suspect that your public keyring is not save against write -modifications, you can use this option to disable the caching. It -probably does not make sense to disable it because all kind of damage -can be done if someone else has write access to your public keyring. - - - ---no-sig-create-check - -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. - - - ---auto-check-trustdb - -If GnuPG feels that its information about the Web-of-Trust has to be -updated, it automatically runs the --check-trustdb command -internally. This may be a time consuming process. - - - ---no-auto-check-trustdb - -Resets the --auto-check-trustdb option. - - - ---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. - - - - ---not-dash-escaped - -This option changes the behavior of cleartext signatures -so that they can be used for patch files. You should not -send such an armored file via email because all spaces -and line endings are hashed too. You can not use this -option for data which has 5 dashes at the beginning of a -line, patch files don't have this. A special armor header -line tells GnuPG about this cleartext signature option. - - - - ---escape-from-lines - -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. - - - - ---passphrase-fd &ParmN; - -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. - -Don't use this option if you can avoid it. - - - ---command-fd &ParmN; - -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. - - - ---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. - - - ---gpg-agent-info - -Override the value of the environment variable -GPG_AGENT_INFO. This is only used when --use-agent has been given - - - - ---rfc1991 - -Try to be more RFC1991 (PGP 2.x) compliant. - - - ---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'. It also disables --textmode -when encrypting. - - - ---no-pgp2 - -Resets the --pgp2 option. - - - ---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' - - - ---no-pgp6 - -Resets the --pgp6 option. - - - ---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. - - - ---no-pgp7 - -Resets the --pgp7 option. - - - ---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. - - - - ---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. - - - ---no-force-v3-sigs - -Reset the --force-v3-sigs option. - - - ---force-v4-certs - -Always use v4 key signatures even on v3 keys. This option also -changes the default hash algorithm for v3 RSA keys from MD5 to SHA-1. - - - ---no-force-v4-certs - -Reset the --force-v4-certs option. - - - - ---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). - - - ---allow-non-selfsigned-uid - -Allow the import and use of keys with user IDs which are not -self-signed. This is not recommended, as a non self-signed user ID is -trivial to forge. - - - ---no-allow-non-selfsigned-uid - -Reset the --allow-non-selfsigned-uid option. - - - ---allow-freeform-uid - -Disable all checks on the form of the user ID while generating a new -one. This option should only be used in very special environments as -it does not ensure the de-facto standard format of user IDs. - - - - ---ignore-time-conflict - -GnuPG normally checks that the timestamps associated with keys and -signatures have plausible values. However, sometimes a signature seems to -be older than the key due to clock problems. This option makes these -checks just a warning. - - - ---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. - - - ---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. - - - ---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. - - - ---lock-once - -Lock the databases the first time a lock is requested -and do not release the lock until the process -terminates. - - - - ---lock-multiple - -Release the locks every time a lock is no longer -needed. Use this to override a previous --lock-once -from a config file. - - - ---lock-never - -Disable locking entirely. This option should be used only in very -special environments, where it can be assured that only one process -is accessing those files. A bootable floppy with a stand-alone -encryption system will probably use this. Improper usage of this -option may lead to data and key corruption. - - - ---no-random-seed-file - -GnuPG uses a file to store its internal random pool over invocations. -This makes random generation faster; however sometimes write operations -are not desired. This option can be used to achieve that with the cost of -slower random generation. - - - - ---no-verbose - -Reset verbose level to 0. - - - - ---no-greeting - -Suppress the initial copyright message but do not -enter batch mode. - - - ---no-secmem-warning - -Suppress the warning about "using insecure memory". - - - ---no-permission-warning - -Suppress the warning about unsafe file permissions. - - - ---no-mdc-warning - -Suppress the warning about missing MDC integrity protection. - - - - ---no-armor - -Assume the input data is not in ASCII armored format. - - - - ---no-default-keyring - -Do not add the default keyrings to the list of -keyrings. - - - - ---skip-verify - -Skip the signature verification step. This may be -used to make the decryption faster if the signature -verification is not needed. - - - - ---with-colons - -Print key listings delimited by colons. Note, that the output will be -encoded in UTF-8 regardless of any --charset setting. - - - - ---with-key-data - -Print key listings delimited by colons (like --with-colons) and print the public key data. - - - ---with-fingerprint - -Same as the command --fingerprint but changes only the format of the output -and may be used together with another command. - - - ---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. - - - ---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. - - - ---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. - - - ---no-literal - -This is not for normal use. Use the source to see for what it might be useful. - - - ---set-filesize - -This is not for normal use. Use the source to see for what it might be useful. - - - ---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. - - - ---show-session-key - -Display the session key used for one message. See --override-session-key -for the counterpart of this option. - - -We think that Key-Escrow is a Bad Thing; however the user should -have the freedom to decide whether to go to prison or to reveal the content of -one specific message without compromising all messages ever encrypted for one -secret key. DON'T USE IT UNLESS YOU ARE REALLY FORCED TO DO SO. - - - ---override-session-key &ParmString; - -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. - - - ---ask-sig-expire - -When making a data signature, prompt for an expiration time. If this -option is not specified, the expiration time is "never". - ---no-ask-sig-expire - -Resets the --ask-sig-expire option. - ---ask-cert-expire - -When making a key signature, prompt for an expiration time. If this -option is not specified, the expiration time is "never". - ---no-ask-cert-expire - -Resets the --ask-cert-expire option. - ---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. - ---no-expert - -Resets the --expert option. - ---merge-only - -Don't insert new keys into the keyrings while doing an import. - - - ---allow-secret-key-import - -This is an obsolete option and is not used anywhere. - - - ---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. - - - ---enable-special-filenames - -This options enables a mode in which filenames of the form --&n, where n is a non-negative decimal number, -refer to the file descriptor n and not to a file with that name. - - - ---no-expensive-trust-checks - -Experimental use only. - - - ---group &ParmNameValues; - -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. - - - ---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. - - - ---personal-cipher-preferences &ParmString; - -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. - - - ---personal-digest-preferences &ParmString; - -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. - - - ---personal-compress-preferences &ParmString; - -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. - - - ---default-preference-list &ParmString; - -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. - - - - - - - - - How to specify a user ID - -There are different ways on how to specify a user ID to GnuPG; -here are some examples: - - - - - - - - - -234567C4 -0F34E556E -01347A56A -0xAB123456 - -Here the key ID is given in the usual short form. - - - - -234AABBCC34567C4 -0F323456784E56EAB -01AB3FED1347A5612 -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). - - - - -1234343434343434C434343434343434 -123434343434343C3434343434343734349A3434 -0E12343434343434343434EAB3484343434343434 -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). - - - - -=Heinrich Heine <heinrichh@uni-duesseldorf.de> - -Using an exact to match string. The equal sign indicates this. - - - - -<heinrichh@uni-duesseldorf.de> - -Using the email address part which must match exactly. The left angle bracket -indicates this email address mode. - - - - -+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. - - - - -Heine -*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. - - - - - - -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. - - - - - - - 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. - - - - - EXAMPLES - - - -gpg -se -r -sign and encrypt for user Bob - - - -gpg --clearsign &ParmFile; -make a clear text signature - - - -gpg -sb &ParmFile; -make a detached signature - - - -gpg --list-keys -show keys - - - -gpg --fingerprint -show fingerprint - - - -gpg --verify -gpg --verify - -Verify the signature of the file but do not output the data. The second form -is used for detached signatures, where - - - - - - - ENVIRONMENT - - - -HOME -Used to locate the default home directory. - - -GNUPGHOME -If set directory used instead of "~/.gnupg". - - -GPG_AGENT_INFO -Used to locate the gpg-agent; 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. - - -http_proxy -Only honored when the keyserver-option -honor-http-proxy is set. - - - - - - - FILES - - - -~/.gnupg/secring.gpg -The secret keyring - - - -~/.gnupg/secring.gpg.lock -and the lock file - - - -~/.gnupg/pubring.gpg -The public keyring - - - -~/.gnupg/pubring.gpg.lock -and the lock file - - - -~/.gnupg/trustdb.gpg -The trust database - - - -~/.gnupg/trustdb.gpg.lock -and the lock file - - - -~/.gnupg/random_seed -used to preserve the internal random pool - - - -~/.gnupg/gpg.conf -Default configuration file - - - -~/.gnupg/options -Old style configuration file; only used when gpg.conf -is not found - - - -/usr[/local]/share/gnupg/options.skel -Skeleton options file - - - -/usr[/local]/lib/gnupg/ -Default location for extensions - - - - - - - - - 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 -command line or using - to specify stdin. - - - - - - 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. - - - - - 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 -@c Please send any bug reports, improvements, comments, -@c patches, etc. to Steve Cheng . - -@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 " -Using an exact to match string. The equal sign indicates this. - -@item -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 @@ - - - - -directory"> -file"> -&ParmFile;"> -files"> -&ParmFiles;"> -names"> -&ParmNames;"> -name"> -&ParmName;"> -key IDs"> -n"> -flags"> -string"> -value"> -name=value"> -]> - - - - gpgv - 1 - GNU Tools - - - signature verification tool - - - -gpgv - - - - - - - DESCRIPTION - - - -This program is a stripped down version of - - - - - -OPTIONS - - - - - - - --v, --verbose - -Give more information during processing. If used -twice, the input data is listed in detail. - - - - --q, --quiet - -Try to be as quiet as possible. - - - - ---keyring &ParmFile; - -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: -"gnupg-ring:" is the default one. -It might make sense to use it together with --no-default-keyring. - - - - ---homedir &ParmDir; - -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". - - - - ---status-fd &ParmN; - -Write special status strings to the file descriptor &ParmN;. -See the file DETAILS in the documentation for a listing of them. - - - - ---logger-fd &ParmN; - -Write log output to file descriptor &ParmN; and not to stderr. - - - - ---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. - - - - - - - - - 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. - - - - - EXAMPLES - - - -gpgv -gpgv - -Verify the signature of the file. The second form -is used for detached signatures, where - - - - - - - ENVIRONMENT - - - -HOME -Used to locate the default home directory. - - -GNUPGHOME -If set directory used instead of "~/.gnupg". - - - - - - - - FILES - - - -~/.gnupg/trustedkeys.gpg -The default keyring with the allowed keys - - - - - - - - - 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 -@c Please send any bug reports, improvements, comments, -@c patches, etc. to Steve Cheng . - -@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 '' >index.html - echo '' >>index.html - echo '' >>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 @@ - - - -$Id$ - - - -Getting Started - - - -&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 . -It also does not explain how to use &gnupg; wisely. -This is covered in Chapters and -. - - - -&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. - - - - -Generating a new keypair - - - -The command-line option -is used to create a new primary keypair. - - -alice% gpg --gen-key -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? - - - - -&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 4Option 3 is to generate an ElGamal keypair that is -not usable for making signatures. 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. - - - -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. - - -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) - - -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. - - - -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. - - -Please specify how long the key should be valid. - 0 = key does not expire - <n> = key expires in n days - <n>w = key expires in n weeks - <n>m = key expires in n months - <n>y = key expires in n years -Key is valid for? (0) - - -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. - - - -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. - - -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) <heinrichh@duesseldorf.de>" - -Real name: - - -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, ⪚, 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. - - - -&Gnupg; needs a passphrase to protect the primary and subordinate -private keys that you keep in your possession. - - -You need a Passphrase to protect your private key. - -Enter passphrase: - - -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;. - - - - -Generating a revocation certificate - - - -After your keypair is created you should immediately generate a revocation -certificate for the primary public key using the option -. -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. - - -alice% gpg --output revoke.asc --gen-revoke mykey -[...] - - -The argument mykey must be a key -specifier, -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 -revoke.asc. -If the 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. - - - - - - -Exchanging keys - - - -To communicate with others you must exchange public keys. -To list the keys on your public keyring use the command-line -option . - - - -alice% gpg --list-keys -/users/alice/.gnupg/pubring.gpg ---------------------------------------- -pub 1024D/BB7576AC 1999-06-04 Alice (Judge) <alice@cyb.org> -sub 1024g/78E9A8FA 1999-06-04 - - - - -Exporting a public key - - - -To send your public key to a correspondent you must first export it. -The command-line option -is used to do this. -It takes an additional argument identifying the public key to export. -As with the option, either the key ID or any part of -the user ID may be used to identify the key to export. - - - -alice% gpg --output alice.gpg --export alice@cyb.org - - - -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 - -Many -command-line options that are frequently used can also be set in a -configuration file. - - -that that -causes output to be generated in an ASCII-armored format similar to -uuencoded documents. -In general, any output from &gnupg;, ⪚, keys, encrypted documents, and -signatures, can be ASCII-armored by adding the option. - - - -alice% gpg --armor --export alice@cyb.org ------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----- - - - - - -Importing a public key - - - -A public key may be added to your public keyring with the - option. - - - -alice% gpg --import blake.gpg -gpg: key 9E98BC16: public key imported -gpg: Total number processed: 1 -gpg: imported: 1 -alice% gpg --list-keys -/users/alice/.gnupg/pubring.gpg ---------------------------------------- -pub 1024D/BB7576AC 1999-06-04 Alice (Judge) <alice@cyb.org> -sub 1024g/78E9A8FA 1999-06-04 - -pub 1024D/9E98BC16 1999-06-04 Blake (Executioner) <blake@cyb.org> -sub 1024g/5C8CBD41 1999-06-04 - - - -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 - -command-line option, but in order to certify the key you must edit it. - - -alice% gpg --edit-key blake@cyb.org - -pub 1024D/9E98BC16 created: 1999-06-04 expires: never trust: -/q -sub 1024g/5C8CBD41 created: 1999-06-04 expires: never -(1) Blake (Executioner) <blake@cyb.org> - -Command> fpr -pub 1024D/9E98BC16 1999-06-04 Blake (Executioner) <blake@cyb.org> - Fingerprint: 268F 448F CCD7 AF34 183E 52D8 9BDE 1A08 9E98 BC16 - - -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. - - - -Command> sign - -pub 1024D/9E98BC16 created: 1999-06-04 expires: never trust: -/q - Fingerprint: 268F 448F CCD7 AF34 183E 52D8 9BDE 1A08 9E98 BC16 - - Blake (Executioner) <blake@cyb.org> - -Are you really sure that you want to sign this key -with your key: "Alice (Judge) <alice@cyb.org>" - -Really sign? - - - -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. - - - -Command> check -uid Blake (Executioner) <blake@cyb.org> -sig! 9E98BC16 1999-06-04 [self-signature] -sig! BB7576AC 1999-06-04 Alice (Judge) <alice@cyb.org> - - - - - - -Encrypting and decrypting documents - - - -To encrypt a document the option - 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 . -The document is compressed for additional security in addition to -encrypting it. - - -alice% gpg --output doc.gpg --encrypt --recipient blake@cyb.org doc - - -The 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. - - - -To decrypt a message the option - 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. - - - -blake% gpg --output doc --decrypt doc.gpg - -You need a passphrase to unlock the secret key for -user: "Blake (Executioner) <blake@cyb.org>" -1024-bit ELG-E key, ID 5C8CBD41, created 1999-06-04 (main key ID 9E98BC16) - -Enter passphrase: - - - -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 - option. - - - -alice% gpg --output doc.gpg --symmetric doc -Enter passphrase: - - - - - -Making and verifying signatures - - - -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. - - - -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. - - - -The command-line option is -used to make a digital signature. -The document to sign is input, and the signed document is output. - - -alice% gpg --output doc.sig --sign doc - -You need a passphrase to unlock the private key for -user: "Alice (Judge) <alice@cyb.org>" -1024-bit DSA key, ID BB7576AC, created 1999-06-04 - -Enter passphrase: - - -The document is compressed before signed, and the output is in binary -format. - - - -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 - option. -To verify the signature and extract the document use the - -option. -The signed document to verify and recover is input and the recovered -document is output. - - - -blake% gpg --output doc --decrypt doc.sig -gpg: Signature made Fri Jun 4 12:02:38 1999 CDT using DSA key ID BB7576AC -gpg: Good signature from "Alice (Judge) <alice@cyb.org>" - - - - -Clearsigned documents - - - -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 - -causes the document to be wrapped in an ASCII-armored signature but -otherwise does not modify the document. - - - -alice% gpg --clearsign doc - -You need a passphrase to unlock the secret key for -user: "Alice (Judge) <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----- - - - - - -Detached signatures - - - -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 - -option. - - - -alice% gpg --output doc.sig --detach-sig doc - -You need a passphrase to unlock the secret key for -user: "Alice (Judge) <alice@cyb.org>" -1024-bit DSA key, ID BB7576AC, created 1999-06-04 - -Enter passphrase: - - - -Both the document and detached signature are needed to verify -the signature. -The option can be to check the -signature. - - - -blake% gpg --verify doc.sig doc -gpg: Signature made Fri Jun 4 12:38:46 1999 CDT using DSA key ID BB7576AC -gpg: Good signature from "Alice (Judge) <alice@cyb.org>" - - - - - - - - - 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 @@ - - - -$Id$ - - - -Concepts - - - -&Gnupg; makes uses of several cryptographic concepts including -symmetric ciphers, -public-key ciphers, and -one-way hashing. -You can make basic use &gnupg; without fully understanding these concepts, -but in order to use it wisely some understanding of them is necessary. - - - -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 -Bruce -Schneier's -"Applied -Cryptography". - - - - -Symmetric ciphers - - - -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. - - - -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. - - - -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 key -space, 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. - - - -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. - - - -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 - -256 possible keys. - -256 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 - -all use 128-bit keys, which means there are 2128 -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. - - - - - -Public-key ciphers - - - -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. - -If there are n people who need to communicate, then - -n(n-1)/2 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. - - - -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 public key and may be given to anybody. -The other key is a private key 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. - - - -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. - -So only n keypairs are needed for n -people to communicate secretly -with one another, - - - -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. - - - -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, - -the attacker must enumerate up to 281-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. - - - - - -Hybrid ciphers - - - -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. - - - -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. - - - -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. - - - -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. - - - - - -Digital signatures - - - -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. - -A simple ehash function is f(x) = 0 -for all integers x. -A more interesting hash function is -f(x) = x -mod 37, which -maps x to the remainder of dividing x by 37. - - - -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. - - - -Some public-key ciphers -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. - - could be used to sign documents. -The signer encrypts the document with his private 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. - - - -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. - - - -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. - - - -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;. - - - - - 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 @@ - - - -$Id$ - - - -Key Management - - - -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 man in the -middle 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. - - - -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 web of -trust 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;. - - - - -Managing your own keypair - - - -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. - - - -The command-line option - -may be used to view a keypair. -For example, - - -chloe% gpg --edit-key chloe@cyb.org -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) <chloe@cyb.org> -(2) Chloe (Plebian) <chloe@tel.net> -Command> - - -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 pub identifies the public master signing key, -and the keyword sub identifies a public subordinate key. -The second column indicates the key's bit length, type, and ID. -The type is D for a DSA key, g for an -encryption-only -ElGamal key, and G 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. - - - -More information about the key can be obtained with interactive commands. -The command toggle -switches between the public and private -components of a keypair if indeed both components are available. - - -Command> toggle - -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) <chloe@cyb.org> -(2) Chloe (Plebian) <chloe@tel.net> - - -The information provided is similar to the listing for the public-key -component. -The keyword sec identifies the private master signing key, -and the keyword sbb identifies the private subordinates keys. -The user IDs from the public key are also listed for convenience. - - - - -Key integrity - - - -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. - - - -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 self-signing, and a public key that has -self-signed user IDs bound to it is called a certificate. - - - - - -As an example, Chloe has two user IDs and three subkeys. -The signatures on the user IDs can be checked with the command -check from the key edit menu. - - -chloe% gpg --edit-key chloe -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) <chloe@cyb.org> -(2) Chloe (Plebian) <chloe@tel.net> - -Command> check -uid Chloe (Jester) <chloe@cyb.org> -sig! 26B6AAE1 1999-06-15 [self-signature] -uid Chloe (Plebian) <chloe@tel.net> -sig! 26B6AAE1 1999-06-15 [self-signature] - - -As expected, the signing key for each signature is the master signing -key with key ID 0x26B6AAE1. -The self-signatures on the subkeys are present in the public key, but -they are not shown by the &gnupg; interface. - - - - - -Adding and deleting key components - - - -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 -adduid. -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 -addkey. -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. - - - -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. - - - -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. - - - -Subkeys and user IDs may also be deleted. -To delete a subkey or user ID you must first select it using the -key or -uid commands respectively. -These commands are toggles. -For example, the command key 2 -selects the second subkey, -and invoking key 2 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 -deluid -actually deletes the user IDs from your key. -Similarly, the command delkey -deletes all selected subkeys from both your public and private keys. - - - -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. - - - - - -Revoking key components - - - -To revoke a subkey it must be selected. -Once selected it may be revoked with the -revkey command. -The key is revoked by adding a revocation self-signature to the key. -Unlike the command-line option , the effect of -revoking a subkey is immediate. - - - -Command> revkey -Do you really want to revoke this key? y - -You need a passphrase to unlock the secret key for -user: "Chloe (Jester) <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) <chloe@cyb.org> -(2) Chloe (Plebian) <chloe@tel.net> - - - -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. - - - -The OpenPGP -First reference to OpenPGP -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 -previously, -correspondents will not trust a user ID with no valid self-signature. - - - -A signature is revoked by using the command -revsig. -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. - - - -Command> revsig -You have signed these user IDs: - Chloe (Jester) <chloe@cyb.org> - signed by B87DBA93 at 1999-06-28 - Chloe (Plebian) <chloe@tel.net> - signed by B87DBA93 at 1999-06-28 -user ID: "Chloe (Jester) <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) <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) <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) <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) <chloe@cyb.org> -(2) Chloe (Plebian) <chloe@tel.net> - - - -A revoked user ID is indicated by the revocation signature on -the ID when the signatures on the key's user IDs are listed. - - - -Command> check -uid Chloe (Jester) <chloe@cyb.org> -sig! B87DBA93 1999-06-28 [self-signature] -uid Chloe (Plebian) <chloe@tel.net> -rev! B87DBA93 1999-06-29 [revocation] -sig! B87DBA93 1999-06-28 [self-signature] - - - -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. - - - - - -Updating a key's expiration time - - - -The expiration time of a key may be updated with the command -expire 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. - - - -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. - - - - - - -Validating other keys on your public keyring - - - -In Chapter 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. - - - -&Gnupg; addresses this problem with a mechanism popularly known -as the web of trust. -In the web of trust model, responsibility for validating public -keys is delegated to people you trust. -For example, suppose - - - -Alice has signed Blake's key, and - - - - -Blake has signed Chloe's key and Dharma's key. - - - - -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. - - - - -Trust in a key's owner - - - -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. - - - - -unknown - - - -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. - - - - - -none - - - -The owner is known to improperly sign other keys. - - - - - -marginal - - - -The owner understands the implications of key signing and -properly validates keys before signing them. - - - - - -full - - - -The owner has an excellent understanding of key signing, -and his signature on a key would be as good as your own. - - - - - -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. - - - -The &gnupg; key editor may be used to adjust your trust in a key's owner. -The command is trust. -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. - - -alice% gpg --edit-key blake - -pub 1024D/8B927C8A created: 1999-07-02 expires: never trust: q/f -sub 1024g/C19EA233 created: 1999-07-02 expires: never -(1) Blake (Executioner) <blake@cyb.org> - -Command> trust -pub 1024D/8B927C8A created: 1999-07-02 expires: never trust: q/f -sub 1024g/C19EA233 created: 1999-07-02 expires: never -(1) Blake (Executioner) <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 - -Your decision? 3 - -pub 1024D/8B927C8A created: 1999-07-02 expires: never trust: m/f -sub 1024g/C19EA233 created: 1999-07-02 expires: never -(1) Blake (Executioner) <blake@cyb.org> - -Command> quit -[...] - - -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 - -second - -&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 -owner-trust to -distinguish it from trust in a key. - -Throughout this manual, however, "trust" is used to -mean trust in a key's - -owner, and "validity" is used to mean trust that a key -belongs to the human associated with the key ID. - -. -The four trust/validity levels are abbreviated: unknown (q), -none (n), marginal (m), and -full (f). -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. - - - - - -Using trust to validate keys - - - -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. - -A more flexible algorithm can now be used: a key K is considered valid -if it meets two conditions: - - - -it is signed by enough valid keys, meaning - - - -you have signed it personally, - - - - -it has been signed by one fully trusted key, or - - - - -it has been signed by three marginally trusted keys; and - - - - - - - - -the path of signed keys leading from K back -to your own key is five steps or shorter. - - - - -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;. - - - - 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. -Potential bug: on command -line seems to be ignored when combined with . -Value is taken correctly if put in options file, however. -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. - - - -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. - - - -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 - -key to another key K in order to trust it. -On the other hand, you may be satisfied with longer paths and - -perhaps as little as one path from your key to the other -key K. - -Requiring multiple, short paths is a strong guarantee -that K 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. - - -
- -A hypothetical web of trust - - - - - - - - - - - - - - - - -trust -validity - - -marginal -full -marginal -full - - - - - -Dharma - -Blake, Chloe, Dharma, Francis - - - -Blake, Dharma - -Francis -Blake, Chloe, Dharma - - - -Chloe, Dharma - -Chloe, Francis -Blake, Dharma - - - -Blake, Chloe, Dharma - -Elena -Blake, Chloe, Dharma, Francis - - - - -Blake, Chloe, Elena - -Blake, Chloe, Elena, Francis - - - - -
-
-
- - - -Distributing keys - - - -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. - - - -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. - - - -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. - - - -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. - must come before - or . -This appears to be a bug. - - - -One or more keys may be sent to a keyserver using the command-line -option . -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 . -Similarly, the option - is used -to retrieve keys from a keyserver, but the option -requires a key ID be used to specify the key. -In the following example Alice sends her public key to the keyserver -certserver.pgp.com and then updates her copy -of Blake's key from the same keyserver. - - -alice% gpg --keyserver certserver.pgp.com --recv-key 0xBB7576AC -gpg: requesting key BB7576AC from certserver.pgp.com ... -gpg: key BB7576AC: 1 new signature - -gpg: Total number processed: 1 -gpg: new signatures: 1 -alice% gpg --keyserver certserver.pgp.com --send-key blake@cyb.org -gpg: success sending to 'certserver.pgp.com' (status=200) - - -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. - - - -
- 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 @@ - - - -$Id$ - - - -Daily use of &Gnupg; - - - -&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. - - - -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. - - - - -Defining your security needs - - - -&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. - - - -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. - - - -Customizing your use of &gnupg; revolves around three issues: - - - -the key size of your public/private keypair, - - - - - -protecting your private key, and - - - - - -managing your web of trust. - - - - -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. - - - - -Choosing a key size - - - -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. - - - -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. - - - -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. - - - - - -Protecting your private key - - - -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. - - - -Regardless of how you use &gnupg; you should store the public -key's revocation certificate -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. - - - -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. - - - -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; - - - -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. - - - -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. - - - -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. - - - -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 } and |. -Be creative and spend a little time considering your passphrase; a -good choice is important to ensure your privacy. - - - - - - - -Managing your web of trust - - - -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. - - - -Regardless of your own security needs, through, you should -always be careful 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. - - - -In practice, managing your web of trust reduces to assigning trust to -others and tuning the options - -and -. -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. - - - -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 to -1 and to -2. -If you are more concerned with security you might choose values of -1 and 3 or 2 -and 3 respectively. -If you are less concerned with privacy attacks and just want some -reasonable confidence about validity, set the values to 1 -and 1. -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. - - - - - - -Building your web of trust - - - -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;In this section, &gnupg; refers to the -&gnupg; implementation of OpenPGP as well as other implementations -such as NAI's PGP product., 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;. - - - -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. - - - -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;. - - - -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 -hold one. -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. - - - -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. - - - - - -Using &Gnupg; legally - - - -The legal status of encryption software varies from country to country, -and law regarding encryption software is rapidly evolving. -Bert-Japp -Koops has an excellent -Crypto -Law Survey to which you should refer for the legal status of -encryption software in your country. - - - - - 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 @@ - - - -$Id$ - - - -Programming with &Gnupg; - - -... - - - -Using &gpg in batch mode - - -... - - - -Invoking &gpg from mail clients - - -... - - - - - -Writing extension modules - - -... - - - - 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 @@ - - - -$Id$ - - - -Command Reference - - - - - -Key specifiers - - - -Many commands and options require a key specifier. -A key specifier is the key ID or any portion of ther user ID of -a key. -Consider the following example. - - -alice% gpg --list-keys chloe -pub 1024D/B87DBA93 1999-06-28 Chloe (Jester) <chloe@cyb.org> -uid Chloe (Plebian) <chloe@tel.net> -sub 2048g/B7934539 1999-06-28 - - -For this key, 0xB87DBA93, -Chloe, -Plebian, and -oe@tel -are all examples of key specifiers that match the above key. - - - - - - - -send-keys - - -send keys to a key server - - - - - - -send-keys key - - - - - -Description - - - -This command sends a public key to a keyserver. -The parameter key specifies -the public key that should be uploaded. -The command requires the option - to specify -to which keyserver &gpg; should send the keys. - - - - - - - -recv-keys - - -retrieve keys from a key server - - - - - key-id key-id ... - - - - - -Description - - - -This command downloads one or more public keys from a keyserver. -Each key-id is a key ID. -The command requires the option - to -specify from which keyserver &gpg; should download the keys. - - - - - - - -encrypt - - -encrypt a document - - - - - filename - - - - - -Description - - - -This command encrypts the document -filename to -recipients specified using the -option . -If the parameter filename -is omitted, then the document to encrypt is taken from standard input. -If the option is omitted, -&gpg; will prompt for a recipient. -If the option is used, -&gpg; will output the encrypted information to the specified file. - - - - - - - -decrypt - - -decrypt an encrypted document - - - - - filename - - - - - -Description - - - -This command decrypts filename -and puts the result on standard output. -If the parameter filename -is omitted, then the document to decrypt is taken from standard input. -Use the option -to output the decrypted message to a file instead. - - - - - - - - -clearsign - - -make a cleartext signature - - - - - filename - - - - - -Description - - - -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 -. - - - - - - - - -fingerprint - - -display key fingerprints - - - - - name ... - - - - - -Description - - - -This command prints the fingerprints of the specified public keys. -The parameter name is a -key specifier. -If no parameter name is -provided, &gpg; will print the fingerprints of all the keys on -your public keyring. - - - - - - - -detach-sig - - -make a detached signature - - - - - filename - - - - - -Description - - - -This command creates a signature file that can be used -to verify that the orginal file -filename has not -been changed. -Verification of the file using a detached signature is done using the -command . - - - - - - - -gen-key - - -generate a new keypair - - - - - - - - - - -Description - - - -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. - - - - - - - -symmetric - - -encrypt a document using only a symmetric encryption algorithm - - - - - filename - - - - - -Description - - - -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. -. - - - - - - - -list-keys - - -list information about the specified keys - - - - - key ... - - - - - -Description - - - -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. - - - - - - - -import - - -import keys to a local keyring - - - - - filename - - - - - -Description - - - -This command imports one or more public keys onto the user's public -keyring from the file filename. - - - - - - - -verify - - -verify a signed document - - - - - signature document - - - - - -Description - - - -This command verifies a document against a signature -to ensure that the document has not been altered since the signature -was created. -If signature is omitted, -&gpg; will look in document -for a clearsign signature. - - - - - - - -gen-revoke - - -generate a revocation certificate for a public/private keypair - - - - - key - - - - - -Description - - - -This command generates a revocation certificate for a public/private -key pair. -The parameter key is -a key specifier. - - - - - - - -export - - -export keys from a local keyring - - - - - key key ... - - - - - -Description - - - -This command exports the public keys components of the keys specified -by the key specifiers key key .... -The export command by default sends its output to standard output. -This key file can later be imported into another keyring using the command -. - - - - - - - -edit-key - - -presents a menu for operating on keys - - - - - key - - - - - -Description - - - -This command presents a menu which enables you to perform -key-related taskes. -The key specifier key -specifies the key pair to be edited. -If the specifier matches more than one key pair, &gpg; issues -an error and exits. - - - -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: - - - - - -Letter -Meaning - - - - - -- - - -No ownertrust assigned / not yet calculated. - - - - -e - - -Trust calculation has failed. - - - - - -q - - -Not enough information for calculation. - - - - - -n - - -Never trust this key. - - - - - -m - - -Marginally trusted. - - - - - -f - - -Fully trusted. - - - - - -u - - -Ultimately trusted. - - - - - - - - -The following lists each key editing command and a description -of its behavior. - - - - -sign - - - -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 -, -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 -. - - - - - -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. - - - - - -revsig - - - -Revoke a signature. -Asks for each signature makde by a one of the private keys whether -a revocation certificate should be generated. - - - - - -trust - - - -Change the owner trust value. -This updates the trust database immediately and no save is required. - - - - - -disable - - - -Disable the key. -A disabled key cannot normally be used for encryption. - - - - - -enable - - - -Enable a key that has been previously -disabled. - - - - - -adduid - - - -Add a new user id to the current key. - - - - - -deluid - - - -Delete a user id from the current key. - - - - - -addkey - - - -Add a new subkey to the current key. - - - - - -delkey - - - -Delete a subkey from the current key. - - - - - -revkey - - - -Revoke a subkey of the current key. - - - - - -expire - - - -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. - - - - - -key n - - - -Toggle selection of subkey with index n. -Use 0 to deselect all. - - - - - -uid n - - - -Toggle selection of user id with index n. -Use 0 to deselect all. - - - - - -toggle - - - -Change the passphrase of the private key of the selected key pair. - - - - - -toggle - - - -Toggle between public and private key listings. - - - - - -check - - - -Check all selected user ids. - - - - - -pref - - - -List preferences. - - - - - -save - - - -Save all changes to the current key and quit. - - - - - -save - - - -Quit without updating the current key. - - - - - - 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 @@ - - - -$Id$ - - - -Options Reference - - - - - -Setting options - - - -Options may be specified on the command line or in an options file. -The default location of the options file is -~/.gnupg/options. -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 (#) as the -first non-white-space character are ignored. - - - - - - - -keyserver - - -specify the keyserver to use to locate keys - - - - - server-name - - - - - -Description - - - -This option is used in conjunction with either - or - to specify a -keyserver to manage public key distribution. - - - - - - - -output - - -specify the file in which to place output - - - - - file-name - - - - - -Description - - - -This is a description. - - - - - - - -recipient - - -specify the recipient of a public-key encrypted document - - - - - - - - - -Description - - - -This is a description. - - - - - - - -armor - - -ASCII-armor encrypted or signed output - - - - - - - - - -Description - - - -This is a description. - - - - - - - -no-greeting - - -suppress the opening copyright notice but do not enter batch mode - - - - - - - - - -Description - - - -This is a description. - - - - - - - -local-user - - -specifies a user id to use for signing - - - - - name - - - - - -Description - - - -Use 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. - - - - - - - -completes-needed - - -specifies the number of fully-trusted people needed to validate a new key. - - - - - n - - - - - -Description - - - -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 -. - - - - - - - -marginals-needed - - -specifies the number of marginally-trusted people needed to validate -a new key. - - - - - n - - - - - -Description - - - -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 -. - - - - - 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 @@ - - - - -gpg"> - - - - - - - - - - - -]> - - -The GNU Privacy Handbook - -August 25, 1999 - - -1999 -Free Software Foundation - - - -Please direct questions, bug reports, or suggesstions concerning -this manual to the maintainer, Mike Ashley (jashley@acm.org). -Contributors to this manual also include Matthew Copeland and -Joergen Grahn. - - - -This manual may be redistributed under the terms of the -GNU General Public -License. - - -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; -www.gnupg.org has a link -to it. - - - - - - -&chapter1 -&chapter2 -&chapter3 -&chapter4 -&chapter5 -&chapter6 -&chapter7 - - 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 - uid Werner Koch - sub 1536g/ADF6A6E1 1999-02-20 [expires: 2002-11-01] - - pub 1024D/5B0358A2 1999-03-15 Werner Koch - - pub 4096R/99242560 2002-01-28 David M. Shaw - sub 2048g/1643B926 2002-01-28 [expires: 2012-01-26] - - pub 1024D/B2D7795E 2001-01-04 - uid Philip R. Zimmermann - uid Philip R. Zimmermann - uid [image of size 3457] - sub 3072g/A8E92834 2001-01-04 - - pub 1024D/57548DCD 1998-07-07 Werner Koch (gnupg sig) - - ------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 - - * pkclist.c (do_edit_ownertrust): Show all user IDs. This should - be enhanced to also show the current trust level. Suggested by - Florian Weimer. - -2002-10-17 David Shaw - - * g10.c (main): Handle --strict and --no-strict from the command - line before the options file is loaded. - -2002-10-15 David Shaw - - * g10.c (main): Disable --textmode when encrypting (symmetric or - pk) in --pgp2 mode as PGP 2 can't handle the unknown length - literal packet. Reported by Michael Richardson. - -2002-10-14 David Shaw - - * keyserver-internal.h, keyserver.c (print_keyrec, parse_keyrec, - show_prompt, keyserver_search_prompt, keyserver_spawn): Go to - version 1 of the keyserver protocol. This is a better design, - similar to --with-colons, that allows for keys with multiple user - IDs rather than using multiple keys. It also matches the machine - readable pksd format. Also use a prettier --search-keys listing - format that can fill different size windows (currently set at 24 - lines). - -2002-10-12 Werner Koch - - * keygen.c (print_status_key_created): New. - (do_generate_keypair): Use it to print the fingerprint. - (generate_subkeypair): Likewise. - -2002-10-11 David Shaw - - * keyedit.c (menu_addrevoker): Properly back out if the signature - fails. Also, do not allow appointing the same revoker twice, and - report ALREADY_SIGNED if the user tries it. - -2002-10-07 David Shaw - - * import.c (import_keys_internal): Missed one s/inp/inp2/. - - * keylist.c (print_capabilities): Properly indicate per-key - capabilities of sign&encrypt primary keys that have - secret-parts-missing (i.e. no capabilities at all) - - * mainproc.c (symkey_decrypt_sesskey): Fix compiler warning. - -2002-10-04 David Shaw - - * getkey.c (get_pubkey_direct): Don't cache keys retrieved via - this function as they may not have all their fields filled in. - - * sig-check.c (signature_check2): Use new is_primary flag to check - rather than comparing main_keyid with keyid as this still works in - the case of a not fully filled in pk. - -2002-10-04 Werner Koch - - * import.c (import_keys_internal): s/inp/inp2/ to avoid shadowing - warning. - - * passphrase.c (agent_get_passphrase): Fixed signed/unsigned char - problem in %-escaping. Noted by Ingo Klöcker. - -2002-10-03 David Shaw - - * options.h, g10.c (main): Add --strict and --no-strict to switch - the log_warning severity level from info to error. - - * keylist.c (print_capabilities): Secret-parts-missing keys should - show that fact in the capabilities, and only primary signing keys - can certify other keys. - - * packet.h, parse_packet.c (parse_key): Add is_primary flag for - public keys (it already exists for secret keys). - -2002-10-02 David Shaw - - * import.c (import_secret_one): Check for an illegal (>110) - protection cipher when importing a secret key. - - * keylist.c (list_keyblock_print): Show a '#' for a - secret-parts-missing key. - - * parse_packet.c (parse_key): Some comments. - - * revoke.c (gen_revoke): Remove some debugging code. - - * trustdb.c (verify_own_keys): Make trusted-key a non-deprecated - option again. - - * seckey-cert.c (do_check): Don't give the IDEA warning unless the - cipher in question is in fact IDEA. - -2002-10-01 David Shaw - - * import.c (import_one): Make sure that a newly imported key - starts with a clean ownertrust. - -2002-10-01 Werner Koch - - * getkey.c (get_pubkey_direct): New. - (merge_selfsigs_main): Use it here to look for an ultimately - trusted key. Using the full get_pubkey might lead to an - infinitive recursion. - -2002-09-29 David Shaw - - * keyserver.c (parse_keyserver_uri): Force the keyserver URI - scheme to lowercase to be case-insensitive. - -2002-09-28 David Shaw - - * export.c (do_export_stream): Comment. - - * sig-check.c (check_key_signature2): Properly handle a - non-designated revocation import. - -2002-09-26 Werner Koch - - * g10.c (set_homedir): New. Changed all direct assignments to use - this. - * gpgv.c (set_homedir): Ditto. - -2002-09-25 David Shaw - - * Makefile.am: Link gpg with EGDLIBS (i.e. NETLIBS) as EGD uses - sockets. Remove the old NETLIBS variable since the keyserver - stuff is no longer internal. - -2002-09-24 David Shaw - - * import.c (import_keys_stream): Fix compiler type warning. - - * keyring.c (keyring_rebuild_cache), sig-check.c - (check_key_signature2), import.c (import, chk_self_sigs): Minor - language cleanups. - -2002-09-23 Stefan Bellon - - * main.h: Introduced fast-import as import option. Removed - fast as separate option from prototypes. - * import.c (parse_import_options): Added fast-import option. - (import_*): Removed fast as separate option. - * g10.c (main): Added option fast-import, removed old fast - as separate argument. - * keyserver.c (keyserver_spawn): Removed old fast as separate - argument. - -2002-09-22 Stefan Bellon - - * import.c (import_keys, import_keys_stream, - import_keys_internal): Added trustdb update/check to key import if - not fast-import and interactive set/no-auto-check-trustdb unset. - Avoided function clone by introducing import_keys_internal. - -2002-09-19 David Shaw - - * keyserver.c (keyserver_spawn): Properly handle line truncation. - Don't leak memory (~10-20 bytes) on searches. - (keyserver_search_prompt): Cleanup. - - * keylist.c (list_keyblock_colon): Show 1F direct key signatures - in --with-colons listing. - -2002-09-16 David Shaw - - * keyedit.c (menu_addrevoker): The direct key signature for - revocation keys must be at least v4 to carry the revocation key - subpacket. Add a PGP 2.x warning for revocation keys. - -2002-09-14 David Shaw - - * g10.c (check_permissions): Rearrange strings to make translating - easier (don't incorporate string parts). - - * keyedit.c (sign_uids): Make strings translatable. - - * sig-check.c (check_key_signature2): Make string translatable. - -2002-09-13 David Shaw - - * getkey.c (check_revocation_keys): Move.... - * main.h, sig-check.c (check_revocation_keys): to here. Also - return the signature_check error code rather than 0/1 and cache - the sig result. - - * sig-check.c (check_key_signature2): Divert to - check_revocation_keys if a revocation sig is made by someone other - than the pk owner. - - * getkey.c (merge_selfsigs_main): Tidy. - -2002-09-13 Werner Koch - - * g10.c (main) [__MINGW32__]: Activate oLoadExtension. - -2002-09-12 David Shaw - - * Makefile.am, hkp.c, hkp.h, keyserver.c (keyserver_work): Remove - internal HKP support. - - * keyserver.c (keyserver_spawn): Remove whitespace after keyserver - commands. - -2002-09-10 David Shaw - - * exec.c (expand_args): Remove loop left over from earlier - implementation. - (exec_write): Missed one tick. - -2002-09-10 Werner Koch - - * g10.c, options.h: Removed option --emulate-checksum-bug. - * misc.c (checksum_u16_nobug): Removed. - (checksum_u16): Removed the bug emulation. - (checksum_mpi): Ditto. - (checksum_mpi_counted_nbits): Removed and replaced all calls - with checksum_mpi. - - * parse-packet.c (read_protected_v3_mpi): New. - (parse_key): Use it here to store it as an opaque MPI. - * seckey-cert.c (do_check): Changed the v3 unprotection to the new - why to store these keys. - (protect_secret_key): Likewise. - * build-packet.c (do_secret_key): And changed the writing. - - * tdbio.c (tdbio_set_dbname, open_db): Use new macro MY_O_BINARY - to avoid silly ifdefs. - (open_db): Fallback to RDONLY so that gpg may be used from a - RO-medium. - - * encode.c (encode_simple): Make sure we don't use an ESK packet - when we don't have a salt in the S2K. - - * misc.c (pct_expando) : Make sure that LEN is initialized. - - * exec.c (exec_finish): Use ticks to denote filenames in messages. - (make_tempdir, exec_write): Changed format of messages. - - * keyserver.c (print_keyinfo): Release USERID in on error. - (keyserver_work) [!DISABLE_KEYSERVER_HELPERS]: Exclude the unused - code. - -2002-09-09 Werner Koch - - * parse-packet.c (make_attribute_uidname): Add new ar MAX_NAMELEN - for sanity checks. Changed both callers. Limit the size of an %s. - - * options.skel: Comment lock-once out, so that this file does not - change anything when copied to a new home directory. - * openfile.c (try_make_homedir): Don't exit after copying the - option skeleton. - - * options.h: Don't use a comma when declaring variables over more - than one line. - - * mainproc.c (symkey_decrypt_sesskey): Check length of the session - key. - - * hkp.c (dehtmlize): Use ascii_tolower to protect against weird - locales. Cast the argument for isspace for the sake of broken - HP/UXes. - (parse_hkp_index): s/ascii_memcasecmp/ascii_strncasecmp/. - - * g10.c: Removed option --emulate-3des-s2k-bug. - - * passphrase.c (hash_passphrase): Was used here. - - * export.c (parse_export_options) - * keyserver.c (parse_keyserver_options) - * import.c (parse_import_options) - * g10.c (check_permissions): s/ascii_memcasecmp/ascii_strncasecmp/. - -2002-09-09 David Shaw - - * g10.c (add_group): Use '=' to separate group name from group - members. Use a better error message for when no = is found. - - * hkp.c (hkp_export): Use CRLF in headers. - -2002-09-03 David Shaw - - * mainproc.c (print_pkenc_list): Don't increment the error counter - when printing the list of keys a message was encrypted to. This - would make gpg give a non-zero exit code even for completely valid - messages if the message was encrypted to more than one key that - the user owned. - -2002-09-02 Werner Koch - - * g10.c (main): Try to set a default character set. Print the - used one in verbosity level 3. - * gpgv.c (main): Try to set a default character set. - - * status.c, status.h (STATUS_IMPORT_OK): New. - * import.c (import_one,import_secret_one): Print new status. - -2002-08-30 David Shaw - - * pkclist.c (build_pk_list): Add new status code to indicate an - untrusted user. This (or a disabled key) fail with "unavailable - pubkey" (G10ERR_UNU_PUBKEY). - - * pkclist.c (build_pk_list): Fail if any recipient keys are - unusable. - - * options.skel: The PGP LDAP keyserver is back. Use MIT keyserver - as a sample rather than cryptnet as cryptnet does not support - searching yet. - - * keyedit.c (show_key_with_all_names): Fix error message - (preferences are userid/selfsig and not key specific). - -2002-08-30 Werner Koch - - * pkclist.c (do_we_trust_pre): Changed the wording of a warning. - - * encode.c (encode_simple,encode_crypt): Use new style CTB for - compressssed packets when using MDC. We need to do this so that - concatenated messages are properly decrypted. Old style - compression assumes that it is the last packet; given that we - can't determine the length in advance, the uncompressor does not - know where to start. Actually we should use the new CTB always - but this would break PGP 2 compatibility. - - * parse-packet.c (parse): Special treatment for new style CTB - compressed packets. - - * build-packet.c (do_mdc): Removed. Was not used. - (do_encrypted_mdc): Count in the version number and the MDC packet. - -2002-08-28 David Shaw - - * sig-check.c (do_check_messages, do_check): Show keyid in error - messages. - - * keyserver.c (print_keyinfo): More readable key listings for - --search-keys responses. - -2002-08-26 David Shaw - - * hkp.c (parse_hkp_index, dehtmlize): Move HTML functionality into - new "dehtmlize" function. Remove HTML before trying to parse each - line from the keyserver. If the keyserver provides key type - information in the listing, use it. - -2002-08-23 David Shaw - - * sig-check.c (do_check, do_check_messages): Emit the usual sig - warnings even for cached sigs. This also serves to protect - against missing a sig expiring while cached. - - * getkey.c (merge_selfsigs_main): Don't check UID self-sigs twice. - -2002-08-22 David Shaw - - * import.c (clean_subkeys, chk_self_sigs): Merge clean_subkeys - into chk_self_sigs. This improves efficiency as the same - signatures are not checked multiple times. Clarify when a subkey - is revoked (any revocation signature, even if it is dated before - the binding signature). - - * getkey.c (merge_selfsigs_subkey): Subkey revocation comments. - - * keylist.c (list_one): Stats are only for public key listings. - - * g10.c (main), options.skel: Default should be include-revoked - for keyserver operations. - -2002-08-21 Werner Koch - - * import.c (import_print_stats): Print new non_imported counter - which is currently not used because we terminate on errors. - -2002-08-20 David Shaw - - * options.skel: Document no-include-attributes for - keyserver-options. - - * keylist.c, keyedit.c, keyserver.c, sign.c: Some TODOs and - comments. - - * export.c (do_export_stream): Fix noop bug in exporting sensitive - revocation keys. - - * pkclist.c (do_edit_ownertrust): Comment out the option for - showing trust paths until it can be implemented. - -2002-08-19 Werner Koch - - * getkey.c (get_user_id_native): Renamed to .. - (get_user_id_printable): this. Filter out all dangerous - characters. Checked all usages. - (get_user_id_string_native): Renamed to.. - (get_user_id_string_printable): this. Filter out all dangerous - characters. Checked all usages. - * keyedit.c (show_basic_key_info): New. - * keylist.c (print_fingerprint): New mode 3. - * import.c (import_one): Use new function to display the user ID. - -2002-08-16 Timo Schulz - - * g10.c (main): Enable opt.interactive. - - * import.c (import_one): Ask the user if the key shall be - imported when the interactive mode is used. Useful to extract - selected keys from a file. - -2002-08-16 Werner Koch - - * seckey-cert.c: Workaround to allow decryption of v3 keys created - with a bug in the mpi_get_secure_buffer. - -2002-08-14 David Shaw - - * hkp.c (parse_hkp_index): Properly handle really large keys - (5 digit key length) in HKP searches. - -2002-08-13 David Shaw - - * encode.c (encode_simple): Fix problem with using compression - algo 2 and symmetric compressed files. - - * encode.c (encode_simple, encode_crypt): If we are not using a - MDC, compress even if a file is already compressed. This is to - help against the chosen ciphertext attack. - - * pkclist.c (select_algo_from_prefs): Fix requested algorithm bug - so the request succeeds even if the requested algorithm is not the - first found. - - * cipher.c (write_header), encode.c (use_mdc, encode_simple, - encode_crypt, encrypt_filter), g10.c (main): Be more eager to use - a MDC. We use a MDC if the keys directly support it, if the keys - list AES (any) or TWOFISH anywhere in the prefs, or if the cipher - chosen does not have a 64 bit blocksize. - -2002-08-08 David Shaw - - * options.skel: Some language tweaks, and remove the - load-extension section for random gatherers. - - * keyring.c (create_tmp_file, rename_tmp_file): Create tmp files - with user-only permissions, but restore the original permissions - if the user has something special set. - - * openfile.c (copy_options_file): Create new options file - (gpg.conf) with user-only permissions. - - * keydb.c (keydb_add_resource): Create new keyrings with user-only - permissions. - - * tdbio.c (tdbio_set_dbname): Create new trustdbs with user-only - permissions. - -2002-08-07 David Shaw - - * sig-check.c (signature_check2): Sanity check that the md has a - context for the hash that the sig is expecting. This can happen - if a onepass sig header does not match the actual sig, and also if - the clearsign "Hash:" header is missing or does not match the - actual sig. - - * keyedit.c (menu_revsig): Properly show a uid is revoked without - restarting gpg. This is Debian bug 124219, though their supplied - patch will not do the right thing. - - * main.h, tdbio.c (tdbio_set_dbname), misc.c (removed - check_permissions), keydb.c (keydb_add_resource), g10.c (main, - check_permissions): Significant reworking of the permission check - mechanism. The new behavior is to check everything in the homedir - by checking the homedir itself. If the user wants to put - (possibly shared) keyrings outside the homedir, they are not - checked. The options file and any extension files are checked - wherever they are, as well as their enclosing directories. This - is Debian bug 147760. - -2002-08-06 Stefan Bellon - - * g10.c (main): Use of EXTSEP_S in new gpg.conf string. - * openfile.c (copy_options_file): Ditto. - -2002-08-06 David Shaw - - * options.h, g10.c (main), mainproc.c (proc_encrypted): - --ignore-mdc-error option to turn a MDC check error into a - warning. - - * encode.c (encode_crypt), g10.c (main), sign.c (sign_file, - clearsign_file): Use the same --pgpX warning string everywhere to - ease translations. - - * encode.c (write_pubkey_enc_from_list): Warn when using - --throw-keyid with --pgpX. Noted by Vedaal Nistar. - - * revoke.c (export_minimal_pk, gen_desig_revoke, gen_revoke): - Export a minimal pk along with the revocation cert when in --pgpX - mode so that PGP can import it. - -2002-08-06 Werner Koch - - * options.skel: Changed comments. - - * g10.c (main): Try to use "gpg.conf" as default option file. - * openfile.c (copy_options_file): Changed name of created file. - -2002-08-02 Werner Koch - - * Makefile.am (LDFLAGS): Removed DYNLINK_LDFLAGS. - -2002-07-30 David Shaw - - * options.h, g10.c (main), mainproc.c (proc_encrypted): Return a - decryption failed error if a MDC does not verify. Warn if a MDC - is not present (can disable via --no-mdc-warning). - - * exec.c (exec_write), g10.c (main), keyserver.c - (keyserver_spawn): Use new DISABLE_KEYSERVER_PATH rather than - FIXED_EXEC_PATH. - -2002-07-28 David Shaw - - * sig-check.c (do_check): Properly validate v4 sigs with no hashed - section at all. - -2002-07-25 Werner Koch - - * delkey.c (do_delete_key): Always allow to delete a key in batch mode - when specified by fingerprint. Suggested by Enzo Michelangeli. - -2002-07-25 David Shaw - - * keyedit.c (menu_revsig): Change "revsig" to honor selected uids - so the user can revoke sigs from particular uids only. - - * keylist.c (list_keyblock_print): Don't display expired uids in - --list-keys unless -v and not --list-sigs (just like revoked - uids). - - * exec.c, export.c, import.c, keyedit.c, keyserver.c, misc.c: - "Warning" -> "WARNING" - -2002-07-24 David Shaw - - * main.h, import.c (parse_import_options, fix_hkp_corruption, - import_one, delete_inv_parts), g10.c (main): New import-option - "repair-hkp-subkey-bug", which repairs as much as possible the HKP - mangling multiple subkeys bug. It is on by default for keyserver - receives, and off by default for regular --import. - - * main.h, import.c (import, import_one, delete_inv_parts), hkp.c - (hkp_ask_import), keyserver.c (keyserver_spawn): Use keyserver - import options when doing keyserver receives. - - * options.h, exec.h, exec.c (set_exec_path, exec_write), g10.c - (main), keyserver.c (keyserver_spawn): If the user does not use - "exec-path", completely replace $PATH with GNUPG_LIBEXECDIR before - calling the keyserver helper. If the user does use "exec-path", - append GNUPG_LIBEXECDIR after the specified path. - -2002-07-23 David Shaw - - * import.c (parse_import_options), export.c - (parse_export_options): Fix offset problem with reversed ("no-") - meanings. - - * import.c (delete_inv_parts): Discard subkey signatures (0x18 and - 0x28) if found in the userid section of the key. - - * sig-check.c (signature_check2): Signatures made by invalid - subkeys (bad/missing binding sig) are also invalid. - - * keylist.c (print_fingerprint): Show the primary as well as the - secondary key fingerprint in modes 1 & 2. - -2002-07-22 David Shaw - - * options.h, main.h, g10.c (main), import.c - (parse_import_options, delete_inv_parts), keyserver.c - (parse_keyserver_options): add new --import-options option. The - only current flag is "allow-local-sigs". - - * g10.c (main): Don't disable MDC in pgp7 mode. - - * options.h, g10.c (main), keyserver.c (parse_keyserver_options): - Remove old keyserver-option include-attributes now that there is - an export-option for the same thing. - - * options.h, main.h, export.c (parse_export_options, - do_export_stream), g10.c (main): add new --export-options option. - Current flags are "include-non-rfc", "include-local-sigs", - "include-attributes", and "include-sensitive-revkeys". - - * options.h, hkp.c (hkp_export), keyserver.c - (parse_keyserver_options, keyserver_spawn): try passing unknown - keyserver options to export options, and if successful, use them - when doing a keyserver --send-key. - - * build-packet.c (build_sig_subpkt): We do not generate - SIGSUBPKT_PRIV_VERIFY_CACHE anymore. - - * revoke.c (gen_desig_revoke): Lots more comments about including - sensitive revkeys along with the revocation sig itself. - - * keyserver.c (parse_keyserver_options): Simpler implementation - that can skip one pass over the options. - -2002-07-18 David Shaw - - * keyedit.c (keyedit_menu, menu_addrevoker): Allow specifying - "sensitive" as an argument to an addrevoker command. This sets - the 0x40 sensitive revoker flag. - - * revoke.c (gen_desig_revoke): When generating a designated - revocation, include the direct key sig that contains the - designated revoker subpacket. This allows sensitive designated - revocation subpackets to be exported. Also indicate which - revokers are sensitive in the first place. - -2002-07-17 David Shaw - - * keyedit.c (show_key_with_all_names_colon): The 0x40 class bit in - a designated revoker means "sensitive", not "local". It's - exportable under the right circumstances. - - * main.h, options.h, export.c (do_export_stream), g10.c (main), - hkp.c (hkp_export), keyserver.c (keyserver_spawn: Add a flag to - skip attribute packets and their signatures while exporting. This - is to accomodate keyservers (pksd again) that choke on attributes. - Use keyserver-option "include-attributes" to control it. This - defaults to ON (i.e. don't skip). - -2002-07-09 David Shaw - - * options.h, keyserver.c (parse_keyserver_uri, keyserver_spawn, - keyserver_work), hkp.c (hkp_ask_import, hkp_export, hkp_search): - Use a much more strict reading of RFC-2396 for the keyserver URIs. - Specifically, don't try and be smart about checking the value of - ":port" so long as it is all digits, and properly handle opaque - data (those scheme specific parts that do not start with "//"). - -2002-07-04 David Shaw - - * photoid.c (get_default_photo_command, show_photos): Honor - FIXED_PHOTO_VIEWER and DISABLE_PHOTO_VIEWER. - - * mainproc.c (check_sig_and_print): Use --show-photos to show - photos when verifying a sig made by a key with a photo. - - * keyserver.c (parse_keyserver_uri): Properly parse a URI with no - :port section and an empty file path, but with a terminating '/'. - (keyserver_work): Honor DISABLE_KEYSERVER_HELPERS. - - * hkp.c (hkp_ask_import): Display keyserver URI as a URI, but only - if verbose. - - * exec.c, g10.c: USE_EXEC_PATH -> FIXED_EXEC_PATH - -2002-07-03 David Shaw - - * exec.h, exec.c (set_exec_path, exec_write), g10.c (main): If - USE_EXEC_PATH is defined at compile time, use it to lock the - exec-path and not allow the user to change it. - -2002-07-02 David Shaw - - * options.h, g10.c (main), keyserver.c (keyserver_refresh): - Maintain and use the original keyserver URI for cosmetics rather - than trying to recreate it when needed. - - * mainproc.c (check_sig_and_print): Properly disregard expired - uids. Make sure that the first uid listed is a real uid and not - an attribute (attributes should only be listed in the "aka" - section). When there are no valid textual userids, try for an - invalid textual userid before using any attribute uid. - -2002-07-01 David Shaw - - * options.skel: Fix a few typos, clarify "group", and remove - sample photo viewers for Win32 since they are the defaults now. - - * parse-packet.c (make_attribute_uidname), keylist.c - (dump_attribs): Fix two typecast warnings. - - * packet.h, build-packet.c (build_attribute_subpkt), exec.c - (expand_args), mkdtemp.c (mkdtemp), photoid.c - (parse_image_header): Fix some signedness compiler warnings. - -2002-07-01 Werner Koch - - * photoid.c (get_default_photo_command): Also use __MINGW32__ - instead of HAVE_DOSISH_SYSTEM. - - * encode.c (encode_symmetric): Do not use the new encryption code. - -2002-06-30 Werner Koch - - * photoid.c: Use __MINGW32__ to include windows because - HAVE_DOSISH_SYSTEM is also set for OS/2 and plain DOS. Provide - constant missing in older mingw installations. - -2002-06-21 Stefan Bellon - - * g10.c [__riscos__]: Moved RISC OS specific stuff to util/riscos.c - and include/util.h. - - * gpgv.c [__riscos__]: Likewise. - -2002-06-20 David Shaw - - * keydb.h, pkclist.c (select_algo_from_prefs): Allow passing a - suggested algorithm which will be used if available. - - * encode.c (encode_crypt, encrypt_filter), sign.c (sign_file): Use - new select_algo_from_prefs feature to check if forcing an - algorithm would violate the recipient preferences. - - * photoid.c (get_default_photo_command, show_photos): Use - different default viewers on different platforms. Currently we - have Win 9x, Win NT (2k, xp), Mac OSX, RISC OS, and "everybody - else". These are #ifdefs as much as possible to avoid clutter. - - * g10.c (strusage, build_list), keyedit.c (show_prefs), main.h, - misc.c (compress_algo_to_string, check_compress_algo), pkclist.c - (algo_available), keygen.c (keygen_set_std_prefs): New - algo_to_string and check functions for compress algorithms. - -2002-06-20 Werner Koch - - * misc.c (setsysinfo): Removed a #warning for Alpha's uniligedn - trap disabling - it is quite possible that this is a debug relict. - -2002-06-20 Stefan Bellon - - * g10.c [__riscos__]: Added image file system feature. - - * gpgv.c [__riscos__]: Added image file system feature. - - * photoid.c (show_photos) [__riscos__]: Set RISC OS filetype of - photo id according to MIME type. - -2002-06-19 David Shaw - - * hkp.c (parse_hkp_index): Don't leak memory when failing out of a - bad HKP keyserver. - - * g10.c (add_notation_data): Relax slightly the rules as to what - can go into a notation name - 2440 allows "@", for example. - -2002-06-17 David Shaw - - * import.c (clean_subkeys, import_one): Only allow at most 1 - binding sig and at most 1 revocation sig on a subkey, as per - 2440:11.1. - - * hkp.c (parse_hkp_index, hkp_search): Error if the keyserver - returns an unparseable HKP response. - -2002-06-15 David Shaw - - * keyedit.c (show_key_with_all_names), keylist.c - (list_keyblock_print): Show "[expired]" before expired uids. - - * keyedit.c (show_key_with_all_names_colon), mainproc.c - (list_node), keylist.c (list_keyblock_colon): Show flag 'e' for - expired user ids. Use "uat" for user attribute packets instead of - "uid". Also use ' ' rather than the fake user id - string on attributes. - - * keygen.c (keygen_add_revkey): Remove unused code. - - * misc.c (check_permissions): Check directory permissions - properly - they are not special files. - - * pkclist.c (expand_id, expand_group, build_pk_list): When - expanding groups before building a pk list, inherit flags from the - original pre-expanded string. - - * pubkey-enc.c (is_algo_in_prefs): Don't use prefs from expired - uids. - -2002-06-14 David Shaw - - * free-packet.c (copy_signature): Properly copy a signature that - carries a revocation key on it. - - * pkclist.c (expand_id, expand_group, build_pk_list): Groups now - work properly when used in the "Enter the user ID" prompt. - -2002-06-14 David Shaw - - * keyedit.c (show_key_with_all_names): Display warning if a user - tries to show prefs on a v3 key with a v3 selfsig. - - * kbnode.c (dump_kbnode): Show if a uid is expired. - - * import.c (merge_blocks, import_revoke_cert): Show user ID - receiving a revocation certificate. - - * free-packet.c (cmp_user_ids): Properly compare attribute ids. - - * pkclist.c (expand_groups): Maintain the strlist flags while - expanding. Members of an expansion inherit their flags from the - expansion key. - - * options.h, cipher.c (write_header), g10.c (main), keygen.c - (keygen_set_std_prefs): remove the personal_mdc flag. It no - longer serves a purpose now that the personal preference lists are - split into cipher/digest/zip. - -2002-06-14 Timo Schulz - - * skclist.c (is_insecure): Implemented. - -2002-06-12 David Shaw - - * keyserver.c (keyserver_spawn): Properly handle PROGRAM responses - when they have a CRLF ending. Noted by Keith Ray. - - * keyserver.c (keyserver_spawn): Handle CRLF endings from - keyserver helpers. Also don't leak the last line worth of memory - from the keyserver response. - - * main.h, misc.c (deprecated_warning): New function to warn about - deprecated options and commands. - - * g10.c (main), keyserver-internal.h, keyserver.c - (parse_keyserver_uri): Use new deprecated function to warn about - honor-http-proxy, auto-key-retrieve, and x-broken-hkp. - -2002-06-11 David Shaw - - * Makefile.am: link gpg with NETLIBS for the built-in HKP access. - -2002-06-10 David Shaw - - * options.h, keyserver.c (keyserver_opts), g10.c (main): New - keyserver option "include-subkeys". This feature already existed, - but now can be turned off. It defaults to on. - - * options.h, keyserver.c (parse_keyserver_options, - keyserver_spawn): There are now enough options to justify making a - structure for the keyserver options rather than a page of - if-then-else-if-then-etc. - - * getkey.c (merge_keys_and_selfsig, merge_selfsigs_main): Fix bug - in calculating key expiration dates. - -2002-06-09 David Shaw - - * keydb.h, getkey.c (get_user_id_native), import.c (import_one): - Display user ID while importing a key. Note this applies to both - --import and keyserver --recv-keys. - - * exec.c (exec_finish): Log unnatural exit (core dump, killed - manually, etc) for fork/exec/pipe child processes. - -2002-06-08 Timo Schulz - - * encode.c (encode_symmetric): Disable the compat flag - when the expert mode is enabled. - -2002-06-07 David Shaw - - * options.skel, options.h, main.h, keydb.h, pkclist.c - (build_pk_list, expand_groups), g10.c (main, add_group): Add new - "group" command to allow one name to expand into multiple keys. - For simplicity, and to avoid potential loops, we only expand once - - you can't make an alias that points to an alias. - - * main.h, g10.c (main), keygen.c (build_personal_digest_list): - Simplify the default digest list - there is really no need for the - other hashes since they will never be used after SHA-1 in the - list. - - * options.skel, options.h, g10.c (main), hkp.c (hkp_ask_import, - hkp_export, hkp_search), keyserver.c (parse_keyserver_options, - parse_keyserver_uri, keyserver_work, keyserver_refresh): Make the - "x-broken-hkp" keyserver scheme into keyserver-option - "broken-http-proxy". Move honor_http_proxy into - keyserver_options. Canonicalize the three variations of "hkp", - "x-hkp", and "x-broken-hkp" into "hkp". - -2002-06-07 Stefan Bellon - - * g10.c [__riscos__]: Added --attribute-file to do the same as - --attribute-fd, but with a filename not a fd as argument. - Added magic symbol for RISC OS to use different memory management. - - * gpgv.c [__riscos__]: Added magic symbol for RISC OS to use - different memory management. - -2002-06-06 David Shaw - - * main.h, g10.c (main), keygen.c (build_personal_digest_list): Put - in a default digest preference list consisting of SHA-1, followed - by every other installed digest except MD5. Note this is the same - as having no digest preference at all except for SHA-1 being - favored. - - * options.h, g10.c (main), keygen.c (keygen_set_std_prefs), - pkclist.c (select_algo_from_prefs): Split - --personal-preference-list into three: - --personal-{cipher|digest|compress}-preferences. This allows a - user to set one without affecting another (i.e. setting only a - digest pref doesn't imply an empty cipher pref). - - * exec.c (exec_read): This is a safer way of guessing the return - value of system(). Noted by Stefan Bellon. - -2002-06-05 David Shaw - - * hkp.c (parse_hkp_index): Be more robust with keyservers - returning very unparseable responses. - - * exec.c (exec_read): Catch and display an error when the remote - process exits unnaturally (i.e. segfault) so the user knows what - happened. Also fix exec_write stub which has a different number - of arguments now. - -2002-06-05 Timo Schulz - - * encode.c (encode_simple): Ignore the new mode for RFC1991. - * mainproc.c (symkey_decrypt_sesskey): Better check for weird - keysizes. - -2002-06-05 Timo Schulz - - * encode.c (encode_sesskey): New. - (encode_simple): Use it here. But by default we use the compat - mode which supress to generate encrypted session keys. - -2002-06-05 Timo Schulz - - * mainproc.c (symkey_decrypt_sesskey): New. - (proc_symkey_enc): Support for encrypted session keys. - -2002-06-04 David Shaw - - * sign.c (hash_for, sign_file): When encrypting and signing at the - same time, consult the various hash prefs to pick a hash algorithm - to use. Pass in a 160-bit hint if any of the signing keys are - DSA. - - * keydb.h, pkclist.c (select_algo_from_prefs, algo_available): - Pass a "hints" opaque pointer in to let the caller give hints as - to what algorithms would be acceptable. The only current hint is - for PREFTYPE_HASH to require a 160-bit hash for DSA. Change all - callers in encode.c (encode_crypt, encrypt_filter) and sign.c - (sign_file). If we settle on MD5 as the best algorithm based - solely on recepient keys and SHA1 is also a possibility, use SHA1 - unless the user intentionally chose MD5. This is as per 2440:13. - - * exec.c (make_tempdir): Fix duplicated filename problem. - -2002-06-03 David Shaw - - * packet.h, parse-packet.c (enum_sig_subpkt): Report back from - enum_sig_subpkt when a subpacket is critical and change all - callers in keylist.c (show_policy_url, show_notation), mainproc.c - (print_notation_data), and pkclist.c (do_show_revocation_reason). - - * keylist.c (show_policy_url, show_notation): Display if the - policy or notation is critical. - -2002-06-03 David Shaw - - * main.h, g10.c (main), keylist.c (dump_attribs, set_attrib_fd, - list_keyblock_print, list_keyblock_colon), status.h, status.c - (get_status_string): New --attribute-fd feature to dump the - contents of attribute subpackets for frontends. If --status-fd is - also used, then a new status tag ATTRIBUTE is provided for each - subpacket. - - * packet.h, getkey.c (fixup_uidnode, merge_selfsigs_main, - merge_selfsigs_subkey), parse-packet.c (setup_user_id): Keep track - of the expiration time of a user ID, and while we're at it, use - the expired flag from the selfsig rather than reparsing the - SIG_EXPIRE subpacket. - - * photoid.c (generate_photo_id): When adding a new photo ID, - showing the photo for confirmation is not safe when noninteractive - since the "user" may not be able to dismiss a viewer window. - Noted by Timo Schulz. - -2002-06-03 David Shaw - - * options.skel: Sample photo viewers for Win32. - - * misc.c (pct_expando): Use the seckey for %k/%K if the pubkey is - not available. - - * photoid.h, photoid.c (show_photos): Include the seckey in case a - user tries to view a photo on a secret key, and change all callers - in keyedit.c (menu_showphoto), keylist.c (list_keyblock_print), - and photoid.c (generate_photo_id). - -2002-06-02 David Shaw - - * photoid.c (show_photos): Work properly when not called with a - public key. - -2002-05-31 David Shaw - - * sign.c (mk_notation_and_policy): Free unneeded buffer. - - * hkp.c (parse_hkp_index): Properly handle the '&' character - (i.e. "&") in HKP responses. - - * getkey.c (merge_selfsigs_main): Fix reversed expiration time - check with self-sigs. - - * keyedit.c (sign_uids): When making a new self-sig on a v3 key, - make a v3 self-sig unless it is currently a v3 self-sig being - promoted to v4. - -2002-05-31 Timo Schulz - - * pkclist.c (do_show_revocation_reason): Don't use capital - letters for non-interactive output. - (show_revocation_reason): Now it is global. - * pubkey-enc.c (get_it): Show if the key has been revoked. - -2002-05-30 David Shaw - - * sign.c (write_signature_packets, sign_file, clearsign_file, - sign_symencrypt_file): Make a v4 signature if a policy URL or - notation is set, unless v3 sigs are forced via rfc1991 or - force-v3-sigs. Also remove some doubled code and clarify an error - message (we don't sign in PGP2 mode - just detach-sign). - - * parse-packet.c (parse_one_sig_subpkt): Add KS_FLAGS to the "any - size" section. - -2002-05-29 David Shaw - - * keygen.c (keygen_set_std_prefs, add_feature_mdc): Use "mdc" and - "no-mdc" in the prefs string to allow switching on and off the MDC - feature. This is needed to properly export a key from GnuPG for - use on PGP which does not support MDC - without this, MDC-capable - implementations will still try and generate MDCs which will break - PGP. - - * keygen.c (keygen_get_std_prefs): Show "[mdc]" in prefs string if - it is enabled. - - * options.h, g10.c (main), cipher.c (write_header), keygen.c - (keygen_set_std_prefs): For consistency, allow the user to specify - mdc/no-mdc in the --personal-preference-list. If disabled, it - acts just like --disable-mdc. - -2002-05-29 David Shaw - - * options.h, exec.c: Add some debugging info, using the 1024 debug - flag. - - * exec.c (win_system): New system()-like function for win32 that - does not return until the child process terminates. Of course, - this doesn't help if the process itself exits before it is - finished. - -2002-05-29 Werner Koch - - * encode.c (encode_simple): Intialize PKT when --no-literal is used. - - * keyedit.c (show_key_with_all_names_colon): Renamed the record - for revocation keys to "rvk". - -2002-05-27 Werner Koch - - * keyedit.c (show_key_with_all_names_colon): New. - (show_key_with_all_names): Divert to new function when required. - Sanitize printing of revoker name. - -2002-05-27 David Shaw - - * build-packet.c (build_sig_subpkt): Handle setting sig flags for - certain subpacket types (notation, policy url, exportable, - revocable). keyedit.c (sign_mk_attrib): Flags no longer need to - be set here. - - * packet.h, parse-packet.c (parse_one_sig_subpkt), build-packet.c - (build_sig_subpkt): Call parse_one_sig_subpkt to sanity check - buffer lengths before building a sig subpacket. - -2002-05-26 David Shaw - - * sign.c (mk_notation_and_policy): Include secret key to enable %s - expandos, and pass notations through pct_expando as well. - - * main.h, misc.c (pct_expando): Add %s and %S expandos for - signer's keyid. - -2002-05-25 David Shaw - - * g10.c (strusage, build_list): Add compress algorithms to - --version list. Show algorithm numbers when --verbose --version - is done. - -2002-05-22 David Shaw - - * options.h, main.h, keygen.c (keygen_set_set_prefs, - keygen_get_std_prefs, keygen_upd_std_prefs), keyedit.c - (keyedit_menu), g10.c (main), pkclist.c (select_algo_from_prefs): - Add --personal-preference-list which allows the user to factor in - their own preferred algorithms when the preference lists are - consulted. Obviously, this does not let the user violate a - recepient's preferences (and the RFC) - this only influences the - ranking of the agreed-on (and available) algorithms from the - recepients. Suggested by David Hollenberg. - - * options.h, keygen.c (keygen_set_std_prefs), g10.c (main): Rename - --preference-list to --default-preference-list (as that is what it - really is), and make it a true default in that if the user selects - "default" they get this list and not the compiled-in list. - -2002-05-22 Werner Koch - - * g10.c (main): Add missing LF in a info printout and made it - translatable. Noted by Michael Tokarev. - -2002-05-21 Werner Koch - - * g10.c (main): Removed the undef of USE_SHM_COPROCESSING which - was erroneously introduced on 2002-01-09. - - * signal.c (got_fatal_signal): Don't write the Nul to stderr. - Reported by David Hollenberg. - -2002-05-18 David Shaw - - * main.h, g10.c (main), revoke.c (gen_desig_revoke): Generate a - designated revocation via --desig-revoke - - * keyedit.c (keyedit_menu, menu_addrevoker): New "addrevoker" - command to add a designated revoker to a key. - -2002-05-17 David Shaw - - * gpgv.c: Add stub for get_ownertrust(). - - * g10.c (main): --allow-freeform-uid should be implied by - OpenPGP. Add --no-allow-freeform-uid. - - * keyedit.c (sign_uids): Issue a warning when signing a - non-selfsigned uid. - - * getkey.c (merge_selfsigs_main): If a key has no selfsigs, and - allow-non-selfsigned-uid is not set, still try and make the key - valid by checking all uids for a signature from an ultimately - trusted key. - -2002-05-16 David Shaw - - * main.h, keygen.c (keygen_add_revkey): Add revocation key - subpackets to a signature (callable by - make_keysig_packet). (write_direct_sig): Write a 1F direct key - signature. (parse_revocation_key): Parse a string in - algo:fpr:sensitive format into a revocation - key. (get_parameter_revkey, do_generate_keypair): Call above - functions when prompted from a batch key generation file. - - * build-packet.c (build_sig_subpkt): Allow multiple revocation key - subpackets in a single sig. - - * keydb.h, getkey.c (get_seckey_byfprint): Same as - get_pubkey_byfprint, except for secret keys. We only know the - fingerprint of a revocation key, so this is needed to retrieve the - secret key needed to issue a revokation. - - * packet.h, parse-packet.c (parse_signature, parse_revkeys): Split - revkey parsing off into a new function that can be used to reparse - after manipulating the revkey list. - - * sign.c (make_keysig_packet): Ability to make 1F direct key - signatures. - -2002-05-15 David Shaw - - * options.skel: keyserver.pgp.com is gone, so list pgp.surfnet.nl - as a sample LDAP server instead. - - * getkey.c (merge_selfsigs_main): Properly handle multiple - revocation keys in a single packet. Properly handle revocation - keys that are in out-of-order packets. Remove duplicates in - revocation key list. - -2002-05-14 Timo Schulz - - * exec.c (make_tempdir) [MINGW32]: Added missing '\'. - -2002-05-14 Stefan Bellon - - * exec.c (make_tempdir): Make use of EXTSEP_S instead of hardcoded - dot as extension separator. - -2002-05-13 David Shaw - - * photoid.c (show_photos): Use the long keyid as the filename for - the photo. Use the short keyid as the filename on 8.3 systems. - - * exec.h, exec.c (make_tempdir, exec_write, exec_finish): Allow - caller to specify filename. This should make things easier on - windows and macs where the file extension is required, but a whole - filename is even better. - - * keyedit.c (show_key_with_all_names, show_prefs): Show proper - prefs for a v4 key uid with no selfsig at all. - - * misc.c (check_permissions): Don't check permissions on - non-normal files (pipes, character devices, etc.) - -2002-05-11 Werner Koch - - * mainproc.c (proc_symkey_enc): Avoid segv in case the parser - encountered an invalid packet. - - * keyserver.c (keyserver_export): Get confirmation before sending - all keys. - -2002-05-10 Stefan Bellon - - * g10.c, hkp.c, keyedit.c, keyserver.c: Replaced all occurrances - of strcasecmp with ascii_strcasecmp and all occurrances of - strncasecmp with ascii_memcasecmp. - -2002-05-10 David Shaw - - * packet.h, getkey.c (fixup_uidnode), keyedit.c (show_prefs): Show - assumed prefs for hash and compression as well as the cipher pref. - Show assumed prefs if there are no prefs at all on a v4 - self-signed key. - - * options.h, g10.c (main), sign.c (make_keysig_packet): New - --cert-digest-algo function to override the default key signing - hash algorithm. - -2002-05-09 David Shaw - - * getkey.c (merge_selfsigs_main): Make sure the revocation key - list starts clean as this function may be called more than once - (e.g. from functions in --edit). - - * g10.c, encode.c (encode_crypt), sign.c (sign_file, - sign_symencrypt_file): Make --compress-algo work like the - documentation says. It should be like --cipher-algo and - --digest-algo in that it can override the preferences calculation - and impose the setting the user wants. No --compress-algo setting - allows the usual preferences calculation to take place. - - * main.h, compress.c (compress_filter): use new - DEFAULT_COMPRESS_ALGO define, and add a sanity check for compress - algo value. - -2002-05-08 David Shaw - - * pkclist.c (select_algo_from_prefs): There is an assumed - compression preference for uncompressed data. - -2002-05-07 David Shaw - - * options.h, g10.c (main), getkey.c (finish_lookup), pkclist.c - (algo_available): --pgp7, identical to --pgp6 except that it - permits a few algorithms that PGP 7 added: AES128, AES192, AES256, - and TWOFISH. Any more of these --pgpX flags, and it'll be time to - start looking at a generic --emulate-pgp X option. - - * export.c (do_export_stream): Warn the user when exporting a - secret key if it or any of its secret subkeys are protected with - SHA1 while simple_sk_checksum is set. - - * parse-packet.c (parse_key): Show when the SHA1 protection is - used in --list-packets. - - * options.h, build-packet.c (do_comment), g10.c (main): Rename - --no-comment as --sk-comments/--no-sk-comments (--no-comment still - works) and make the default be --no-sk-comments. - -2002-05-07 Werner Koch - - * keygen.c (get_parameter_algo): Never allow generation of the - deprecated RSA-E or RSA-S flavors of PGP RSA. - (ask_algo): Allow generation of RSA sign and encrypt in expert - mode. Don't allow ElGamal S+E unless in expert mode. - * helptext.c: Added entry keygen.algo.rsa_se. - -2002-05-07 David Shaw - - * keyedit.c (sign_uids): If --expert is set, allow re-signing a - uid to promote a v3 self-sig to a v4 one. This essentially - deletes the old v3 self-sig and replaces it with a v4 one. - - * packet.h, parse-packet.c (parse_key), getkey.c - (merge_keys_and_selfsig, merge_selfsigs_main): a v3 key with a v4 - self-sig must never let the v4 self-sig express a key expiration - time that extends beyond the original v3 expiration time. - -2002-05-06 David Shaw - - * keyedit.c (sign_uids): When making a self-signature via "sign" - don't ask about sig level or expiration, and include the usual - preferences and such for v4 self-sigs. (menu_set_preferences): - Convert uids from UTF8 to native before printing. - - * keyedit.c (sign_uids): Convert uids from UTF8 to native before - printing. (menu_set_primary_uid): Show error if the user tries to - make a uid with a v3 self-sig primary. - -2002-05-05 David Shaw - - * import.c (import_one): When merging with a key we already have, - don't let a key conflict (same keyid but different key) stop the - import: just skip the bad key and continue. - - * exec.c (make_tempdir): Under Win32, don't try environment - variables for temp directories - GetTempDir tries environment - variables internally, and it's better not to second-guess it in - case MS adds some sort of temp dir handling to Windows at some - point. - -2002-05-05 Timo Schulz - - * mainproc.c (proc_symkey_enc): Don't ask for a passphrase - in the list only mode. - -2002-05-05 David Shaw - - * keyserver.c (keyserver_refresh): --refresh-keys implies - --merge-only so as not to import keys with keyids that match the - ones being refreshed. Noted by Florian Weimer. - -2002-05-04 Stefan Bellon - - * free-packet.c (copy_public_key): Don't call m_alloc(0), therefore - added consistency check for revkey and numrefkeys. - - * getkey.c (check_revocation_keys): Added consistency check for - revkey and numrefkeys. - - * keyedit.c (show_key_with_all_names): Likewise. - -2002-05-03 David Shaw - - * photoid.c: Provide default image viewer for Win32. - - * misc.c (pct_expando): %t means extension, not name ("jpg", not - "jpeg"). - - * keyserver.c (keyserver_spawn), photoid.c (show_photos), exec.h, - exec.c: Allow the caller to determine the temp file extension when - starting an exec_write and change all callers. - - * keyedit.c (sign_uids): Nonrevocable key signatures cause an - automatic promotion to v4. - - * exec.c: Provide stubs for exec_ functions when NO_EXEC is - defined. - -2002-05-02 David Shaw - - * photoid.h, photoid.c (parse_image_header, image_type_to_string): - Useful functions to return data about an image. - - * packet.h, parse-packet.c (make_attribute_uidname, - parse_attribute_subpkts, parse_attribute), photoid.h, photoid.c - (show_photos): Handle multiple images in a single attribute - packet. - - * main.h, misc.c (pct_expando), sign.c (mk_notation_and_policy), - photoid.c (show_photos): Simpler expando code that does not - require using compile-time string sizes. Call - image_type_to_string to get image strings (i.e. "jpg", - "image/jpeg"). Change all callers. - - * keyedit.c (menu_showphoto), keylist.c (list_keyblock_print): - Allow viewing multiple images within a single attribute packet. - - * gpgv.c: Various stubs for link happiness. - -2002-05-02 David Shaw - - * build-packet.c (build_sig_subpkt), keyedit.c (sign_uids), - options.h, sign.c (mk_notation_and_policy), g10.c (main, - add_notation_data, add_policy_url (new), check_policy_url - (removed)): Allow multiple policy URLs on a given signature. - Split "--notation-data" into "--cert-notation" and - "--sig-notation" so the user can set different policies for key - and data signing. For backwards compatibility, "--notation-data" - sets both, as before. - -2002-05-02 Werner Koch - - * options.skel: Removed the comment on trusted-keys because this - option is now deprecated. - -2002-05-01 David Shaw - - * keyedit.c (menu_adduid): 2440bis04 says that multiple attribute - packets on a given key are legal. - - * keyserver.c (keyserver_refresh): the fake v3 keyid hack applies - to "mailto" URLs as well since they are also served by pksd. - -2002-04-29 Werner Koch - - Added a copyright year for files changed this year. - -2002-04-25 Werner Koch - - * g10.c, options.h: New options --display, --ttyname, --ttytype, - --lc-ctype, --lc-messages to be used with future versions of the - gpg-agent. - * passphrase.c (agent_send_option,agent_send_all_options): New. - (agent_open): Send options to the agent. - - * trustdb.c (update_ownertrust, clear_ownertrust): Do an explicit - do_sync because revalidation_mark does it only if when the - timestamp actually changes. - -2002-04-23 David Shaw - - * main.h, keygen.c (do_generate_keypair), keylist.c - (print_signature_stats, list_all, list_one, list_keyblock, - list_keyblock_print, list_keyblock_colon): After generating a new - key, show the key information (name, keyid, fingerprint, etc.) - Also do not print uncheckable signatures (missing key..) in - --check-sigs. Print statistics (N missing keys, etc.) after - --check-sigs. - - * keyedit.c (sign_uids): When signing a key with an expiration - date on it, the "Do you want your signature to expire at the same - time?" question should default to YES. - -2002-04-22 David Shaw - - * parse-packet.c (parse_plaintext), packet.h, plaintext.c - (handle_plaintext): Fix bug in handling literal packets with - zero-length data (no data was being confused with partial body - length). - - * misc.c (pct_expando), options.skel: %t means extension ("jpg"). - %T means MIME type ("image/jpeg"). - - * import.c (import_one): Only trigger trust update if the keyring - is actually changed. - - * export.c (do_export_stream): Missing a m_free. - -2002-04-22 Stefan Bellon - - * keyid.c (expirestr_from_sk, expirestr_from_sig): Added _() to - string constant. - - * exec.c (make_tempdir) [__riscos__]: Better placement of - temporary file. - -2002-04-20 David Shaw - - * keygen.c (generate_subkeypair): 2440bis04 adds that creating - subkeys on v3 keys is a MUST NOT. - - * getkey.c (finish_lookup): The --pgp6 "use the primary key" - behavior should only apply while data signing and not encryption. - Noted by Roger Sondermann. - -2002-04-19 Werner Koch - - * keygen.c (keygen_set_std_prefs): Put back 3DES because the RFC - says it is good form to do so. - -2002-04-19 David Shaw - - * keyedit.c (menu_deluid): Only cause a trust update if we delete - a non-revoked user id. - - * hkp.c (hkp_ask_import), keyserver.c (parse_keyserver_options, - keyserver_spawn), options.h: Remove fast-import keyserver option - (no longer meaningful). - - * g10.c (main), keyedit.c (sign_uids), options.h: Change - --default-check-level to --default-cert-check-level as it makes - clear what it operates on. - - * g10.c (main): --pgp6 also implies --no-ask-sig-expire. - - * delkey.c (do_delete_key): Comment. - - * keyedit.c (sign_uids, keyedit_menu, menu_deluid, menu_delsig, - menu_expire, menu_revsig, menu_revkey): Only force a trustdb check - if we did something that changes it. - - * g10.c: add "--auto-check-trustdb" to override a - "--no-auto-check-trustdb" - -2002-04-19 Werner Koch - - * tdbio.c (tdbio_write_nextcheck): Return a status whether the - stamp was actually changed. - * trustdb.c (revalidation_mark): Sync the changes. Removed the - sync operation done by its callers. - (get_validity): Add logic for maintaining a pending_check flag. - (clear_ownertrust): New. - - * keyedit.c (sign_uids): Don't call revalidation_mark depending on - primary_pk. - (keyedit_menu): Call revalidation_mark after "trust". - (show_key_with_all_names): Print a warning on the wrong listed key - validity. - - * delkey.c (do_delete_key): Clear the owenertrust information when - deleting a public key. - -2002-04-18 Werner Koch - - * seskey.c (encode_md_value): Print an error message if a wrong - digest algorithm is used with DSA. Changed all callers to cope - with a NULL return. Problem noted by Imad R. Faiad. - -2002-04-18 David Shaw - - * trustdb.c (mark_usable_uid_certs): Properly handle nonrevocable - signatures that can expire. In short, the only thing that can - override an unexpired nonrevocable signature is another unexpired - nonrevocable signature. - - * getkey.c (finish_lookup): Always use primary signing key for - signatures when --pgp6 is on since pgp6 and 7 do not understand - signatures made by signing subkeys. - -2002-04-18 Werner Koch - - * trustdb.c (validate_keys): Never schedule a nextcheck into the - past. - (validate_key_list): New arg curtime use it to set next_expire. - (validate_one_keyblock): Take the current time from the caller. - (clear_validity, reset_unconnected_keys): New. - (validate_keys): Reset all unconnected keys. - - * getkey.c (premerge_public_with_secret): Fixed 0x12345678! syntax - for use with secret keys. - (lookup): Advance the searchmode after a search FIRST. - - * seckey-cert.c (do_check): Always calculate the old checksum for - use after unprotection. - - * g10.c, options.skel: New option --no-escape-from. Made - --escape-from and --force-v3-sigs the default and removed them - from the options skeleton. - -2002-04-16 Werner Koch - - * parse-packet.c (parse_key): Support a SHA1 checksum as per - draft-rfc2440-bis04. - * packet.h (PKT_secret_key): Add field sha1chk. - * seckey-cert.c (do_check): Check the SHA1 checksum - (protect_secret_key): And create it. - * build-packet.c (do_secret_key): Mark it as sha-1 protected. - * g10.c, options.h: New option --simple-sk-checksum. - -2002-04-13 David Shaw - - * parse-packet.c (parse_signature): Minor fix - signatures should - expire at their expiration time and not one second later. - - * keygen.c (proc_parameter_file): Allow specifying preferences - string (i.e. "s5 s2 z1 z2", etc) in a batchmode key generation - file. - - * keyedit.c (keyedit_menu): Print standard error message when - signing a revoked key (no new translation). - - * getkey.c (merge_selfsigs): Get the default set of key prefs from - the real (not attribute) primary uid. - -2002-04-12 David Shaw - - * pkclist.c (build_pk_list): Fix bug that allowed a key to be - selected twice in batch mode if one instance was the default - recipient and the other was an encrypt-to. Noted by Stefan - Bellon. - - * parse-packet.c (dump_sig_subpkt): Show data in trust and regexp - sig subpackets. - - * keyedit.c (keyedit_menu): Use new function real_uids_left to - prevent deleting the last real (i.e. non-attribute) uid. Again, - according to the attribute draft. (menu_showphoto): Make another - string translatable. - -2002-04-11 David Shaw - - * build-packet.c (build_sig_subpkt): Delete subpackets from both - hashed and unhashed area on update. (find_subpkt): No longer - needed. - - * keyedit.c (sign_uids): With --pgp2 on, refuse to sign a v3 key - with a v4 signature. As usual, --expert overrides. Try to tweak - some strings to a closer match so they can all be translated in - one place. Use different helptext keys to allow different help - text for different questions. - - * keygen.c (keygen_upd_std_prefs): Remove preferences from both - hashed and unhashed areas if they are not going to be used. - -2002-04-10 David Shaw - - * misc.c (pct_expando), options.skel: Use %t to indicate type of a - photo ID (in this version, it's always "jpeg"). Also tweak string - expansion loop to minimize reallocs. - - * mainproc.c (do_check_sig): Variable type fix. - - * keyedit.c (menu_set_primary_uid): Differentiate between true - user IDs and attribute user IDs when making one of them primary. - That is, if we are making a user ID primary, we alter user IDs. - If we are making an attribute packet primary, we alter attribute - packets. This matches the language in the latest attribute packet - draft. - - * keyedit.c (sign_uids): No need for the empty string hack. - - * getkey.c (fixup_uidnode): Only accept preferences from the - hashed segment of the self-sig. - -2002-04-10 Werner Koch - - * tdbio.c (migrate_from_v2): Fixed the offset to read the old - ownertrust value and only add entries to the table if we really - have a value. - -2002-04-08 David Shaw - - * status.h, status.c (get_status_string): Add KEYEXPIRED, EXPSIG, - and EXPKEYSIG. Add "deprecated-use-keyexpired-instead" to - SIGEXPIRED. - - * sig-check.c (do_check): Start transition from SIGEXPIRED to - KEYEXPIRED, since the actual event is signature verification by an - expired key and not an expired signature. (do_signature_check, - packet.h): Rename as signature_check2, make public, and change all - callers. - - * mainproc.c (check_sig_and_print, do_check_sig): Use status - EXPSIG for an expired, but good, signature. Add the expiration - time (or 0) to the VALIDSIG status line. Use status KEYEXPSIG for - a good signature from an expired key. - - * g10.c (main): remove checks for no arguments now that argparse - does it. - -2002-04-06 Werner Koch - - * keyring.c (keyring_get_keyblock): Disable the keylist mode here. - - * encode.c (encode_simple, encode_crypt): Only test on compressed - files if a compress level was not explicity set. - - * keygen.c (keygen_set_std_prefs): Removed Blowfish and Twofish - from the list of default preferences, swapped the preferences of - RMD160 and SHA1. Don't include a preference to 3DES unless the - IDEA kludge gets used. - - * free-packet.c (free_packet): call free_encrypted also for - PKT_ENCRYPTED_MDC. - - * compress.c (release_context): New. - (handle_compressed): Allocate the context and setup a closure to - release the context. This is required because there is no - guarabntee that the filter gets popped from the chain at the end - of the function. Problem noted by Timo and probably also the - cause for a couple of other reports. - (compress_filter): Use the release function if set. - - * tdbio.c [__CYGWIN32__]: Don't rename ftruncate. Noted by - Disastry. - - * parse-packet.c (parse_signature): Put parens around a bit test. - - * exec.c (make_tempdir): Double backslash for TMP directory - creation under Windows. Better strlen the DIRSEP_S constants for - allocation measurements. - - * decrypt.c (decrypt_messages): Release the passphrase aquired - by get_last_passphrase. - -2002-04-02 Werner Koch - - * Makefile.am (EXTRA_DIST): Removed OPTIONS an pubring.asc - they - are no longer of any use. - -2002-04-03 David Shaw - - * keyserver.c (parse_keyserver_options): fix auto-key-retrieve to - actually work as a keyserver-option (noted by Roger Sondermann). - - * keylist.c (reorder_keyblock): do not reorder the primary - attribute packet - the first user ID must be a genuine one. - -2002-03-31 David Shaw - - * keylist.c (list_keyblock_colon): Fix ownertrust display with - --with-colons. - - * keygen.c (generate_user_id), photoid.c (generate_photo_id): - Properly initialize the user ID refcount. A few more "y/n" -> - "y/N" in photoid.c. - - * keyedit.c (ask_revoke_sig): Warn the user if they are about to - revoke an expired sig (not a problem, but they should know). Also - tweak a few prompts to change "y/n" to "y/N", which is how most - other prompts are written. - - * keyserver.c (keyserver_search_prompt): Control-d escapes the - keyserver search prompt. - - * pkclist.c (show_revocation_reason & callers): If a subkey is - considered revoked solely because the parent key is revoked, print - the revocation reason from the parent key. - - * trustdb.c (get_validity): Allow revocation/expiration to apply - to a uid/key with no entry in the trustdb. - -2002-03-29 David Shaw - - * keyserver.c (printunquoted): unquote backslashes from keyserver - searches - - * hkp.c (write_quoted): quote backslashes from keyserver searches - -2002-03-26 Werner Koch - - * keygen.c (ask_keysize): Removed the warning for key sizes > 1536. - -2002-03-25 Werner Koch - - * keyedit.c (sign_uids): Use 2 strings and not a %s so that - translations can be done the right way. - * helptext.c: Fixed small typo. - -2002-03-23 David Shaw - - * import.c (append_uid, merge_sigs): it is okay to import - completely non-signed uids now (with --allow-non-selfsigned-uid). - - * getkey.c (get_primary_uid, merge_selfsigs_main): do not choose - an attribute packet (i.e. photo) as primary uid. This prevents - oddities like "Good signature from [image of size 2671]". This is - still not perfect (one can still select an attribute packet as - primary in --edit), but is closer to the way the draft is going. - - * g10.c (build_list): algorithms should include 110. - - * g10.c (main): --pgp2 implies --no-ask-sig-expire and - --no-ask-cert-expire as those would cause a v4 sig/cert. - - * armor.c (is_armor_header): be more lenient in what constitutes a - valid armor header (i.e. -----BEGIN blah blah-----) as some - Windows programs seem to add spaces at the end. --openpgp makes - it strict again. - -2002-03-18 David Shaw - - * keyserver.c (keyserver_search_prompt): Properly handle a "no - keys found" case from the internal HKP code (external HKP is ok). - Also, make a COUNT -1 (i.e. streamed) keyserver response a little - more efficient. - - * g10.c (main): Add --no-allow-non-selfsigned-uid - -2002-03-17 David Shaw - - * g10.c (main): --openpgp implies --allow-non-selfsigned-uid. - - * getkey.c (merge_selfsigs_main): If none of the uids are primary - (because none are valid) then pick the first to be primary (but - still invalid). This is for cosmetics in case some display needs - to print a user ID from a non-selfsigned key. Also use - --allow-non-selfsigned-uid to make such a key valid and not - --always-trust. The key is *not* automatically trusted via - --allow-non-selfsigned-uid. - - * mainproc.c (check_sig_and_print): Make sure non-selfsigned uids - print [uncertain] on verification even though one is primary now. - - * getkey.c (merge_selfsigs): If the main key is not valid, then - neither are the subkeys. - - * import.c (import_one): Allow --allow-non-selfsigned-uid to work - on completely unsigned keys. Print the uids in UTF8. Remove - mark_non_selfsigned_uids_valid(). - - * keyedit.c (show_key_with_all_names): Show revocation key as - UTF8. - - * sign.c (clearsign_file): Allow --not-dash-escaped to work with - v3 keys. - -2002-03-14 Werner Koch - - * main.h: Changed the default algorithms to CAST5 and SHA1. - -2002-03-13 David Shaw - - * import.c (chk_self_sigs): Show which user ID a bad self-sig - (invald sig or unsupported public key algorithm) resides on. - - * import.c (chk_self_sigs): any valid self-sig should mark a user - ID or subkey as valid - otherwise, an attacker could DoS the user - by inventing a bogus invalid self-signature. - -2002-03-07 David Shaw - - * g10.c (main): make a few more strings translatable. - - * options.h, options.skel, g10.c (main), gpgv.c, mainproc.c - (check_sig_and_print), keyserver.c (parse_keyserver_options): - --auto-key-retrieve should really be a keyserver-option variable. - - * import.c (revocation_present): new function to print a warning - if a key is imported that has been revoked by designated revoker, - but the designated revoker is not present to verify the - revocation. If keyserver-options auto-key-retrieve is set, try - and fetch the designated revoker from the keyserver. - - * import.c (import_one): call revocation_present after importing a - new key. Note that this applies to --import, --recv-keys, and - --search-keys. - - * keyserver-internal.h, keyserver.c (keyserver_import_fprint): - import via fingerprint (for revocation keys). - - * keyserver.c (keyserver_import_keyid): much simpler - implementation now that we're using KEYDB_SEARCH_DESC internally. - -2002-03-04 David Shaw - - * revoke.c (gen_revoke): do not prompt for revocation reason for - v3 revocations (unless force-v4-certs is on) since they wouldn't - be used anyway. - - * keyedit.c (menu_revsig): show the status of the sigs - (exportable? revocable?) to the user before prompting for which - sig to revoke. Also, make sure that local signatures get local - revocations. - - * keyedit.c (ask_revoke_sig): remind the user which sigs are - local. - - * g10.c (main): Add "exec-path" variable to override PATH for - execing programs. - - * export.c (do_export_stream): properly check return code from - classify_user_id to catch unclassifiable keys. - -2002-03-03 David Shaw - - * parse-packet.c (parse_signature): variable type tweak for RISC - OS (from Stefan) - -2002-02-28 David Shaw - - * getkey.c (check_revocation_keys): New function to check a - revocation against a list of potential revocation keys. Note the - loop-breaking code here. This is to prevent blowing up if A is - B's revocation key, while B is also A's. Note also that this is - written so that a revoked revoker can still issue revocations: - i.e. If A revokes B, but A is revoked, B is still revoked. I'm - not completely convinced this is the proper behavior, but it - matches how PGP does it. It does at least have the advantage of - much simpler code - my first version of this had lots of loop - maintaining code so you could chain revokers many levels deep and - if D was revoked, C was not, which meant that B was, and so on. - It was sort of scary, actually. - - * getkey.c (merge_selfsigs_main): Add any revocation keys onto the - pk. This is particularly interesting since we normally only get - data from the most recent 1F signature, but you need multiple 1F - sigs to properly handle revocation keys (PGP does it this way, and - a revocation key could be marked "sensitive" and hence in a - different signature). Also, if a pk has a revocation key set, - check for revocation sigs that were not made by us - if made by a - valid revocation key, mark the pk revoked. - - * packet.h, getkey.c (cache_public_key): do not cache key if - "dont_cache" is set. This allows the revocation key code to look - up a key and return information that may be inaccurate to prevent - loops without caching the fake data. - - * packet.h, sig-check.c (do_signature_check): Record if a - signature was made by a revoked pk. - - * packet.h, parse-packet.c (parse_one_sig_subpkt, - can_handle_critical, parse_signature): Get revocation key - information out of direct sigs. - - * keylist.c (list_keyblock_print): don't assume that the presence - of a 0x20 signature means the key is revoked. With revocation - keys, this may not be true if the revocation key is not around to - verify it or if verification failed. Also, 0x1F should get listed - as "sig", and not "unexpected signature class". - - * keyedit.c (show_key_with_all_names): Add a flag for printing - revoker information and change all callers. - - * import.c (merge_blocks): merge in any new direct key (0x1F) - sigs. - - * import.c (import_revoke_cert): don't keep processing after a - revocation is rejected. - - * import.c (delete_inv_parts): Allow importing a revocation - signature even if it was not issued by the key. This allows a - revocation key to issue it. Of course, the sig still needs to be - checked before we trust it. - - * free-packet.c (copy_public_key): Include a new copy of the - revocation keys when duping a pk. - - * free-packet.c (free_seckey_enc, release_public_key_parts): Free - any revocation keys that are attached to a sig or pk. - - * export.c (do_export_stream): Do not export signatures with - "sensitive" revocation keys in them. - -2002-02-27 David Shaw - - * export.c (do_export_stream): Do not include v3 keys in a - --export-secret-subkeys export. - - * getkey.c (merge_selfsigs_main): If a key isn't valid (say, - because of no self-signature), allow --always-trust to force it - valid so it can be trusted. - -2002-02-25 David Shaw - - * hkp.c (hkp_ask_import), hkp.h, keyserver.c (all): treat key - lists internally as fingerprints when possible. All this is via - KEYDB_SEARCH_DESC - no point in reinventing the wheel. This allows - the helper program to search the keyserver by fingerprint if - desired (and the keyserver supports it). Note that automatic - fingerprint promotion during refresh only applies to v4 keys as a - v4 fingerprint can be easily changed into a long or short key id, - and a v3 cannot. - - * pubkey-enc.c, getkey.c, misc.c, main.h: Take two copies of - hextobyte() from pubkey-enc.c and getkey.c and make them into one - copy in misc.c. - -2002-02-22 David Shaw - - * keyserver.c (keyserver_search_prompt): Detect a "no keys found" - case even if the helper program does not explicitly say how many - keys were found. - - * hkp.c (parse_hkp_index): Bug fix - don't report non-revoked keys - as revoked in HKP key searches. - -2002-02-19 Werner Koch - - * parse-packet.c (parse_trust): Made parsing more robust. - -2002-02-19 David Shaw - - * hkp.c (parse_hkp_index): Catch corruption in HKP index lines - (can be caused by broken or malicious keyservers). - - * keyserver.c (keyserver_work): Add KEYSERVER_NOT_SUPPORTED for - unsupported actions (say, a keyserver that has no way to search, - or a readonly keyserver that has no way to add). Also add a - USE_EXTERNAL_HKP define to disable the internal HKP keyserver - code. - -2002-02-14 Werner Koch - - * g10.c: New option --no-use-agent. - - * pkclist.c (check_signatures_trust): Always print the warning for - unknown and undefined trust. Removed the did_add cruft. Reported - by Janusz A. Urbanowicz. - -2002-02-11 David Shaw - - * hkp.c (parse_hkp_index): Bug fix - properly handle user IDs with - colons (":") in them while HKP searching. - -2002-02-09 David Shaw - - * misc.c (pct_expando): More comments. - - * keydb.h, sign.c (mk_notation_and_policy): Clarify what is a sig - and what is a cert. A sig has sigclass 0x00, 0x01, 0x02, or 0x40, - and everything else is a cert. - - * g10.c (main), keyedit.c (keyedit_menu): Add a "nrlsign" for - nonrevocable and local key signatures. - - * g10.c (main): Add a --no-force-mdc to undo --force-mdc. - - * options.h, g10.c (main), cipher.c (write_header): Add a knob to - --disable-mdc/--no-disable-mdc. Off by default, of course, but is - used in --pgp2 and --pgp6 modes. - - * pkclist.c (build_pk_list): Allow specifying multiple users in - the "Enter the user ID" loop. Enter a blank line to stop. Show - each key+id as it is added. - - * keylist.c (show_policy_url), mainproc.c (print_notation_data): - It is not illegal (though possibly silly) to have multiple policy - URLs in a given signature, so print all that are present. - - * hkp.c (hkp_search): More efficient implementation of URL-ifying - code. - -2002-02-04 David Shaw - - * main.h, misc.c (pct_expando): New function to generalize - %-expando processing in any arbitrary string. - - * photoid.c (show_photo): Call the new pct_expando function rather - than expand strings internally. - - * sign.c (mk_notation_and_policy): Show policy URLs and notations - when making a signature if show-policy/show-notation is on. - %-expand policy URLs during generation. This lets the user have - policy URLs of the form "http://notary.jabberwocky.com/keysign/%K" - which will generate a per-signature policy URL. - - * main.h, keylist.c (show_policy_url, show_notation): Add amount - to indent so the same function can be used in key listings as well - as during sig generation. Change all callers. - -2002-02-04 David Shaw - - * keyserver.c, options.h (parse_keyserver_options, keyidlist): - Workaround for the pksd and OKS keyserver bug that calculates v4 - RSA keyids as if they were v3. The workaround/hack is to fetch - both the v4 (e.g. 99242560) and v3 (e.g. 68FDDBC7) keyids. This - only happens for key refresh while using the HKP scheme and the - refresh-add-fake-v3-keyids keyserver option must be set. This - should stay off by default. - -2002-02-03 David Shaw - - * keyserver.c (keyserver_spawn): Bug fix - do not append keys to - each other when --sending more than one. - -2002-02-02 David Shaw - - * options.h, g10.c (main), keyedit.c (sign_uids), sign.c - (mk_notation_and_policy): Split "--set-policy-url" into - "--cert-policy-url" and "--sig-policy-url" so the user can set - different policies for key and data signing. For backwards - compatibility, "--set-policy-url" sets both, as before. - -2002-01-30 Werner Koch - - * g10.c (main): --gen-random --armor does now output a base64 - encoded string. - -2002-01-28 David Shaw - - * g10.c (main), options.h, pkclist.c (algo_available): --pgp6 - flag. This is not nearly as involved as --pgp2. In short, it - turns off force_mdc, turns on no_comment, escape_from, and - force_v3_sigs, and sets compression to 1. It also restricts the - user to IDEA (if present), 3DES, CAST5, MD5, SHA1, and RIPEMD160. - See the comments above algo_available() for lots of discussion on - why you would want to do this. - -2002-01-27 David Shaw - - * keygen.c (keygen_set_std_prefs): Comment - - * keyedit.c (sign_uids): Bug fix - when signing with multiple - secret keys at the same time, make sure each key gets the sigclass - prompt. - - * exec.c (exec_finish): Close the iobuf and FILE before trying to - waitpid, so the remote process will get a SIGPIPE and exit. This - is only a factor when using a pipe to communicate. - - * exec.c (exec_write): Disable cache-on-close of the fd iobuf (is - this right? Why is a fd iobuf cached at all?) - -2002-01-26 Werner Koch - - * g10.c, options.h: New option --gpg-agent-info - * passphrase.c (agent_open): Let it override the environment info. - * seckey-cert.c (check_secret_key): Always try 3 times when the - agent is enabled. - * options.skel: Describe --use-agent. - -2002-01-24 David Shaw - - * pubkey-enc.c (is_algo_in_prefs, get_it): Only check preferences - against keys with v4 self sigs - there is really little point in - warning for every single non-IDEA message encrypted to an old key. - - * pkclist.c (select_algo_from_prefs): Only put in the fake IDEA - preference if --pgp2 is on. - - * mainproc.c (check_sig_and_print): Print "Expired" for expired - but good signatures (this still prints "BAD" for expired but bad - signatures). - -2002-01-23 David Shaw - - * keygen.c (ask_keysize): Cosmetic: don't present a RSA signing - key as a "keypair" which can be 768 bits long (as RSA minimum is - 1024). - - * pubkey-enc.c (is_algo_in_prefs): Allow IDEA as a fake preference - for v3 keys with v3 selfsigs. - -2002-01-22 David Shaw - - * packet.h, getkey.c (merge_selfsigs_main), pkclist.c - (select_algo_from_prefs): Implement the fake IDEA preference as - per RFC2440:12.1. This doesn't mean that IDEA will be used (the - plugin may not be present), but it does mean that a v3 key with a - v3 selfsig has an implicit IDEA preference instead of 3DES. v3 - keys with v4 selfsigs use preferences as normal. - - * encode.c (encode_crypt): if select_algo_from_prefs fails, this - means that we could not find a cipher that both keys like. Since - all v4 keys have an implicit 3DES preference, this means there is - a v3 key with a v3 selfsig in the list. Use 3DES in this case as - it is the safest option (we know the v4 key can handle it, and - we'll just hope the v3 key is being used in an implementation that - can handle it). If --pgp2 is on, warn the user what we're doing - since it'll probably break PGP2 compatibility. - - * g10.c (main): Do not force using IDEA for encrypted files in - --pgp2 mode - let the fake IDEA preference choose this for us for - better compatibility when encrypting to multiple keys, only some - of which are v3. - - * keygen.c (keygen_set_std_prefs): Put 3DES on the end of the - default cipher pref list (RFC2440: "...it is good form to place it - there explicitly."). If the user has the IDEA plugin installed, - put a preference for IDEA *after* 3DES to effectively disable its - use for everything except encrypting along with v3 keys. - - * encode.c, g10.c, sign.c: Change the PGP2 warning line from - "... will not be usable ..." to "... may not be usable ..." as the - user could be using one of the enhanced PGP2 variations. - - * helptext.c: Revise the sign_uid.class help text as suggested by - Stefan. - -2002-01-20 Werner Koch - - * passphrase.c (passphrase_to_dek): Add tryagain_text arg to be - used with the agent. Changed all callers. - (agent_get_passphrase): Likewise and send it to the agent - * seckey-cert.c (do_check): New arg tryagain_text. - (check_secret_key): Pass the string to do_check. - * keygen.c (ask_passphrase): Set the error text is required. - * keyedit.c (change_passphrase): Ditto. - - * passphrase.c (agent_open): Disable opt.use_agent in case of a - problem with the agent. - (agent_get_passphrase): Ditto. - (passphrase_clear_cache): Ditto. - -2002-01-19 Werner Koch - - * passphrase.c (agent_open): Add support for the new Assuan based - gpg-agent. New arg to return the used protocol version. - (agent_get_passphrase): Implemented new protocol here. - (passphrase_clear_cache): Ditto. - (readline): New. - -2002-01-15 Timo Schulz - - * encode.c (encode_crypt_files): Fail if --output is used. - - * g10.c: New command --decrypt-files. - - * decrypt.c (decrypt_messages): New. - -2002-01-09 David Shaw - - * g10.c, misc.c, gpgv.c: move idea_cipher_warn to misc.c so gpgv.c - doesn't need a stub for it any longer. - - * g10.c (get_temp_dir), main.h: no longer used (it's in exec.c now) - - * g10.c (main), delkey.c (delete_keys), main.h : Allow - --delete-key (now --delete-keys, though --delete-key still works, - of course) to delete multiple keys in one go. This applies to - --delete-secret-key(s) and --delete-secret-and-public-key(s) as - well. - -2002-01-09 Timo Schulz - - * encode.c (encode_crypt_files): Now it behaves like verify_files. - - * g10.c (main): We don't need to check argc for encode_crypt_files - any longer. - -2002-01-09 Timo Schulz - - * exec.c: Include windows.h for dosish systems. - -2002-01-08 Timo Schulz - - * g10.c (main): New description for --encrypt-files. - -2002-01-08 Werner Koch - - * g10.c (main): Must register the secring for encryption because - it is needed to figure out the default recipient. Reported by - Roger Sondermann. - -2002-01-05 David Shaw - - * keyedit.c (menu_adduid): Require --expert before adding a photo - ID to a v3 key, and before adding a second photo ID to any key. - - * keyedit.c (keyedit_menu): Don't allow adding photo IDs in - rfc1991 or pgp2 mode. - - * getkey.c (merge_selfsigs_subkey): Permit v3 subkeys. Believe it - or not, this is allowed by rfc 2440, and both PGP 6 and PGP 7 work - fine with them. - - * g10.c, options.h, keyedit.c, sign.c: Move the "ask for - expiration" switch off of --expert, which was getting quite - overloaded, and onto ask-sig-expire and ask-cert-expire. Both - default to off. - - * g10.c (main): Change the default compression algo to 1, to be - more OpenPGP compliant (PGP also uses this, so it'll help with - interoperability problems as well). - - * encode.c (encode_crypt): Handle compression algo 2, since the - default is now 1. - - * build-packet.c (build_attribute_subpkt): Fix off-by-one error. - -2002-01-05 Werner Koch - - * g10.c (main): Do not register the secret keyrings for certain - commands. - - * keydb.c (keydb_add_resource): Use access to test for keyring - existence. This avoids cached opened files which are bad under - RISC OS. - -2002-01-04 David Shaw - - * sign.c (sign_file, sign_symencrypt_file): always use one-pass - packets unless rfc1991 is enabled. This allows a signature made - with a v3 key to work in PGP 6 and 7. Signatures made with v4 - keys are unchanged. - - * g10.c (main): Disallow non-detached signatures in PGP2 mode. - Move the "you must use files and not pipes" PGP2 warning up so all - the PGP2 stuff is together. - - * encode.c (encode_simple): Use the actual filesize instead of - partial length packets in the internal literal packet from a - symmetric message. This breaks PGP5(?), but fixes PGP2, 6, and 7. - It's a decent tradeoff. Note there was only an issue with - old-style RFC1991 symmetric messages. 2440-style messages in 6 - and 7 work with or without partial length packets. - -2002-01-03 David Shaw - - * g10.c (main): Removed --no-default-check-level option, as it is - not consistent with other "default" options. Plus, it is the same - as saying --default-check-level 0. - - * exec.c (exec_read): Disallow caching tempfile from child - process, as this keeps the file handle open and can cause unlink - problems on some platforms. - - * keyserver.c (keyserver_search_prompt): Minor tweak - don't - bother to transform keyids into textual form if they're just going - to be transformed back to numbers. - -2002-01-03 Timo Schulz - - * g10.c: New command --encrypt-files. - - * verify.c (print_file_status): Removed the static because - encode_crypt_files also uses this function. - - * main.h (print_files_status): New. - (encode_crypt_files): New. - - * encode.c (encode_crypt_files): New. - -2002-01-02 Stefan Bellon - - * keyserver.c: Moved util.h include down in order to avoid - redefinition problems on RISC OS. - - * keyring.c (keyring_lock): Only lock keyrings that are writable. - - * keyring.c (keyring_update_keyblock): Close unused iobuf. - - * hkp.c (parse_hkp_index, hkp_search) [__riscos__]: Changed - unsigned char* to char* because of compiler issues. - - * exec.c (exec_finish) [__riscos__]: Invalidate close cache so - that file can be unlinked. - -2001-12-28 David Shaw - - * g10.c (main): Use a different strlist to check extensions since - they need to be handled seperately now. - - * misc.c,main.h (check_permissions): Properly handle permission - and ownership checks on files in the lib directory - (e.g. /usr/local/lib/gnupg), which are owned by root and are - world-readable, and change all callers to specify extension or - per-user file. - - * photoid.c (show_photo), keyserver.c (keyserver_spawn): Bug fix - - don't call exec_finish if exec_write fails. - - * keyserver.c (keyserver_spawn): Look for OPTIONS from the - keyserver helper - specifically, a "OUTOFBAND" option for the - email keyserver. - - * mainproc.c (list_node), keylist.c (list_keyblock_colon), - import.c (delete_inv_parts), export.c (do_export_stream): Use - signature flags for exportability check rather than re-parsing the - subpacket. - - * keyid.c, keydb.h (get_lsign_letter): No longer needed. - -2001-12-27 David Shaw - - * exec.c (exec_finish): Show errors when temp files cannot be - deleted for whatever reason. - - * exec.c (exec_read): Don't rely on WEXITSTATUS being present. - - * exec.c (make_tempdir): Add temp file creator for win32. Don't - create an incoming temp file if the exec is write-only. - - * keyserver.c (keyserver_spawn): Clean up error handling, for when - the spawn fails. - - * photoid.c (show_photo): Clean up error handling. - - * misc.c (check_permissions): Neaten. - -2001-12-25 David Shaw - - * mkdtemp.c (mkdtemp): Add copyleft info and tweak the 'X' counter - to be a bit simpler. - - * keyserver.c, photoid.c: Remove unused headers left over from - when the exec functions lived there. - -2001-12-23 Timo Schulz - - * misc.c (check_permissions): Do not use it for W32 systems. - - * tdbio.c (migrate_from_v2): Define ftruncate as chsize() for W32. - - * mkdtemp.c: W32 support. - - * photoid.c: Ditto. - - * exec.c: Ditto. - -2001-12-22 David Shaw - - * exec.c (make_tempdir): avoid compiler warning with const - - * mkdtemp.c (mkdtemp): catch the empty ("") string case in case - someone repurposes mkdtemp at some point. - - * photoid.c (generate_photo_id, show_photo): some type changes - from Stefan Bellon. - - * exec.c (make_tempdir): handle Win32 systems, suggested by Timo - Schulz. - -2001-12-22 Werner Koch - - * encode.c (encode_simple, encode_crypt): i18n 2 strings. - -2001-12-22 Timo Schulz - - * encode.c (encode_simple, encode_crypt): Use is_file_compressed - to avoid to compress compressed files. - -2001-12-22 Werner Koch - - * keyserver.c (keyserver_spawn): Removed some variables - declaration due to shadowing warnings. - - * build-packet.c (build_attribute_subpkt): s/index/idx/ to avoid - compiler warnig due to index(3). - - * getkey.c (get_ctx_handle): Use KEYDB_HANDLE as return value. - * keylist.c (list_one): Made resname const. - - * keyedit.c (keyedit_menu): Allow "addphoto" only when --openpgp is - not used. - - * options.skel: Changed one example photo viewer to qiv. - -2001-12-21 David Shaw - - * Makefile.am: add exec.c, exec.h, photoid.c, and photoid.h - - * build-packet.c (build_attribute_subpkt): new function to build - the raw attribute subpacket. Note that attribute subpackets have - the same format as signature subpackets. - - * exec.c: new file with generic exec-a-program functionality. - Used by both photo IDs and keyserver helpers. This is pretty much - the same code that used to be keyserver specific, with some - changes to be usable generically. - - * free-packet.c (free_attributes (new)): function to free an - attribute packet. - - * gpgv.c: added stub show_photo - - * keyedit.c (keyedit_menu, menu_adduid, menu_showphoto): can add a - photo (calls generate_photo_id), or display a photo (calls - show_photo) from the --edit menu. New commands are "addphoto", - and "delphoto" (same as "deluid"). - - * keylist.c (list_keyblock_print): show photos during key list if - --show-photos enabled. - - * keyserver.c (keyserver_spawn): use the generic exec_xxx - functions to call keyserver helper. - - * g10.c, options.h: three new options - --{no-}show-photos, and - --photo-viewer to give the command line to display a picture. - - * options.skel: instructions for the photo viewer - - * parse-packet.c (parse_user_id, setup_user_id (new)): common code - for both user IDs and attribute IDs moved to setup_user_id. - - * parse-packet.c (make_attribute_uidname (new)): constructs a fake - "name" for attribute packets (e.g. "[image of size ...]") - - * parse-packet.c (parse_attribute (replaces parse_photo_id), - parse_attribute_subpkts): Builds an array of individual - attributes. Currently only handles attribute image / type jpeg - subpackets. - - * sign.c (hash_uid): Fix bug in signing attribute (formerly - photo_id) packets. - - * packet.h, and callers: globally change "photo_id" to "attribute" - and add structures for attributes. The packet format is generic - attributes, even though the only attribute type thus far defined - is jpeg. - -2001-12-21 David Shaw - - * parse-packet.c (can_handle_critical): Can handle critical - revocation subpackets now. - - * trustdb.c (mark_usable_uid_certs): Disregard revocations for - nonrevocable sigs. Note that this allows a newer revocable - signature to override an older nonrevocable signature. - - * sign.c (make_keysig_packet): add a duration field and change all - callers. This makes make_keysig_packet closer to - write_signature_packets and removes some duplicated expiration - code. - - * keyedit.c (keyedit_menu, menu_revsig, sign_uids, - sign_mk_attrib): Add nrsign command, don't allow revoking a - nonrevocable signature, - - * g10.c (main): Add --nrsign option to nonrevocably sign a key - from the command line. - - * build-packet.c (build_sig_subpkt_from_sig): Comment to explain - the use of CRITICAL. - -2001-12-21 Werner Koch - - * g10.c. options.h : New option --show-keyring - * getkey.c (get_ctx_handle): New. - * keylist.c (list_one): Implement option here. By David Champion. - -2001-12-20 David Shaw - - * keyserver.c (keyserver_spawn): Use mkdtemp() to make temp - directory. - - * mkdtemp.c: replacement function for those platforms that don't - have mkdtemp (make a temp directory securely). - -2001-12-19 David Shaw - - * misc.c (check_permissions): New function to stat() and ensure - the permissions of GNUPGHOME and the files have safe permissions. - - * keydb.c (keydb_add_resource): Check keyring permissions. - - * tdbio.c (tdbio_set_dbname): Check permissions of trustdb.gpg - - * keyserver.c (keyserver_spawn): Disable keyserver schemes that - involve running external programs if the options file has unsafe - permissions or ownership. - - * g10.c, options.h: New option --no-permission-warning to disable - the permission warning message(s). This also permits use of the - keyserver if it had been disabled (see above). Also check the - permissions/ownership of random_seed. - - * keyserver.c (keyserver_spawn): The new glibc prints a warning - when using mktemp() (the code was already secure, but the warning - was bound to cause confusion). Use a different implementation - based on get_random_bits() instead. Also try a few times to get - the temp dir before giving up. - -2001-12-19 Werner Koch - - * g10.c, passphrase.c [CYGWIN32]: Allow this as an alias for MINGW32. - -2001-12-18 David Shaw - - * g10.c (idea_cipher_warn): Add a flag to show the warning always - or once per session and change all callers (show always except for - the secret key protection and unknown cipher from an encrypted - message errors). Also make the strings translatable. - - * pubkey-enc.c (get_it): Add the IDEA cipher warning if the user - tries to decrypt an IDEA encrypted message without the IDEA - plugin. - - * keyserver.c (parse_keyserver_uri): More strict checking of the - keyserver URI. Specifically, fail if the ":port" section is - anything except a number between 1 and 65535. - -2001-12-17 David Shaw - - * keyserver.c (print_keyinfo): No need to check for - control/illegal characters, as utf8_to_native does this for us. - - * mainproc.c (proc_encrypted): Use generic IDEA warning. - - * gpgv.c: add stub for idea_cipher_warn - - * g10.c, hkp.c, keyserver.c: Fix capitalization and plural issues. - - * encode.c (encode_crypt), sign.c (sign_file, clearsign_file): - disable pgp2 mode after the message is no longer pgp2 compatible. - - * g10.c (main): Tweak the PGP2.x IDEA warning to use the generic - warning, and not merely fail if the IDEA plugin isn't there. - - * g10.c (main, idea_cipher_warn), keygen.c (set_one_pref), - seckey-cert.c (do_check): Add a generic IDEA warning for when the - IDEA plugin is not present. This pops up when the user uses - "--cipher-algo idea", when setpref is used to set a "S1" - preference, and when a secret key protected with IDEA is used. - -2001-12-15 Werner Koch - - * keyserver.c (keyserver_spawn): Assert that we have dropped privs. - -2001-12-13 Werner Koch - - * pubkey-enc.c (get_session_key): Check that the public key - algorithm is indeed usable for en/decryption. This avoid a - strange error message from pubkey_decrypt if for some reasons a - bad algorithm indentifier is passed. - -2001-12-12 David Shaw - - * Fixed some types for portability. Noted by Stefan Bellon. - -2001-12-11 Werner Koch - - * hkp.c (hkp_export): Do not print possible control characters - from a keyserver response. - (parse_hkp_index): Made uid an unsigned char* because it is passed to - isspace(). - (hkp_search): Ditto for the char* vars. - - * g10.c (main): Print the IDEA warning also for -c and -se. - - * g10.c (get_temp_dir): Assert that we have dropped privs - - * encode.c (encode_crypt): Include the first key into the --pgp2 - check. - -2001-12-07 David Shaw - - * g10.c, options.h: New option --pgp2. This is identical to - "--rfc1991 --cipher-algo idea --compress-algo 1 --digest-algo md5 - --force_v3_sigs" with the addition of an warning to advise the - user not to use a pipe (which would break pgp2 compatibility). - - * encode.c (encode_crypt): warn if the user tries to encrypt to - any key that is not RSA and <= 2048 bits when the --pgp2 option is - used. - - * sign.c (sign_file, clearsign_file): When using --pgp2, make a v3 - sig, and warn if the signature is made with a non-v3 key. - -2001-12-05 David Shaw - - * sign.c (sign_file, clearsign_file, sign_symencrypt_file): Prompt - for sig expiration if --expert is set and --force-v3-sigs is not - set (v3 sigs cannot expire). - - * mainproc.c (check_sig_and_print): After checking a sig, print - expiration status. This causes a error return if the sig is - expired. - - * build-packet.c (build_sig_subpkt_from_sig): Include a critical - sig expiration subpacket if the sig is to expire. - - * keyedit.c (sign_uids): Do not sign an expired key unless - --expert is set, in which case prompt. Also, offer to expire a - signature when the key the user is signing expires. - - * keygen.c (ask_expire_interval): Add a value to determine whether - to prompt for a key or sig expiration and change all callers. - - * keyid.c: New functions: expirestr_from_sig and - colon_expirestr_from_sig. - - * keylist.c (list_keyblock_colon): Show sig expiration date in the - --with-colons listing. - - * sign.c (make_keysig_packet, write_signature_packets): Pass in an - optional timestamp for the signature packet, and change all - callers. - - * keyedit.c (sign_mk_attrib): Include a critical expiration - subpacket in the signature if an expiration date is given. - -2001-12-04 David Shaw - - * keyedit.c (sign_uids): If the user tries to sign a - locally-signed key, allow the cert to be promoted to a full - exportable signature. This essentially deletes the old - non-exportable sig, and replaces it with a new exportable one. - -2001-12-04 David Shaw - - * keyedit.c (keyedit_menu): Do not allow signing a revoked key - unless --expert is set, and ask even then. - - * keyedit.c (sign_uids): Do not allow signing a revoked UID unless - --expert is set, and ask even then. - - * g10.c, options.h : New option --expert - -2001-11-16 David Shaw - - * Allow the user to select no compression via "--compress-algo 0" - on the command line. - - * keyedit.c (show_prefs): Show compression preferences in the - long-form "showpref" style. - - * keygen.c (set_one_pref): Permit setting a no-compression ("Z0") - preference. - - * getkey.c (fixup_uidnode): Fix compression preference corruption - bug. - -2001-12-02 David Shaw - - * g10.c: Add advisory --for-your-eyes-only option as per section - 5.9 of 2440. - -2001-12-05 David Shaw - - * Force a V4 sig if the user has a notation or policy URL set. - -2001-12-04 David Shaw - - * g10.c: Add options --keyserver-options, --temp-directory, and - auto-key-retrieve (the opposite of no-auto-key-retrieve). - - * hkp.c (hkp_search): New function to handle searching a HKP - keyserver for a key - - * hkp.c (hkp_ask_import, hkp_export): Pretty large changes to make - them communicate via the generic functions in keyserver.c - - * keyserver.c: new file with generic keyserver routines for - getting keys from a keyserver, sending keys to a keyserver, and - searching for keys on a keyserver. Calls the internal HKP stuff - in hkp.c for HKP keyserver functions. Other calls are handled by - an external program which is spawned and written to and read from - via pipes. Platforms that don't have pipes use temp files. - -2001-11-20 David Shaw - - * options.h, g10.c: New options show-notation, no-show-notation, - default-check-level, no-default-check-level, show-policy-url, - no-show-policy-url. - - * packet.h, sign.c (make_keysig_packet), parse-packet.c - (parse_signature), free-packet.c (free_seckey_enc): Fill in - structures for notation, policy, sig class, exportability, etc. - - * keyedit.c, keylist.c (print_and_check_one_sig, - list_keyblock_print): Show flags in signature display for cert - details (class, local, notation, policy, revocable). If selected, - show the notation and policy url. - - * keyedit.c (sign_uids): Prompt for and use different key sig - classes. - - * helptext.c (helptexts): Add help text to explain different - key signature classes - -2001-11-26 David Shaw - - * trustdb.c (mark_usable_uid_certs): Fix segfault from bad - initialization and fix reversed key signature expiration check. - -2001-11-09 Werner Koch - - * export.c (do_export_stream): Put all given names into a search - description and change the loop so that all matching names are - returned. - -2001-11-08 Werner Koch - - * pubkey-enc.c (get_it): To reduce the number of questions on the - MLs print the the name of cipher algorithm 1 with the error message. - - * mainproc.c: Changed the way old rfc1991 encryption cipher is - selected. Based on a patch by W Lewis. - - * pkclist.c (do_edit_ownertrust): Allow to skip over keys, the non - working "show info" is now assigned to "i" - * trustdb.c (ask_ownertrust, validate_keys): Implement a real quit - here. Both are by David Shaw. - - * trustdb.c (validate_keys): Make sure next_exipire is initialized. - - * sign.c (make_keysig_packet): Use SHA-1 with v4 RSA keys. - - * g10.c, options.h : New option --[no-]froce-v4-certs. - * sign.c (make_keysig_packet): Create v4 sigs on v4 keys even with - a v3 key. Use that new option. By David Shaw - - * revoke.c (ask_revocation_reason): Allow to select "no reason". - By David Shaw. - - * keyid.c (fingerprint_from_sk): Calculation of an v3 fpr was - plain wrong - nearly the same code in fingerprint_from_pk is correct. - - * build-packet.c (do_secret_key): Added a few comments to the code. - -2001-11-07 Werner Koch - - * g10.c (main): Print a warning when -r is used w/o encryption. - Suggested by Pascal Scheffers. - -2001-10-23 Werner Koch - - * keyedit.c (keyedit_menu): Changed helptext for showpref - command. Suggested by Reinhard Wobst. - - * keyring.c (keyring_search): When marking the offtbl ready, take - into account that we may have more than one keyring. - -2001-10-22 Werner Koch - - * Makefile.am: Do not use OMIT_DEPENDENCIES - - * build-packet.c (build_sig_subpkt): Default is now to put all - types of subpackets into the hashed area and only list those which - should go into the unhashed area. - -2001-10-18 Werner Koch - - * keydb.c (keydb_add_resource): Rearranged the way we keep track - of the resource. There will now be an entry for each keyring here - and not in keyring.c itself. Store a token to allow creation of a - keyring handle. Changed all functions to utilize this new design. - (keydb_locate_writable): Make a real implementation. - * keyring.c (next_kr): Removed and changed all callers to set the - resource directly from the one given with the handle. - (keyring_is_writable): New. - (keyring_rebuild_cache): Add an arg to pass the token from keydb. - -2001-10-17 Werner Koch - - * keyring.c (keyring_search): Enabled word search mode but print a - warning that it is buggy. - -2001-10-11 Werner Koch - - * hkp.c (hkp_ask_import): No more need to set the port number for - the x-hkp scheme. - (hkp_export): Ditto. - -2001-10-06 Stefan Bellon - - * passphrase.c [__riscos__]: Disabled agent specific stuff. - * g10.c: New option --no-force-v3-sigs. - -2001-10-04 Werner Koch - - * export.c (do_export_stream): Do not push the compress filter - here because the context would run out of scope due to the - iobuf_close done by the caller. - (do_export): Do it here instead. - -2001-09-28 Werner Koch - - * keyedit.c (sign_uids): Always use the primary key to sign keys. - * getkey.c (finish_lookup): Hack to return only the primary key if - a certification key has been requested. - - * trustdb.c (cmp_kid_for_make_key_array): Renamed to - (validate_one_keyblock): this and changed arg for direct calling. - (make_key_array): Renamed to - (validate_one_keyblock): this and changed args for direct calling. - (mark_usable_uid_certs, validate_one_keyblock) - (validate_key_list): Add next_expire arg to keep track of - expiration times. - (validate_keys): Ditto for UTKs and write the stamp. - - * tdbio.c (migrate_from_v2): Check return code of tbdio_sync. - - * tdbdump.c (import_ownertrust): Do a tdbio_sync(). - - * keyring.c: Made the offtbl an global object. - -2001-09-27 Werner Koch - - * pkclist.c (do_edit_ownertrust): Allow settin of ultimate trust. - - * trustdb.c (mark_keyblock_seen): New. - (make_key_array): Use it to mark the subkeys too. - (validate_keys): Store validity for ultimatly trusted keys. - -2001-09-26 Werner Koch - - * pkclist.c (check_signatures_trust, do_we_trust): Removed the - invocation of add_ownertrust. Minor changes to the wording. - (add_ownertrust, add_ownertrust_cb): Removed. - - * trustdb.c (get_validity): Allow to lookup the validity using a - subkey. - - * trustdb.c (new_key_hash_table): Increased the table size to 1024 - and changed the masks accordingly. - (validate): Changed stats printing. - (mark_usable_uid_certs): New. - (cmp_kid_for_make_key_array): Does now check the signatures and - figures out a usable one. - -2001-09-25 Werner Koch - - * keyring.c (new_offset_item,release_offset_items) - (new_offset_hash_table, lookup_offset_hash_table) - (update_offset_hash_table, update_offset_hash_table_from_kb): New. - (keyring_search): Use a offset table to optimize search for - unknown keys. - (keyring_update_keyblock, keyring_insert_keyblock): Insert new - offsets. - * getkey.c (MAX_UNK_CACHE_ENTRIES): Removed the unknown keys - caching code. - - * g10.c, options.h, import.c: Removed the entire - allow-secret-key-import stuff because the validity is now - controlled by other means. - - * g10.c: New command --rebuild-keydb-caches. - * keydb.c (keydb_rebuild_caches): New. - * keyring.c (do_copy): Moved some code to - (create_tmp_file, rename_tmp_file, write_keyblock): new functions. - (keyring_rebuild_cache): New. - - * packet.h (PKT_ring_trust): Add sigcache field. - * parse-packet.c (parse_trust): Parse sigcache. - * keyring.c (do_copy): Always insert a sigcache packet. - (keyring_get_keyblock): Copy the sigcache packet to the signature. - * sig-check.c (cache_sig_result): Renamed from - cache_selfsig_result. Changed implementation to use the flag bits - and changed all callers. - (mdc_kludge_check): Removed this unused code. - (do_check): Do not set the sig flags here. - - * import.c (read_block): Make sure that ring_trust packets are - never imported. - * export.c (do_export_stream): and never export them. - - * trustdb.c (make_key_array): Skip revoked and expired keys. - -2001-09-24 Werner Koch - - * g10.c, options.h: New option --no-auto-check-trustdb. - - * keygen.c (do_generate_keypair): Set newly created keys to - ultimately trusted. - - * tdbio.h, tdbio.c: Removed all support for records DIR, KEY, UID, - PREF, SIG, SDIR and CACH. Changed migration function to work - direct on the file. - (tdbio_read_nextcheck): New. - (tdbio_write_nextcheck): New. - -2001-09-21 Werner Koch - - Revamped the entire key validation system. - * trustdb.c: Complete rewrite. No more validation on demand, - removed some functions, adjusted to all callers to use the new - and much simpler interface. Does not use the LID anymore. - * tdbio.c, tdbio.h: Add new record types trust and valid. Wrote a - migration function to convert to the new trustdb layout. - * getkey.c (classify_user_id2): Do not allow the use of the "#" - prefix. - * keydb.h: Removed the TDBIDX mode add a skipfnc to the - descriptor. - * keyring.c (keyring_search): Implemented skipfnc. - - * passphrase.c (agent_open): Add missing bracket. Include windows.h. - -2001-09-19 Werner Koch - - * keylist.c (print_fingerprint): Renamed from fingerprint, made - global available. Added new arg to control the print style. - * mainproc.c (print_fingerprint): Removed. - * pkclist.c (print_fpr, fpr_info): Removed and changed callers to - use print_fingerprint. - * keyedit.c (show_fingerprint): Ditto. - - * passphrase.c (writen, readn) - (agent_open, agent_close) - (agent_get_passphrase) - (passphrase_clear_cache): Support for W32. Contributed by Timo. - - * import.c (import_one): Release keydb handles at 2 more places. - - * keyring.c (keyring_release): Close the iobuf. - (keyring_get_keyblock): Init ret_kb to NULL and store error contidion. - - * import.c (import_new_stats_handle): New. - (import_release_stats_handle): New. - (import_print_stats): Renamed from static fnc print_stats. - (import_keys, import_keys_stream): Add an optional status handle - arg and changed all callers. - * hkp.c (hkp_ask_import): Add an stats_handle arg and changed all - callers. - - * mainproc.c (print_pkenc_list): Use print_utf8_string2(). - -2001-09-18 Werner Koch - - * g10.c: New command --refresh-keys. - * hkp.c (hkp_refresh_keys): New. Contributed by Timo Schulz. - - * parse-packet.c (parse): Stop on impossible packet lengths. - -2001-09-17 Werner Koch - - * mainproc.c (print_notation_data): Wrap notation data status lines - after 50 chars. - - * mainproc.c (proc_pubkey_enc): Make option try-all-secrets work. - By disastry@saiknes.lv. - -2001-09-14 Werner Koch - - * parse-packet.c (dump_sig_subpkt): List key server preferences - and show the revocable flag correctly. Contributed by David Shaw. - -2001-09-09 Werner Koch - - * keyedit.c (keyedit_menu): No need to define another p. - - * keylist.c (print_capabilities): s/used/use/ so that it - does not shadow a global. - * sign.c (sign_file): Renamed arg encrypt to encryptflag - * keygen.c: Replaced all "usage" by "use". - * misc.c (openpgp_pk_algo_usage): Ditto. - - * pubkey-enc.c (get_it): Renamed arg k to enc so that the later - defined k does not shadow it. - - * parse-packet.c (parse_gpg_control): No need to define another i. - - * getkey.c (get_pubkey_byfprint): Must use the enum values and not - the fprint_len. - * keyring.c (keyring_search): Removed a non-sense break. Both - bugs pointed out by Stefan. - -2001-09-07 Werner Koch - - * status.c, status.h: Added NO_RECP and ALREADY_SIGNED. - * pkclist.c (build_pk_list): Issue NO_RECP. - * keyedit.c (sign_uids): Added experimental ALREADY_SIGNED - - * hkp.c (hkp_import): Use log_error. Bug reported by Neal H - Walfield. - - * getkey.c (classify_user_id2): Change args to take the desc union - direct. It was a stupid idea to pass the individual fields of an - union to this function. Changed all callers. - (classify_user_id): Ditto and allow to pass NULL as the description. - -2001-09-06 Werner Koch - - * getkey.c (fixup_uidnode): Features flag is now a bit vector. - * keygen.c (add_feature_mdc): Ditto. - - Revamped the entire key I/O code to be prepared for other ways of - key storages and to get rid of the existing shit. GDBM support has - gone. - * keydb.c: New - * keyring.c, keyring.h: New. - * ringedit.c: Removed. Moved some stuff to keyring.c - * getkey.c: Changed everything related to the key retrieving - functions which are now using the keydb_ functions. - (prepare_search, word_match_chars, word_match) - (prepare_word_match, compare_name): Moved to keyring.c - (get_pubkey_byname): Removed ctx arg and add ret_kdbhd - arg. Changed all callers. - (key_byname): Use get_pubkey_end to release the context and take - new ret_kbdhd arg. Changed all callers. - (classify_user_id2): Fill the 16 byte fingerprint up with 4 null - bytes not with zero bytes of value 4, tsss. - * import.c (import_one): Updated to use the new keydb interface. - (import_secret_one): Ditto. - (import_revoke_cert): Ditto. - * delkey.c (do_delete_key): Ditto. - * keyedit.c (keyedit_menu): Ditto. - (get_keyblock_byname): Removed. - * revoke.c (gen_revoke): Ditto. - * export.c (do_export_stream): Ditto. - * trustdb.c (update_trustdb): Ditto. - * g10.c, gpgv.c (main): Renamed add_keyblock_resource to - keydb_add_resource. - * Makefile.am: Added and removed files. - - * keydb.h: Moved KBNODE typedef and MAX_FINGERPRINT_LEN to - * global.h: this new header. - -2001-09-03 Werner Koch - - * passphrase.c (agent_get_passphrase): Changed nread to size_t. - (passphrase_clear_cache): Ditto. - - * keyid.c (mk_datestr): Avoid trigraphs. - (fingerprint_from_pk): Cache the keyid in the pk. - - * options.h: Add opt.with_fingerprint so that we know whether the - corresponding options was used. - * g10.c (main): Set it here. - * pkclist.c (check_signatures_trust): Always print fingerprint - when this option is used. Mixed a minor memory leak. - - * status.c, status.h: New status INV_RECP. - * pkclist.c (build_pk_list): Issue this status. - -2001-08-31 Werner Koch - - * parse-packet.c (parse_key,parse_pubkeyenc) - (parse_signature): Return error on reading bad MPIs. - - * mainproc.c (check_sig_and_print): Always print the user ID even - if it is not bound by a signature. Use the primary UID in the - status messages and encode them in UTF-8 - * status.c (write_status_text_and_buffer): New. - -2001-08-30 Werner Koch - - * packet.h (sigsubpkttype_t): Add SIGSUBPKT_FEATURES. - (PKT_public_key, PKT_user_id): Add a flag for it. - * parse-packet.c, build-packet.c: Add support for them. - * getkey.c (fixup_uidnode, merge_selfsigs): Set the MDC flags. - * keygen.c (add_feature_mdc): New. - (keygen_upd_std_prefs): Always set the MDC feature. - * keyedit.c (show_prefs): List the MDC flag - * pkclist.c (select_mdc_from_pklist): New. - * encode.c (encode_crypt, encrypt_filter): Test whether MDC - should be used. - * cipher.c (write_header): Set MDC use depending on the above test. - Print more status info. - - * delkey.c (do_delete_key): Kludge to delete a secret key with no - public key available. - - * ringedit.c (find_secret_keyblock_direct): New. - * getkey.c (seckey_available): Simplified. - - * ringedit.c (cmp_seckey): Now compares the secret key against the - public key while ignoring all secret parts. - (keyring_search): Use a public key packet as arg. Allow to search - for subnkeys - (search): Likewise. Changed all callers. - (find_secret_keyblock_bypk): New. - (find_secret_keyblock_byname): First locate the pubkey and then - find the correponding secret key. - * parse-packet.c (parse): Renamed pkttype arg to onlykeypkts and - changed code accordingly. Changed all callers. - (search_packet): Removed pkttype arg. - * keyedit.c (keyedit_menu): First locate the public key and then - try to locate a secret key. - - * ringedit.c (locate_keyblock_by_fpr): Removed. - (locate_keyblock_by_keyid): Removed. - (find_keyblock_bysk): Removed. - - * sig-check.c (check_key_signature2): Print the keyid along with - the wrong sig class errors. - -2001-08-24 Werner Koch - - * sign.c (sign_file): Stripped the disabled comment packet code. - (sign_file, sign_symencrypt_file): Moved common code to .. - (write_onepass_sig_packets): .. this new function. - (sign_file, clearsign_file, sign_symencrypt_file): Moved common - code to - (write_signature_packets): this new function. - (write_signature_packets, make_keysig_packet) - (update_keysig_packet): Moved common code to - (hash_uid, hash_sigclass_to_magic): these new functions - (sign_file, sign_symencrypt_file): Moved common code to - (write_plaintext_packet): this new function. - -2001-08-21 Stefan Bellon - - * trustdb.c (query_trust_info): Changed trustlevel to signed int. - * g10.c [__riscos__]: Fixed handling of --use-agent --lock-multiple. - -2001-08-20 Werner Koch - - * encr-data.c (decrypt_data): Keep track on whether we already - printed information about the used algorithm. - * mainproc.c (proc_encrypted): Removed the non-working IDEA hack - and print a message about the assumed algorithm. - * passphrase.c (passphrase_to_dek): Use the same algorithm as above. - (proc_symkey_enc): Print the algorithm, so that the user knows it - before entering the passphrase. - (proc_pubkey_enc, proc_pubkey_enc): Zero the DEK out. - * encode.c (encode_crypt, encrypt_filter): Ditto. - - * g10.c: Allow for --sign --symmetric. - * sign.c (sign_and_symencrypt): New. - - Applied patches from Stefan Bellon to support - RISC OS. Nearly all of these patches are identified by the - __riscos__ macro. - * compress.c: Added a couple of casts. - * g10.c [__riscos__]: Some patches and new options foo-file similar - to all foo-fd options. - * gpgv.c, openfile.c, ringedit.c, tdbio.c: Minor fixes. Mainly - replaced hardcoded path separators with EXTSEP_S like macros. - * passprase.c [__riscos__]: Disabled agent stuff - * trustdb.c (check_trust): Changed r_trustlevel to signed int to - avoid mismatch problems in pkclist.c - * pkclist.c (add_ownertrust): Ditto. - * plaintext.c (handle_plaintext) [__riscos__]: Print a note when - file can't be created. - * options.h [__riscos__]: Use an extern unless included from the - main module. - * signal.c (got_fatal_signal) [__riscos__]: Close all files. - -2001-08-14 Werner Koch - - * keygen.c (ask_algo): New arg r_usage. Allow for RSA keys. - (gen_rsa): Enabled the code. - (do_create): Enabled RSA branch. - (parse_parameter_usage): New. - (proc_parameter_file): Handle usage parameter. - (read_parameter_file): Ditto. - (generate_keypair): Ditto. - (generate_subkeypair): Ditto. - (do_generate_keypair): Ditto. - (do_add_key_flags): New. - (keygen_add_std_prefs): Use the new function. - (keygen_add_key_flags_and_expire): New. - (write_selfsig, write_keybinding): Handle new usage arg. - * build-packet.c (build_sig_subpkt): Make sure that key flags go - into the hashed area. - - * keygen.c (write_uid): Initialize the reference cunter. - - * keyedit.c (keyedit_menu): No more need to update the trustdb for - preferences. Added calls to merge keblock. - - * kbnode.c (dump_kbnode): Print some more flags. - -2001-08-10 Werner Koch - - Revamped the preference handling. - - * packet.h (prefitem_t, preftype_t): New. - (PKT_public_key): Added a uid field. - (PKT_user_id): Added field to store preferences and a reference - counter. - * parse-packet.c (parse_user_id,parse_photo_id): Initialize them - * free-packet.c (free_user_id): Free them. - (copy_user_id): Removed. - (scopy_user_id): New. - (cmp_user_ids): Optimized for identical pointers. - (release_public_key_parts): Release the uid. - (copy_public_key_with_new_namehash): Removed. - (copy_prefs): New. - * keyedit.c (menu_adduid): Use the new shallow copy user id. - (show_prefs): Adjusted implementation. - (keyedit_menu): No more need to update the trustdb after changing - preferences. - * getkey.c (fixup_uidnode): Store preferences. - (find_by_name): Return a user id packet and remove namehash stuff. - (lookup): Removed the unused namehash stuff. - (finish_lookup): Added foundu arg. - (pk_from_block): Removed the namehash arg and changed all callers. - (merge_selfsigs): Copy prefs to all keys. - * trustdb.c (get_pref_data): Removed. - (is_algo_in_prefs): Removed. - (make_pref_record): Deleted and removed all class. - * pkclist.c (select_algo_from_prefs): Adjusted for the new - preference implementation. - * pubkey-enc.c (is_algo_in_prefs): New. - (get_it): Use that new function. - -2001-08-09 Werner Koch - - * build-packet.c (build_sig_subpkt): Fixed calculation of - newarea->size. - - * g10.c (main): New option "--preference-list" - * keyedit.c (keyedit_menu): New commands "setpref" and "updpref". - (menu_set_preferences): New. - * keygen.c (keygen_set_std_prefs): New. - (set_one_pref): New. - (check_zip_algo): New. - (keygen_get_std_prefs): New. - (keygen_upd_std_prefs): New - (keygen_add_std_prefs): Move the pref setting code into the above fnc. - * build-packet.c (build_sig_subpkt): Updated the list of allowed - to update subpackets. - -2001-08-08 Werner Koch - - * packet.h (subpktarea_t): New. - (PKT_signature): Use that type for hashed_data and unhashed_data and - removed the _data prefix from those fields. Changed all users. - * parse-packet.c (parse_signature): Changed allocation for that. - (parse_sig_subpkt): Changed declaration - (enum_sig_subpkt): Ditto and changed implementation accordingly. - * free-packet.c (cp_subpktarea): Renamed from cp_data_block and - adjusted implementation. Changed caller. - * sig-check.c (mdc_kludge_check): Adjusted the hashing. - (do_check): Ditto. - * sign.c (sign_file, clearsign_file, make_keysig_packet, - update_keysig_packet): Ditto. - * build-packet.c (build_sig_subpkt): Partial rewrite. - (find_subpkt): Adjusted and made static. - (delete_sig_subpkt): Adjusted. - (do_signature): Ditto. - - * keygen.c (ask_keysize): Do not print the notes about suggested - key sizes if just a DSA key is generated. - - * trustdb.c (add_ultimate_key): s/log_error/log_info/ for - duplicated inserted trusted keys. - -2001-08-07 Werner Koch - - * sign.c (sleep): Redefine for W32. - - * g10.c, options.h: Set new flag opt.no_homedir_creation when - --no-options is given. - * openfile.c (try_make_homedir): Don't create the homedir in that case. - -2001-08-03 Werner Koch - - * armor.c (armor_filter): Removed the default comment string - because it could get us in trouble due to translations using non - ascii characters. - -2001-08-01 Werner Koch - - * keylist.c (list_keyblock_print): Do not list revoked UIDs unless - in verbose mode and we do no signature listing. - - * getkey.c (finish_lookup): Skip subkeys which are not yet valid. - * g10.c, options.h: New option --ignore-valid-from. - - * sign.c (make_keysig_packet): Added new sigversion argument to - allow the caller to force generation of required signature - version. Changed all callers. Suggested by Thomas Roessler. - - * keyedit.c (sign_uids): Force v4 signature generation for local - sigs. Removed the check for local signature and pre-v4 keys. - -2001-07-27 Werner Koch - - * keyedit.c (sign_uids): Check that we are not trying to to a - lsign with a pre-v4 key. Bug noticed by Thomas Roessler. - -2001-07-26 Werner Koch - - * parse-packet.c (parse_photo_id): Reset all variables. - * getkey.c (merge_selfsigs_main): Removed checks on PHOTO_ID - because this is handled identically to a user ID. - -2001-07-06 Werner Koch - - * cipher.c (write_header): Don't use MDC with --rfc1991. Suggested - by disastry@saiknes.lv. - -2001-07-05 Werner Koch - - * g10.c, options.h: New option --preserve-permissions. - * ringedit.c (add_keyblock_resource): Use it here - (keyring_copy): and here. - - * trustdb.c (verify_own_keys): Be more silent on --quiet. - Suggested by Thomas Roessler. - * sig-check.c (check_key_signature2): Ditto. - * mainproc.c (proc_encrypted, proc_tree): Ditto - * getkey.c (lookup): Ditto. - -2001-07-04 Werner Koch - - * ringedit.c (add_keyblock_resource): Restore filename in case of error. - -2001-06-25 Werner Koch - - * kbnode.c (dump_kbnode): Print the signature timestamp. - - * keyedit.c (keyedit_menu): New menu point "primary". - (change_primary_uid_cb): New. - (menu_set_primary_uid): New. - * sign.c (update_keysig_packet): New. - * build-packet.c (build_sig_subpkt): Put the primary UID flag into - the hashed area. Allow update of some more packets. - -2001-06-15 Werner Koch - - * getkey.c (merge_selfsigs): Exit gracefully when a secret key is - encountered. May happen if a secret key is in public keyring. - Reported by Francesco Potorti. - -2001-06-12 Werner Koch - - * getkey.c (compare_name): Use ascii_memistr(), ascii_memcasecmp() - * keyedit.c (keyedit_menu): Use ascii_strcasecmp(). - * armor.c (radix64_read): Use ascii_toupper(). - * ringedit.c (do_bm_search): Ditto. - * keygen.c (read_parameter_file): Ditto. - * openfile.c (CMP_FILENAME): Ditto. - * g10.c (i18n_init): We can now use just LC_ALL. - -2001-05-29 Werner Koch - - * keygen.c (generate_subkeypair): Print a warning if a subkey is - created on a v3 key. Suggested by Brian M. Carlson. - -2001-05-27 Werner Koch - - * keyid.c (get_lsign_letter): New. - * keylist.c (list_keyblock_colon): Use it here. - * mainproc.c (list_node): and here. - - * getkey.c, packet.h, free-packet.c: Removed that useless key - created field; I dunno why I introducded this at all - the - creation time is always bound to the key packet and subject to - fingerprint calculation etc. - - * getkey.c (fixup_uidnode): Add keycreated arg and use this - instead of the signature timestamp to calculate the - help_key_expire. Bug reported by David R. Bergstein. - (merge_selfsigs_main): Correct key expiration time calculation. - (merge_selfsigs_subkey): Ditto. - -2001-05-25 Werner Koch - - * revoke.c (gen_revoke): Add a cast to a tty_printf arg. - * delkey.c (do_delete_key): Ditto. - * keyedit.c (print_and_check_one_sig): Ditto. - (ask_revoke_sig): Ditto. - (menu_revsig): Ditto. - (check_all_keysigs): Removed unused arg. - -2001-05-23 Werner Koch - - * g10.c (opts): Typo fix by Robert C. Ames. - -2001-05-06 Werner Koch - - * revoke.c: Small typo fix - -2001-05-04 Werner Koch - - * passphrase.c (passphrase_clear_cache): Shortcut if agent usage - is not enabled. - -2001-05-01 Werner Koch - - * passphrase.c (writen): Replaced ssize_t by int. Thanks to - to Robert Joop for reporting that SunOS 4.1.4 does not have it. - -2001-04-28 Werner Koch - - * getkey.c (merge_public_with_secret): pkttype was not set to subkey. - -2001-04-27 Werner Koch - - * skclist.c (build_sk_list): Changed one log_debug to log_info. - -2001-04-25 Werner Koch - - * keyedit.c (show_prefs): Add a verbose mode. - (show_key_with_all_names): Pass verbose flag for special value of - with_pref. - (keyedit_menu): New command "showpref" - (show_key_with_all_names): Mark revoked uids and the primary key. - -2001-04-24 Werner Koch - - * getkey.c (get_primary_uid): Return a different string in case of - error and made it translatable. - - * build-packet.c (do_secret_key): Ugly, we wrote a zero - instead of the computed ndays. Thanks to M Taylor for complaining - about a secret key import problem. - -2001-04-23 Werner Koch - - * hkp.c (hkp_ask_import): Allow to specify a port number for the - keyserver. Add a kudge to set the no_shutdown flag. - (hkp_export): Ditto. - * options.skel: Document the changes - -2001-04-20 Werner Koch - - * options.skel: Add some more comments. - -2001-04-19 Werner Koch - - * keyid.c (mk_datestr): New. Handles negative times. We must do - this because Windoze segvs on negative times passed to gmtime(). - Changed all datestr_from function to use this one. - - * keyid.c, keyid.h (colon_strtime): New. To implement the - fixed-list-mode. - (colon_datestr_from_pk): New. - (colon_datestr_from_sk): New. - (colon_datestr_from_sig): New. - * keylist.c (list_keyblock_colon): Use these functions here. - * mainproc.c (list_node): Ditto. - -2001-04-18 Werner Koch - - * openfile.c (open_sigfile): Fixed the handling of ".sign". - * mainproc.c (proc_tree): Use iobuf_get_real_fname. - Both are by Vincent Broman. - -2001-04-14 Werner Koch - - * getkey.c (fixup_uidnode): Removed check for !sig which is - pointless here. Thanks to Jan Niehusmann. - -2001-04-10 Werner Koch - - * sig-check.c (check_key_signature2): Use log_info instead of - log_error so that messed up keys do not let gpg return an error. - Suggested by Christian Kurz. - - * getkey.c (merge_selfsigs_main): Do a fixup_uidnode only if we - have both, uid and sig. Thanks to M Taylor. - -2001-04-05 Werner Koch - - * armor.c (unarmor_pump_new,unarmor_pump_release): New. - (unarmor_pump): New. - * pipemode.c (pipemode_filter): Use the unarmor_pump to handle - armored or non-armored detached signatures. We can't use the - regular armor_filter becuase this does only chack for armored - signatures the very first time. In pipemode we may have a mix of - armored and binary detached signatures. - * mainproc.c (proc_tree): Do not print the "old style" notice when - this is a pipemode processes detached signature. - (proc_plaintext): Special handling of pipemode detached sigs. - - * packet.h (CTRLPKT_PLAINTEXT_MARK): New. - * parse-packet.c (create_gpg_control): New. - * kbnode.c (dump_kbnode): Support it here. - * mainproc.c (check_sig_and_print): Fixed the check for bad - sequences of multiple signatures. - (proc_plaintext): Add the marker packet. - (proc_tree): We can now check multiple detached signatures. - -2001-04-02 Werner Koch - - The length of encrypted packets for blocksizes != 8 was not - correct encoded. I think this is a minor problem, because we - usually use partial length packets. Kudos to Kahil D. Jallad for - pointing this out. - * packet.h: Add extralen to PKT_encrypted. - * cipher.c (write_header): Set extralen. - * build-packet.c (do_encrypted): Use extralen instead of const 10. - (do_encrypted_mdc): Ditto. - * parse-packet.c (parse_encrypted): Set extralen to 0 because we - don't know it here. - -2001-03-30 Werner Koch - - * getkey.c (premerge_public_with_secret): Changed wording an add - the keyID to the info message. - -2001-03-29 Werner Koch - - * getkey.c (premerge_public_with_secret): Use log_info instead of - log_error when no secret key was found for a public one. - Fix the usage if the secret parts of a key are not available. - - * openfile.c (ask_outfile_name): Trim spaces. - (open_outfile): Allow to enter an alternate filename. Thanks to - Stefan Bellon. - * plaintext.c (handle_plaintext): Ditto. - -2001-03-28 Werner Koch - - * mainproc.c (do_check_sig): Allow direct key and subkey - revocation signature. - * sig-check.c (check_key_signature2): Check direct key signatures. - Print the signature class along with an error. - -2001-03-27 Werner Koch - - * packet.h: Add a missing typedef to an enum. Thanks to Stefan Bellon. - - * g10.c: New option --no-sig-create-check. - * sign.c (do_sign): Implement it here. - * g10.c: New option --no-sig-cache. - * sig-check.c (check_key_signature2): Implement it here. - (cache_selfsig_result): and here. - - * keylist.c (list_keyblock): Removed debugging stuff. - - * getkey.c (cache_public_key): Made global. - * keygen.c (write_selfsig, write_keybinding): Cache the new key. - - * getkey.c (key_byname): Add new arg secmode and changed all - callers to request explicitly the mode. Deriving this information - from the other supplied parameters does not work if neither pk nor - sk are supplied. - -2001-03-25 Werner Koch - - * packet.h (ctrlpkttype_t): New. - * mainproc.c (add_gpg_control,proc_plaintext,proc_tree): Use the - new enum values. - * pipemode.c (make_control): Ditto. - * armor.c (armor_filter): Ditto. - -2001-03-24 Werner Koch - - * sign.c (do_sign): Verify the signature right after creation. - -2001-03-23 Werner Koch - - * status.c, status.h (STATUS_UNEXPECTED): New. - * mainproc.c (do_proc_packets): And emit it here. - -2001-03-21 Werner Koch - - * status.c: Add sys/types.h so that it runs on Ultrix. Reported - by Georg Schwarz.x - - * build-packet.c (build_sig_subpkt): Fixed generaton of packet - length header in case where 2 bytes headers are needed. Thanks to - Piotr Krukowiecki. - -2001-03-19 Werner Koch - - * g10.c (main): the default keyring is no always used unless - --no-default-keyring is given. - - * ringedit.c (add_keyblock_resource): invalidate cache after file - creation. - -2001-03-15 Werner Koch - - * keygen.c (ask_algo): Changed the warning of the ElGamal S+E Algo. - - * keylist.c (print_capabilities): New. - (list_keyblock_colon): and use it here. - -2001-03-13 Werner Koch - - * main.c, options.h: New option --fixed_list_mode. - * keylist.c (list_keyblock_colon): use it here. - - * getkey.c (merge_keys_and_selfsig): Divert merging of public keys - to the function used in key selection.. - * keylist.c (is_uid_valid): Removed. - (list_keyblock): Splitted into .. - (list_keyblock_print, list_keyblock_colon): .. these. - functions. Changed them to use the flags set in the key lookup code. - (reorder_keyblock): New, so that primary user IDs are listed first. - - * ringedit.c (keyring_copy): flush the new iobuf chaces before - rename or remove operations. This is mainly needed for W32. - - * hkp.c [HAVE_DOSISH_SYSTEM]: Removed the disabled code because we - have now W32 socket support in ../util/http.c - - * skclist.c (key_present_in_sk_list): New. - (is_duplicated_entry): New. - (build_sk_list): Check for duplicates and do that before unlocking. - -2001-03-12 Werner Koch - - * armor.c (parse_header_line): Removed double empty line check. - (parse_header_line): Replaced trim_trailing_ws with a counting - function so that we can adjust for the next read. - - * options.skel: Fixed 3 typos. By Thomas Klausner. Replaced the - keyserver example by a better working server. - - * parse-packet.c (parse_symkeyenc): Return Invalid_Packet on error. - (parse_pubkeyenc): Ditto. - (parse_onepass_sig): Ditto. - (parse_plaintext): Ditto. - (parse_encrypted): Ditto. - (parse_signature): Return error at other places too. - (parse_key): Ditto. - * g10.c (main): Set opt.list_packets to another value when invoked - with the --list-packets command. - * mainproc.c (do_proc_packets): Don's stop processing when running - under --list-packets command. - - * signal.c (do_sigaction): Removed. - (init_one_signal): New to replace the above. Needed to support - systems without sigactions. Suggested by Dave Dykstra. - (got_fatal_signal,init_signals): Use the above here. - (do_block): Use sigset() if sigprocmask() is not available. - - * armor.c (parse_hash_header): Test on TIGER192, which is the - correct value as per rfc2440. By Edwin Woudt. - -2001-03-08 Werner Koch - - * misc.c: Include time.h. By James Troup. - - * getkey.c: Re-enabled the unknown user Id and PK caches and - increased their sizes. - - * getkey.c (merge_selfsigs_main): Set expire date and continue - processing even if we found a revoked key. - (merge_selfsigs_subkeys): Ditto. - - * packet.h: Add an is_revoked flag to the user_id packet. - * getkey.c (fixup_uidnode): Set that flag here. - (merge_selfsigs_main): Fix so that the latest signature is used to - find the self-signature for an UID. - * parse-packet.c (parse_user_id): Zero out all fields. - * mainproc.c (check_sig_and_print): Print the primary user ID - according the the node flag and then all other non-revoked user IDs. - (is_uid_revoked): Removed; it is now handled by the key selection code. - - Changed the year list of all copyright notices. - -2001-03-07 Werner Koch - - * getkey.c (finish_lookup): Print an info message only in verbose mode. - -2001-03-05 Werner Koch - - * packet.h: Replaced sigsubpkt_t value 101 by PRIV_VERIFY_CACHE. - We have never used the old value, so we can do this without any harm. - * parse-packet.c (dump_sig_subpkt): Ditto. - (parse_one_sig_subpkt): Parse that new sub packet. - * build-packet.c (build_sig_subpkt): Removed the old one from the - hashed area. - (delete_sig_subpkt): New. - (build_sig_subpkt): Allow an update of that new subpkt. - * sig-check.c (check_key_signature2): Add verification caching - (cache_selfsig_result): New. - * export.c (do_export_stream): Delete that sig subpkt before exporting. - * import.c (remove_bad_stuff): New. - (import): Apply that function to all imported data - -2001-03-03 Werner Koch - - * getkey.c: Introduced a new lookup context flag "exact" and used - it in all place where we once used primary. - (classify_user_id2): Replaced the old function and add an extra - argument to return whether an exact keyID has been requested. - (key_byname): Removed the unused ctx.primary flag - (get_seckey_byname2): Ditto. - (finish_lookup): Changed debugging output. - -2001-03-02 Werner Koch - - * keylist.c (list_one): Remove the merge key calls. - -2001-03-01 Werner Koch - - * getkey.c (finish_lookup): Don't use it if we no specific usage - has been requested. - (merge_selfsigs_main): fix UID only if we have an signature. - (lookup): Return UNU_PUBKEY etc. instead of NO_PUBKEY if we found - a key but the requested usage does not allow this key. - * import.c (import_one): Take UNU_PUBKEY into account. - * mainproc.c (list_node): Ditto. - * keylist.c (list_keyblock): Ditto. - * keyedit.c (print_and_check_one_sig): Ditto. - -2001-02-09 Werner Koch - - * delkey.c (delete_key): Removed that silly assert which rendered - the whole new stuff meaningless. - -2001-02-08 Werner Koch - - * getkey.c (key_byname): It can happen that we have both, sk and pk - NULL, fix for that. - - * parse-packet.c (parse_one_sig_subpkt): Add support for - primary_uid and key_flags. - (can_handle_critical): Ditto - - * parse-packet.c (parse_encrypted): Fixed listing of pktlen for - MDC packets. - - * getkey.c: Backported the version of this file from gpg 1.1. this - involved some changes in other files too. - * parse-packet.c (parse_key): Clear req_usage. - * skclist.c (build_sk_list): Use req_usage to pass the usage - information to the lookup function. - * pkclist.c (build_pk_list): Ditto. - * free-packet.c (copy_public_parts_to_secret_key): New. - * keydb.h: Add IS_* macros to check the sig_class. - * misc.c (openpgp_cipher_test_algo): New. - (openpgp_pk_test_algo): New. - (openpgp_pk_algo_usage): New. - (openpgp_md_test_algo): New. - * packet.h: Add a few fields to PKT_{public,secret}_key and - PKT_user_id. - * seckey-cert.c (do_check): Use the new main_keyid field. - -2001-02-04 Werner Koch - - * encr-data.c (decrypt_data): Catch error when we had problems to - parse the encrypted packet. By Timo. - -2001-01-29 Werner Koch - - * g10.c (main): --batch does now set nogreeting. - - * delkey.c (do_delete_key): Fixed delete-both functionality. - -2001-01-22 Werner Koch - - * g10.c: New command --delete-secret-and-public-key. - * delkey.c (delete_key): Add new arg allow_both. - (do_delete_key): Move most stuff from above to this new function. - -2001-01-12 Werner Koch - - * passphrase.c (passphrase_to_dek): Use MD5 when IDEA is installed - and we have no S2K. - * mainproc.c (proc_encrypted): Likewise - -2001-01-11 Werner Koch - - * sig-check.c (do_check): Print the signature key expire message - only in verbose mode and added the keyID. - -2001-01-09 Werner Koch - - * status.c, status.h: New status USERID_HINT. - (write_status_text): Replace LF and CR int text by C-escape sequence. - - * passphrase.c (passphrase_to_dek): Fixed the NEED_PASSPHRASE - output. It does now always print 2 keyIDs. Emit the new - USERID_HINT. - -2001-01-08 Werner Koch - - * g10.c, options.h: New option --no-expensive-trust-checks. - * keylist.c (list_keyblock): Act on this option. - -2001-01-04 Werner Koch - - * g10.c (main): Set homedir only in the pre-parsing phase and - replace backslashes in the W32 version. - -2001-01-03 Werner Koch - - * status.c, status.h : New status KEY_CREATED - * keygen.c (do_generate_keypair,generate_subkeypair): Emit it. - -2000-12-28 Werner Koch - - * signal.c (got_fatal_signal): Remove lockfiles here because the - atexit stuff does not work due to the use of raise. Suggested by - Peter Fales. - * gpgv.c (remove_lockfiles): New stub. - -2000-12-19 Werner Koch - - * status.c, status.h (cpr_get_no_help): New. - * keyedit.c (keyedit_menu): Use it here because we have our own - help list here. - -2000-12-18 Werner Koch - - * mainproc.c (print_failed_pkenc): Don't print the sometimes - confusing message about unavailabe secret key. Renamed ... - (print_pkenc_list): ... to this and introduced failed arg. - (proc_encrypted): Print the failed encryption keys and then - the one to be used. - (proc_pubkey_enc): Store also the key we are going to use. - - * mainproc.c (check_sig_and_print): Don't list revoked user IDs. - (is_uid_revoked): New. - -2000-12-08 Werner Koch - - * pipemode.c: Made the command work. Currently only for - non-armored detached signatures. - * mainproc.c (release_list): Reset the new pipemode vars. - (add_gpg_control): Handle the control packets for pipemode - * status.c, status.h: New stati {BEGIN,END}_STREAM. - -2000-12-07 Werner Koch - - * g10.c: New option --allow-secret-key-import. - * import.c (import_keys,import_keys_stream): Honor this option. - (import): New arg allow_secret and pass that arg down to ... - (import_secret_one): to this and print a warning if secret key - importing is not allowed. - -2000-12-05 Werner Koch - - * cipher.c (cipher_filter): Moved the end_encryption status ... - * encode.c (encode_simple,encode_crypt): to here - * sign.c (sign_file): and here. - - * status.c (mywrite): Removed. - (get_status_string): Removed the LFs from the strings. - (set_status_fd,is_status_enabed,write_status_text, - write_status_buffer): Replaced all mywrite by stdio calls and use - fdopen to create a strem. This is needed to make things smoother - in the W32 version. - -2000-12-04 Werner Koch - - * import.c (merge_blocks): Increment n_sigs for revocations. - -2000-11-30 Werner Koch - - * g10.c (main): Use iobuf_translate_file_handle for all options - with filehandles as arguments. This is function does some magic - for the W32 API. - - * verify.c (verify_signatures): Add a comment rant about the - detached signature problem. - * mainproc.c (proc_tree): Issue an error if a detached signature - is assumed but a standard one was found. - * plaintext.c (hash_datafiles): Don't fall back to read signature - from stdin. - * openfile.c (open_sigfile): Print verbose message only if the - file could be accessed. - -2000-11-24 Werner Koch - - * passphrase.c [HAVE_DOSISH_SYSTEM]: Disabled all the agent stuff. - -2000-11-16 Werner Koch - - * g10.c: New option --use-agent - * passphrase.c (agent_open,agent_close): New. - (agent_get_passphrase,agent_clear_passphrase): New. - (passphrase_clear_cache): New. - (passphrase_to_dek): Use the agent here. - * seckey-cert.c (do_check): Clear cached passphrases. - -2000-11-15 Werner Koch - - * status.c (write_status_text): Moved the big switch to ... - (get_status_string): ... new function. - (write_status_buffer): New. - - * status.c (mywrite): New and replaced all write() by this. - - * status.c, status.h: Add 3 status lcodes for notaions and policy. - * mainproc.c (print_notation_data): Do status output of notations. - -2000-11-13 Werner Koch - - * sign.c (clearsign_file): Use LF macro to print linefeed. - -2000-11-11 Paul Eggert - - Clean up the places in the code that incorrectly use "long" or - "unsigned long" for file offsets. The correct type to use is - "off_t". The difference is important on large-file hosts, - where "off_t" is longer than "long". - - * keydb.h (struct keyblock_pos_struct.offset): - Use off_t, not ulong, for file offsets. - * packet.h (dbg_search_packet, dbg_copy_some_packets, - search_packet, copy_some_packets): Likewise. - * parse-packet.c (parse, dbg_search_packet, search_packet, - dbg_copy_some_packets, copy_some_packets): Likewise. - * ringedit.c (keyring_search): Likewise. - - * parse-packet.c (parse): Do not use %lu to report file - offsets in error diagnostics; it's not portable. - * ringedit.c (keyring_search): Likewise. - -2000-11-09 Werner Koch - - * g10.c (main): New option --enable-special-filenames. - -2000-11-07 Werner Koch - - * g10.c (main): New command --pipemode. - * pipemode.c: New. - -2000-10-23 Werner Koch - - * armor.c (armor_filter): Changed output of hdrlines, so that a CR - is emitted for DOS systems. - - * keygen.c (read_parameter_file): Add a cast for isspace(). - - * status.c (myread): Use SIGINT instead of SIGHUP for DOS. - -2000-10-19 Werner Koch - - * g10.c: New option --ignore-crc-error - * armor.c (invalid_crc): New. - (radix64_read): Act on new option. - - * openfile.c (try_make_homedir): Klaus Singvogel fixed a stupid - error introduced on Sep 6th. - -2000-10-18 Werner Koch - - * misc.c (print_cipher_algo_note): Don't print the note for AES. - Changed wording. - -2000-10-16 Werner Koch - - * mainproc.c (do_proc_packets): Hack to fix the problem that - signatures are not detected when there is a MDC packet but no - compression packet. - - * g10.c (print_hashline): New. - (print_mds): Use above func with --with-colons. - - * mainproc.c (check_sig_and_print): Detect multiple signatures - and don't verify them. - -2000-10-14 Werner Koch - - * mainproc.c (add_onepass_sig): There is an easier solution to the - error fixed yesterday; just check that we only have onepass - packets. However, the other solution provides an cleaner - interface and opens the path to get access to other information - from the armore headers. - (release_list): Reset some more variables. - -2000-10-13 Werner Koch - - * mainproc.c (add_gpg_control): New. - (do_proc_packets): use it. - (proc_plaintext): Changed logic to detect clearsigns. - (proc_tree): Check the cleartext sig with some new code. - - * packet.h: New packet PKT_GPG_CONTROL. - * parse-packet.c (parse_gpg_control): New. - * misc.c (get_session_marker): New. - * armor.c (armor_filter): Replaced the faked 1-pass packet by the - new control packet. - - * keyedit.c (keyedit_menu): Allow batchmode with a command_fd. - * status.c (my_read): New. - (do_get_from_fd): use it. - -2000-10-12 Werner Koch - - * keygen.c (keygen_add_std_prefs): Add Rijndael to the prefs. - -2000-10-07 Werner Koch - - * gpgv.c: Add more stubs for ununsed code to make the binary smaller. - -Wed Oct 4 15:50:18 CEST 2000 Werner Koch - - * sign.c (hash_for): New arg to take packet version in account, changed - call callers. - - * gpgv.c: New. - * Makefile.am: Rearranged source files so that gpgv can be build with - at least files as possible. - -Mon Sep 18 12:13:52 CEST 2000 Werner Koch - - * hkp.c (not_implemented): Print a notice for W32 - -Fri Sep 15 18:40:36 CEST 2000 Werner Koch - - * keygen.c (keygen_add_std_prefs): Changed order of preferences to - twofish, cast5, blowfish. - - * pkclist.c (algo_available): Removed hack to disable Twofish. - -Thu Sep 14 17:45:11 CEST 2000 Werner Koch - - * parse-packet.c (dump_sig_subpkt): Dump key flags. Print special - warning in case of faked ARRs. - - * getkey.c (finsih_lookup): Hack so that for v4 RSA keys the subkey - is used for encryption. - -Thu Sep 14 14:20:38 CEST 2000 Werner Koch - - * g10.c (main): Default S2K algorithms are now SHA1 and CAST5 - this - should solve a lot of compatibility problems with other OpenPGP - apps because those algorithms are SHOULD and not optional. The old - way to force it was by using the --openpgp option whith the drawback - that this would disable a couple of workarounds for PGP. - - * g10.c (main): Don't set --quite along with --no-tty. By Frank Tobin. - - * misc.c (disable_core_dump): Don't display a warning here but a return - a status value and ... - * g10.c (main): ...print warnining here. Suggested by Sam Roberts. - -Wed Sep 13 18:12:34 CEST 2000 Werner Koch - - * keyedit.c (keyedit_menu): Allow to use "debug" on the secret key. - - * ringedit.c (cmp_seckey): Fix for v4 RSA keys. - * seckey-cert.c (do_check): Workaround for PGP 7 bug. - -Wed Sep 6 17:55:47 CEST 2000 Werner Koch - - * misc.c (print_pubkey_algo_note): Do not print the RSA notice. - * sig-check.c (do_signature_check): Do not emit the RSA status message. - * pubkey-enc.c (get_session_key): Ditto. - - * encode.c (encode_simple, encode_crypt): Fix for large files. - * sign.c (sign_file): Ditto. - -Wed Sep 6 14:59:09 CEST 2000 Werner Koch - - * passphrase.c (hash_passphrase): Removed funny assert. Reported by - David Mathog. - - * openfile.c (try_make_homedir): Changes for non-Posix systems. - * g10.c (main): Take the default homedir from macro. - - * g10.c: The --trusted-key option is back. - * trustdb.c (verify_own_key): Handle this option. - (add_ultimate_key): Moved stuff from verify_own_key to this new func. - (register_trusted_key): New. - -Fri Aug 25 16:05:38 CEST 2000 Werner Koch - - * parse-packet.c (dump_sig_subpkt): Print info about the ARR. - - * openfile.c (overwrite_filep): Always return okay if the file is - called /dev/null. - (make_outfile_name): Add ".sign" to the list of know extensions. - (open_sigfile): Ditto. - -Wed Aug 23 19:52:51 CEST 2000 Werner Koch - - * g10.c: New option --allow-freeform-uid. By Jeroen C. van Gelderen. - * keygen.c (ask_user_id): Implemented here. - -Fri Aug 4 14:23:05 CEST 2000 Werner Koch - - * status.c (do_get_from_fd): Ooops, we used fd instead of opt.command_fd. - Thanks to Michael Tokarev. - -Tue Aug 1 20:06:23 CEST 2000 Werner Koch - - * g10.c: New opttion --try-all-secrets on suggestion from Matthias Urlichs. - * pubkey-enc.c (get_session_key): Quite easy to implement here. - -Thu Jul 27 17:33:04 CEST 2000 Werner Koch - - * g10.c: New option --merge-only. Suggested by Brendan O'Dea. - * import.c (import_one): Implemented it here - (import_secret_one): Ditto. - (print_stats): and give some stats. - -Thu Jul 27 12:01:00 CEST 2000 Werner Koch - - * g10.c: New options --show-session-key and --override-session-key - * pubkey-enc.c (hextobyte): New. - (get_override_session_key): New. - * mainproc.c (proc_pubkey_enc): Add session-key stuff. - * status.h, status.c (STATUS_SESSION_KEY): New. - -Thu Jul 27 10:02:38 CEST 2000 Werner Koch - - * g10.c (main): Use setmode(O_BINARY) for MSDOS while generating random bytes - (print_mds): Likewise for stdin. - * plaintext.c (handle_plaintext): Likewise for stdout. - -Mon Jul 24 10:30:17 CEST 2000 Werner Koch - - * keyedit.c (menu_expire): expire date for primary key can be set again. - -Wed Jul 19 11:26:43 CEST 2000 Werner Koch - - * keylist.c (is_uid_valid): New. - (list_keyblock): Print validity information for all user IDs. Note, this - has to be done at other places too; for now we have only minimal support. - -Wed Jul 12 13:32:06 CEST 2000 Werner Koch - - * helptext.c, pkclist.c: s/superseeded/superseded/ - -Mon Jul 10 16:08:57 CEST 2000 Werner Koch - - * parse-packet.c (enum_sig_subpkt): Fixed testing on crtitical bit in case - of a NULL buffer. Reported by Peter Marschall. - -Wed Jul 5 13:28:45 CEST 2000 Werner Koch - - * keyedit.c, keyid.c: Add some _() - - * argparse.c: Changed the flag to suppress --version handling to also - suppress --help. - -Wed Jun 28 11:54:44 CEST 2000 Werner Koch - - * armor.c (armor_filter): Set sigclass to 0 in case of non-dash-escaped - clearsig. This makes this mode work again. - - * mainproc.c (proc_tree): Fixed handling of one-pass-sig packets in textmode. - Disabled the ugly workaround for PGP 5 - let's see whether thi breaks less - cases. Found by Ted Cabeen. - - * options.h (DBG_HASHING): New. All commented md_start_debug are now - controlled by this debug option. - - * sign.c (print_status_sig_created): New and called from 2 places. - - * keygen.c (gen_rsa): New, but commented. - (ask_algo): Commented support for RSA. - - * seckey-cert.c (protect_secret_key): Started to fix the code for v4 RSA - keys - it is not solved yet. However, we have time until, Sep 20th ;) - -Wed Jun 14 12:27:09 CEST 2000 Werner Koch - - * status.c (init_shm_coprocessing): Changed the sequence of the get,attach - to cope with the changes in newer Linux kernels. This bug has been found - by who also proposed this solution. Hopefully - this does not break gpg on to many systems. - - * cipher.c (write_header): Protect the IV with the MDC too. - * encr-data.c (decrypt_data): Likewise. - -Fri Jun 9 10:09:52 CEST 2000 Werner Koch - - * g10.c: New options --no-auto-key-retrieve - * options.h (auto_key_retrieve): New. - * mainproc.c (check_sig_and_print): Implemented that. - -Wed Jun 7 19:19:09 CEST 2000 Werner Koch - - * sig-check.c (do_check): Use EMULATE_MDENCODE also on v4 packets. - -Wed Jun 7 17:25:38 CEST 2000 Werner Koch - - * cipher.c (write_header): Use plain CFB mode for MDC encrypted packets. - * encr-data.c (decrypt_data): Ditto. - -Mon Jun 5 23:41:54 CEST 2000 Werner Koch - - * seskey.c (do_encode_md, encode_md_value): Add new arg v3compathack to work - around a bug in old versions. - * sig-check.c (do_check): use the aboved workaround when enabled. - * g10.c: New option --emulate-md-decode-bug - -Mon Jun 5 12:37:43 CEST 2000 Werner Koch - - * build-packet.c (do_mdc): New. - (do_encrypted_mdc): Changed for the new proposal. - * parse-packet.c (parse_mdc): New. - (parse_encrypted): Fixed for the new proposal. - * packet.h (PKT_MDC): New. - * cipher.c (cipher_filter): Build the MDC packet here. - * g10.c (main): Enable --force-mdc. - * encr-data.c (mdc_decode_filter): Fixed for new MDC method - - * options.h(rfc2440): New. - * g10.c (main): Changed the selected values for --openpgp to not include - optional algorithms. - -Thu May 18 11:38:54 CEST 2000 Werner Koch - - * keyedit.c (keyedit_menu): Add a keyword arg to the prompt. - - * status.c, status.h: Added 3 new status tokens. - * status.c (do_get_from_fd): New. - (cpr_enabled,cpr_get,cpr_get_hidden,cpr_kill_prompt, - cpr_get_answer_is_yes,cpr_get_answer_yes_no_quit): Modified to work - with the new function. - * g10.c: Add new option --command-fd. - - * status.c (progress_cb): New. - (set_status_fd): Register progress functions - -Fri May 12 14:01:20 CEST 2000 Werner Koch - - * delkey.c (delete_key): Add 2 new status messages - * status.c, status.h (STATUS_DELETE_PROBLEM): New. - - Fixed years of copyright in all source files. - -Mon May 1 17:08:14 CEST 2000 Werner Koch - - * trustdb.c (propagate_validity): Fixed the bug that only one uid - gets fully trusted even when all are signed by an ultimate key. - -Mon May 1 15:38:04 CEST 2000 Werner Koch - - * getkey.c (key_byname): Always returned a defined context. Fixed - a segv for invalid user id specifications. Reported by Walter Koch. - - * getkey.c (get_user_id): I18ned "no user id" string. By Walter. - - * pkclist.c (do_show_revocation_reason): Typo fixes. - * helptext.c: Ditto. - - * armor.c (armor_filter): Fixed some CRLF issues. By Mike McEwan. - -Fri Apr 14 19:37:08 CEST 2000 Werner Koch - - * pkclist.c (do_show_revocation_reason): New. - (show_revocation_reason): New and called at various places. - - * g10.c (main): Fixed small typo. - - * pkclist.c (do_we_trust): Act on always_trust but not for revoked - keys. Suggested by Chip Salzenberg. - - * g10.c: New option --lock-never. - - * ringedit.c (get_writable_keyblock_file): New. - * keygen.c (do_generate_keypair): Use this instead of the hardwired one. - - * keygen.c (ask_user_id): Check that the email address is in the - correct field. Suggested by Christian Kurz. - -Mon Apr 10 13:34:19 CEST 2000 Werner Koch - - * keyedit.c (show_key_with_all_names): s/sbb/ssb/ - -Tue Mar 28 14:26:58 CEST 2000 Werner Koch - - * trustdb.c (verify_own_keys): Do not print warning about unprotected - key when in quiet mode. - -Wed Mar 22 13:50:24 CET 2000 Werner Koch - - * mainproc.c (print_userid): Do UTF8 conversion before printing. - * import.c (import_one): Ditto. - (import_secret_one): Ditto. - (delete_inv_parts): Ditto. - -Thu Mar 16 16:20:23 CET 2000 Werner Koch - - * keylist.c (print_key_data): Handle a NULL pk gracefully. - - * getkey.c (merge_one_pk_and_selfsig): Fixed silly code for - getting the primary keys keyID but kept using the one from the - subkey. - * pubkey-enc.c (get_it): Print a note for expired subkeys. - - * getkey.c (has_expired): New. - (subkeys_expiretime): New. - (finish_lookup): Check for expired subkeys needed for encryption. - (merge_keys_and_selfsig): Fixed expiration date merging for subkeys. - - * keylist.c (list_keyblock): Print expiration time for "sub". - (list_one): Add missing merging for public keys. - * mainproc.c (list_node): Ditto. - -2000-03-14 13:49:38 Werner Koch (wk@habibti.openit.de) - - * keygen.c (keyedit_menu): Do not allow to use certain commands - while the secret key is selected. - -2000-03-09 12:53:09 Werner Koch (wk@habibti.openit.de) - - * keygen.c (ask_expire_interval): Movede parsig to ... - (parse_expire_string): ... this new function. And some new control - commands. - (proc_parameter_file): Add expire date parsing. - (do_generate_keypair): Allow the use of specified output files. - -2000-03-08 10:38:38 Werner Koch (wk@habibti.openit.de) - - * keygen.c (ask_algo): Removed is_v4 return value and the commented - code to create Elg keys in a v3 packet. Removed the rounding - of key sizes here. - (do_create): Likewise removed arg v4_packet. - (gen_elg): Likewise removed arg version. Now rounding keysizes here. - (gen_dsa): Rounding keysize now here. - (release_parameter_list): New - (get_parameter*): New. - (proc_parameter_file): New. - (read_parameter_file): New. - (generate_keypair): Splitted. Now uses read_parameter_file when in - batch mode. Additional argument to specify a parameter file. - (do_generate_keypair): Main bulk of above fucntion and uses the - parameter list. - (do_create): Don't print long notice in batch mode. - * g10.c (main): Allow batched key generation. - -Thu Mar 2 15:37:46 CET 2000 Werner Koch - - * pubkey-enc.c (get_it): Print a note about unknown cipher algos. - - * g10.c (opts): Add a note to the help listing about the man page - and removed some options from the help listing. - - * keyedit.c (print_and_check_one_sig): Use a new function to truncate - the output of the user ID. Suggested by Jan-Benedict Glaw. - -Wed Feb 23 10:07:57 CET 2000 Werner Koch - - * helptext.c: typo fix. - -Thu Feb 17 13:39:32 CET 2000 Werner Koch - - * revoke.c: Removed a bunch of commented code. - - * packet.h (SIGSUBPKT_REVOC_REASON): New. - * build-packet.c (build_sig_subpkt): Support new sub packet. - * parse-packet.c (parse_one_sig_subpkt): Ditto. - (dump_sig_subpkt): Ditto. - * revoke.c (ask_revocation_reason): New. - (release_revocation_reason_info): New. - (revocation_reason_build_cb): New. - (gen_revoke): Ask for reason. - * main.h (struct revocation_reason_info): Add declaration. - * keyedit.c (menu_revsig): Add support for revocation reason. - (menu_revkey): Ditto. - (sign_uid_mk_attrib): Renamed to ... - (sign_mk_attrib): ... this, made static and add support for reasons. - -Tue Feb 15 08:48:13 CET 2000 Werner Koch - - * build-packet.c (build_packet): Fixed fixing of old comment packets. - - * import.c (import_keys): Fixed importing from stdin when called with - nnames set to zero as it normally happens. - -Mon Feb 14 14:30:20 CET 2000 Werner Koch - - * sig-check.c (check_key_signature2): Add new arg r_expired. - (do_signature_check): New arg to pass it down to ... - (do_check): New arg r-expire which is set when the signature - has expired. - * trustdb.c (check_sig_record): Set SIGF_EXPIRED flag and set - the expiretime to zero so that thi signature will not be checked - anymore. - -Fri Feb 11 17:44:40 CET 2000 Werner Koch - - * g10.c (g10_exit): Update the random seed_file. - (main): Set the random seed file. New option --no-random-seed-file. - -Thu Feb 10 17:39:44 CET 2000 Werner Koch - - * keyedit.c (menu_expire): Fixed segv due to unitialized sub_pk. - By Rémi. - -Thu Feb 10 11:39:41 CET 2000 Werner Koch - - * keylist.c (list_keyblock): Don't print warnings in the middle of - regulat output lines. By Rémi. - - * sig-check.c: Include options.h - -Wed Feb 9 15:33:44 CET 2000 Werner Koch - - * gpg.c: New option --ignore-time-conflict - * sig-check.c (do_check): Implemented this option. - * trustdb.c (check_trust): Ditto. - * sign.c (do_sign): Ditto. - * keygen.c (generate_subkeypair): Ditto. - - * encode.c (encode_simple): use iobuf_cancel after open failure. - Reported by Huy Le. - -Fri Jan 14 18:32:01 CET 2000 Werner Koch - - * packet.h (STRING2KEY): Changed mode from byte to int. - * parse-packet.c (parse_key): Add the special GNU protection stuff - * build-packet.c (so_secret_key): Ditto. - * seckey-cert.c (do_check): Ditto. - * keyedit.c (change_passphrase): Ditto. - * export.c (export_secsubkeys): New. - (do_export_stream): Hack to export the primary key using mode 1001. - * g10.c: New command --export-secret-subkeys - -Thu Jan 13 19:31:58 CET 2000 Werner Koch - - * armor.c (is_armored): Check for 1-pass-sig packets. Reported by - David Hallinan . - (armor_filter): Replaced one LF by the LF macro. Reported by - Wolfgang Redtenbacher. - -Wed Jan 5 11:51:17 CET 2000 Werner Koch - - * g10.c (main): Reset new global flag opt.pgp2_workarounds - when --openpgp is used. - * mainproc.c (proc_plaintext): Do the PGP2,5 workarounds only - when the global flag is set. - (proc_tree): Ditto. - * textfilter.c (copy_clearsig_text): Ditto. - * armor.c (armor_filter): Ditto. - - * g10.c: New option --list-only - * mainproc.c (proc_tree): Don't do it if opt.list_only is active. - (proc_pubkey_enc): Implement option. - - * status.h, status.c ({BEGIN,END}_{EN,DE}CRYPTION): New. - * cipher.c (cipher_filter): New status outputs. - * mainproc.c (proc_encrypted): New status outputs. - -Fri Dec 31 14:08:15 CET 1999 Werner Koch - - * armor.c (armor_filter): Made the "Comment:" header translatable. - - * hkp.c (hkp_import): Make sure that the program does not return - success when there is a connection problem. Reported by Phillip Jones. - -Sun Dec 19 15:22:26 CET 1999 Werner Koch - - * armor.c (LF): Use this new macro at all places where a line LF - is needed. This way DOSish textfiles should be created when the - input data is also in dos mode. - * sign.c (LF): Ditto. - * textfilter.c (LF): Ditto. - (copy_clearsig_text): Disabled the forcing of CR,LF sequences - for DOS systems. - - * plaintext.c (handle_plaintext): Fixes for line endings on DOS. - and react on a LF in cleartext. - * armor.c (fake_packet): Restore the original line ending after - removing trailing spaces. - - * signal.c (got_fatal_signal): DOS fix. - -Thu Dec 16 10:07:58 CET 1999 Werner Koch - - * mainproc.c (print_failed_pkenc): Fix for unknown algorithm. - Found by fygrave@epr0.org. - -Thu Dec 9 10:31:05 CET 1999 Werner Koch - - * hkp.c: i18n the strings. - -Sat Dec 4 15:32:20 CET 1999 Werner Koch - - * trustdb.c (verify_key): Shortcut for ultimately trusted keys. - -Sat Dec 4 12:30:28 CET 1999 Werner Koch - - * pkclist.c (build_pk_list): Validate the trust using the namehash - if this one has been set by the key lookup. - - * g10.c: Add --delete-secret-key to the help page. - - * openfile.c (copy_options_file): Made static. - (try_make_homedir): New. - * ringedit.c (add_keyblock_resource): Use the try_make_hoemdir logic. - * tdbio.c (tdbio_set_dbname): Likewise. - - * keygen.c (generate_user_id): Use m_alloc_clear() here. We should - better use an allocation function specific to the user_id packet. - - * keygen.c (keygen_add_std_prefs): Changed symmetric preferences - to include Blowfish again. This is due to it's better speed compared - to CAST5. - - * g10.c (strusage): Print the home directory. - - * armor.c (armor_filter): Take action on the cancel control msg. - * filter.h (armor_filter_context_t): Add cancel flag. - -Mon Nov 29 21:52:11 CET 1999 Werner Koch - - * g10.c: New option --fast-list-mode .. - * keylist.c (list_keyblock): .. and implemented. - * mainproc.c (list_node): Ditto. - - * import.c (mark_non_selfsigned_uids_valid): Fixed the case that there - is a uid without any packet following. - -Mon Nov 22 11:14:53 CET 1999 Werner Koch - - * mainproc.c (proc_plaintext): Never enable the hash processing - when skip_verify is active. - - * armor.c (parse_header_line): Stop parsing on a WS line too. - Suggested by Aric Cyr. - - * tdbdump.c (HEXTOBIN): Changed the name of the argument, so that - traditional cpp don't mess up the macros. Suggested by Jos Backus. - - * mainproc.c (list_node): Print the PK algo in the --with-colon mode. - * keylist.c (list_keyblock): Ditto. - - * signal.c (got_fatal_signal): Found the reason why exit(8) did not - work - it is better to set the disposition back to default before - raising the signal. Print the notice on stderr always. - -Fri Nov 12 20:33:19 CET 1999 Werner Koch - - * g10.c (make_username): Swapped the logic. - * keylist.c (public_key_list): Now takes a STRLIST as arg and moved - the creation ot this list to the caller, so that he can copy with - UTF-conversion of user IDs. Changed all callers. - (secret_key_list): Likewise. - - * getkey.c (get_user_id_string_native): New and ... - * encode.c (write_pubkey_enc_from_list): ... use it here. - - * pubring.asc: Updated. - - * packet.h (PKT_PHOTO_ID): New. - * parse-packet.c (parse_photo_id): New. - * build-packet.c (do_user_id: Handle photo IDs. - (build_packet): Change CTB for photo IDs - * free-packet.c (free_user_id): Release memory used for photo IDs - * sig-check.c (hash_uid_node): Handle photo IDs too. - * trustdb.c (print_uid_from_keyblock): Hash photo ID. - (make_uid_records): Ditto. - * getkey.c (find_by_name): Ditto. - * keyedit.c (show_prefs): Ditto. - * keylist.c (list_keyblock): Ditto. - -Thu Oct 28 16:08:20 CEST 1999 Werner Koch - - * keygen.c (ask_expire_interval): Print a warning for systems - with a signed 32 time_t if the exiration time is beyoind 2038. - -Fri Oct 8 20:40:50 CEST 1999 Werner Koch - - * ringedit.c (enum_keyblocks): The last fix way really stupid; - reverted and set rt to Unknown. - -Fri Oct 8 20:32:01 CEST 1999 Werner Koch - - * ringedit.c (enum_keyblocks): Zero the entire kbpos out on open. - - * g10.c (oEntropyDLL): Removed option. - (main): Made the warning on development versions more verbose. - - * g10.c (oHonorHttpProxy): New option. - * hkp.c (hkp_ask_import,hkp_export): Implement this option. - * options.skel: Enable this option for new installations - -Mon Oct 4 21:23:04 CEST 1999 Werner Koch - - * import.c (import_keys): Changed calling interface, adjusted caller. - (import): Moved printing of stats out ... - (print_stats): New. ... to here. - (import_keys_stream): Call stats print here. - (import_keys): Print stats as totals for all files. - - * tdbio.h (DIRF_NEWKEYS): New - * tdbio.c (tdbio_dump_record): Print the new flag. - * trustdb.c (check_trust_record): New arg sigs_only. Adapted all - callers. - (do_update_trust_record): Removed recheck arg and add a new sigs_only - do we can later improve on the performance. Changed all callers too. - (check_trustdb): Evalutate the new flag and add a status output. - Do a check when the dir record has not been checked. - (build_cert_tree): Evaluate the new flag. - (check_trust): Ditto. Do a trust_record check, when the dir record - is not marked as checked. - (mark_fresh_keys): New. - (clear_lid_table): New. - (sync_trustdb): New. - * import.c (import_keys): Call sync_trustdb() after processing. - (import_keys_stream): Ditto. - * tdbdump.c (import_ownertrust): Ditto. - - * import.c (import_revoke_cert): Notify the trust DB. - (do_update_trust_record): Use |= to set the REVOKED bit and not &=; - shame on me for this bad copy+paste introduced bug. - (do_we_trust): Add trustmask to allow revoked key override to work. - Chnaged are to allow return of a mofified trustlevel. Adapted the - one caller. - - * g10.c: New options --emulate-3des-s2k-bug - * passphrase.c (hash_passphrase): Implemented above. - - * mainproc.c (proc_tree): Check for standalone signatures. - (do_check_sig): Print a notice for a standalone revocation - (check_sig_and_print): Do not print an error for unchecked standalone - revocations. - -Tue Sep 28 20:54:37 CEST 1999 Werner Koch - - * encode.c (encode_simple): Use new CTB when we don't have the - length of the file. This is somewhat strange as the comment above - indicates that this part is actually fixed for PGP 5 - maybe I simply - lost the source line, tsss. - - * armor.c (armor_filter): Set a flag if no OpenPGP data has been found. - * verify.c (verify_signatures): Add an error helptext. - -Thu Sep 23 19:24:30 CEST 1999 Werner Koch - - * openfile.c (open_outfile): Fixed the 8dot3 handling. - - * passphrase.c (passphrase_to_dek): Print uid using utf8 func. - * delkey.c (delete_key): Ditto. - * pkclist.c (show_paths,do_edit_ownertrust,do_we_trust): Ditto - (do_we_trust_pre): Ditto. - * trustdb.c (print_user_id,check_uidsigs): Ditto. - * revoke.c (gen_revoke,ask_revoke_sig): Ditto. - -Thu Sep 23 09:52:58 CEST 1999 Werner Koch - - * verify.c (print_file_status): New. - (verify_one_file): Moved status print to th new fnc. Add error status. - * status.c, status.h (STATUS_FILE_ERROR): New - -Wed Sep 22 10:14:17 CEST 1999 Werner Koch - - * openfile.c (make_outfile_name): Use case-insenstive compare for - DOS systems. Add ".pgp" to the list of know extensions. - (open_outfile): For DOS systems try to replace the suffiy instead of - appending it. - - * status.c, status.h: Add STATUS_FILE_{START,DONE}. - * verify.c (verify_one_file): Emit these new stati. - - * sign.c (clearsign_file): Avoid duplicated Entries in the "Hash:" - line. Those headers are now only _not_ printed when there are - only old-style keys _and_ all hashs are MD5. - -Mon Sep 20 12:24:41 CEST 1999 Werner Koch - - - * verify.c (verify_files, ferify_one_file): New. - * g10.c: New command --verify-files - -Fri Sep 17 12:56:42 CEST 1999 Werner Koch - - * g10.c: Add UK spelling as alias for armor options ;-) - - * import.c (append_uid): Fixed a SEGV when there is no selfsig and - no subkey. - (merge_sigs): Ditto. Removed the assertion. - -Wed Sep 15 16:22:17 CEST 1999 Werner Koch - - * g10.c: New option --entropy-dll-name - -Mon Sep 13 10:51:29 CEST 1999 Werner Koch - - * signal.c (got_fatal_signal): Print message using write(2) and - only for development versions. - -Mon Sep 6 19:59:08 CEST 1999 Werner Koch - - * tdbio.c (tdbio_set_dbname): Use mkdir macro - * ringedit.c (add_keyblock_resource): Ditto. - -Fri Sep 3 10:04:45 CEST 1999 Werner Koch - - * pkclist.c (build_pk_list): Skip keys set with --encrypt-to also - when asking for a key. - - * plaintext.c (handle_plaintext): Make sure that we don't read a - second EOF in the read loop for partial length packets. - - * mainproc.c (check_sig_and_print): print user ID as utf-8. - -Thu Sep 2 16:40:55 CEST 1999 Werner Koch - - * import.c (merge_blocks): First add new subkeys, then merge subkey - certificates. - (merge_sigs): Don't merge subkey signatures here. - -Wed Sep 1 15:30:44 CEST 1999 Werner Koch - - * keygen.c (ask_expire_interval): Fixed bug related to cpr_xx (tnx - Francis J. Lacoste). - -Tue Aug 31 17:20:44 CEST 1999 Werner Koch - - * plaintext.c (do_hash): Hash CR,LF for a single CR. - (ask_for_detached_datafile): Changed arguments to be closer to - those of hash_datafiles and cleanup the code a bit. - * mainproc.c (proc_tree): Workaround for pgp5 textmode detached - signatures. Changed behavior of asking for data file to be the same - as with provided data files. - - * keylist.c (list_keyblock): Use UTF8 print functions. - -Mon Aug 30 20:38:33 CEST 1999 Werner Koch - - * import.c (chk_self_sigs): some s/log_error/log_info/ so that gpg - does not return an error if a key has some invalid packets. - - * helptext.c: Fixed some typos and changed the way the - translation works. The english text is now the keyword for gettext - and not anymore the keyword supplied to the function. Done after - some discussion with Walter who thinks this is much easier for the - translators. - - * misc.c (disable_core_dumps): Don't do it for DOSish systems. - - * signal.c (signal_name): Bounds check on signum. - -Wed Aug 4 10:34:18 CEST 1999 Werner Koch - - * pubring.asc: Updated. - - * pkclist.c (do_we_trust_pre,check_signatures_trust): Do not print - the warning about --always_trust when --quiet is used. - - * pkclist.c (fpr_info): New and called at several places. - - * parse-packet.c (dump_sig_subpkt): List revocation key contents. - -Mon Jul 26 09:34:46 CEST 1999 Werner Koch - - * pkclist.c (build_pk_list): Fixed typo in format string. - - * trustdb.c (create_shadow_dir): Don't translate the error string. - - * g10.c (main): Fixed spelling of user-id. - * getkey.c (find_by_name_pk,find_by_name_sk, - find_by_keyid,find_by_keyid_sk): Ditto and translate it. - * import.c (mark_non_selfsigned_uids_valid,delete_inv_parts): Ditto. - - -Mon Jul 26 01:01:39 CEST 1999 Michael Roth - - * g10.c, options.h: New options --no-literal and --set-filesize - - * encode.c (encode_simple, encode_crypt): Support for the options - --no-literal and --set-filesize. - - * sign.c (sign_file): ditto. - -Fri Jul 23 13:53:03 CEST 1999 Werner Koch - - - * ringedit.c (enum_keyblocks): Removed annoying error message in cases - when we have no keyring at all to enum. - - * getkey.c (classify_user_id): Rewrote to relax the recognition of - keyIDs and fingerprints (Michael). - - * mainproc.c (check_sig_and_print): Print status NO_PUBKEY. - (print_failed_pkenc): Print status NO_SECKEY. - - * import.c (mark_non_selfsigned_uids_valid): New. - * g10.c: New option --allow-non-selfsigned-uid. - - * pkclist.c (print_fpr): New. - (do_we_trust_pre): Print the fpr before asking whether to use the key - anyway. - (do_edit_ownertrust): Likewise. - -Thu Jul 22 20:03:03 CEST 1999 Werner Koch - - - * ringedit.c (enum_keyblocks): Removed annoying error message in cases - when we have no keyring at all to enum. - - * getkey.c (classify_user_id): Rewrote to relax the recognition of - keyIDs and fingerprints (Michael). - - * mainproc.c (check_sig_and_print): Print status NO_PUBKEY. - (print_failed_pkenc): Print status NO_SECKEY. - - * import.c (mark_non_selfsigned_uids_valid): New. - * g10.c: New option --allow-non-selfsigned-uid. - -Thu Jul 15 10:15:35 CEST 1999 Werner Koch - - * g10.c: New options --disable-{cipher,pubkey}-algo. - -Wed Jul 14 19:42:08 CEST 1999 Werner Koch - - * status.h (STATUS_IMPORTED): New. - * import.c (import): Print some status information (Holger Schurig). - - * g10.c (main): Make --no-greeting work again. Add a warning when - --force-mds is used. - -Tue Jul 13 17:39:25 CEST 1999 Werner Koch - - * pkclist.c (do_edit_ownertrust): Changed the way help works. - (build_pk_list): Implemented default recipient stuff. - * g10.c: New options --default-recipient[-self] - (main): Suppress greeting in most cases, entering a passphrase or - a missing value is not considered to be interactive use. - Merged --print-md and --print-mds; the latter is now obsolete. - Changed the way --gen-random works and documented it. - Changed the way --gen-prime works and add a man entry. - * g10.c (MAINTAINER_OPTIONS): Removed. - -Mon Jul 12 18:45:57 CEST 1999 Werner Koch - - * keyedit.c (keyedit_menu): Add arg sign_mode and changed callers - * g10.c (main): New command --lsign-key. - -Mon Jul 12 14:55:34 CEST 1999 Werner Koch - - * mainproc.c (kidlist_item): New. - (release_list): Release failed pk-enc-list. - (print_failed_pkenc): New - (proc_encrypted): Print info about failed PK enc. - - * openfile.c (make_outfile_name): s/error/info/ - - * passphrase.c (passphrase_to_dek): Return an empty passphrase when - in batch mode and don't make the warning message fatal - * seckey-cert.c (check_secret_key): Try only once when in batch mode. - - * g10.c (make_username): New. - -Thu Jul 8 16:21:27 CEST 1999 Werner Koch - - - * packet.h (PKT_ring_trust): New - * parse-packet.c (parse_trust): Store trust value - * build-packet (build_packet): Ignore ring trust packets. - * mainproc.c (add_ring_trust): New. - (list_node): Print "rtv" records. - * g10.c: New option --with-fingerprint. - - * trustdb.c (verify_own_keys): Don't insert if we are dry running - (check_trust): Ditto. - -Wed Jul 7 13:08:40 CEST 1999 Werner Koch - - * Makefile.am: Support for libtool. - - * keygen.c (ask_expire_interval): Hack to allow for an expire date. - - * trustdb.c (do_update_trust_record,update_trust_record): Splitted. - (check_trust_record): New. - (check_trust,build_cert_tree): Check the dir record as needed. - (upd_pref_record): Removed. - (make_pref_record): New. - (propagate_validity): Stop as soon as we have enough validity. - - * tbdio.c (MAX_CACHE_ENTRIES_HARD): Increased the limit. - - -Fri Jul 2 11:45:54 CEST 1999 Werner Koch - - * g10.c (g10_exit): Dump random stats. - - * sig-check.c (check_key_signature,check_key_signature2): Enhanced - version and wrapper for old function. - (do_signature_check,signature_check): Ditto. - -Thu Jul 1 12:47:31 CEST 1999 Werner Koch - - - * keyedit.c (show_key_with_all_names): Print a notice for disabled keys. - (enable_disable_keys): Add functionality - * pkclist.c (edit_ownertrust): preserve disabled state. - (build_pk_list): Skip disabled keys. - * trustdb.c (upd_one_ownertrust): Ditto. - (build_cert_tree): Mask the ownertrust. - (trust_letter): Mask the value. - (do_check): Take disabled flag into account. - - * passphrase.c (passphrase_to_dek): Add a pubkey_algo arg and changed - all callers. - - * g10.c (utf8_strings): 2 new options. - - * trustdb.c (insert_trust_record_by_pk): New, replaces the next one. - (insert_trust_record): Now takes a keyblock as arg. Changed all - callers to use the appropritae function. - - * openfile.c (ask_outfile_name): New. - * plaintext.c (handle_plaintext): Ask for filename if there is - no valid syntax. Don't use fname varbatim but filter it. - -Tue Jun 29 21:44:25 CEST 1999 Werner Koch - - - * trustdb.h (TRUST_FLAG_DISABLED): New. - - * status.c (USE_CAPABILITIES): Capabilities support (Remi). - - * tdbio.c : Added new fields to the DIR record. - (tdbio_write_record): Fixed the update of the hash tables. - (tdbio_delete_record): Drop the record from the hash tables. - (drop_from_hashtbl): New. - - * status.c (cpr_get): Special online help mode. - * helptext.c ("keyedit.cmd"): Removed. - * keyedit.c (keyedit_menu): Use only help system. - (enable_disable_key): New bit doies not yet work. - -Sat Jun 26 12:15:59 CEST 1999 Werner Koch - - - * dearmor.c (enarmor_file): Fixed comment string. - * tdbdump.c (export_ownertrust): Text fix. - * tbio.c (tdbio_invalid): Ditto. - - * parse-packet.c (parse_key): Made temp buffer larger. - - * Makefile.am (install-data-local): Add missing backslashes - -Tue Jun 15 12:21:08 CEST 1999 Werner Koch - - * g10.c (main): Made iterated+salted the default S2K method. - - * Makefile.am (install-data-local): Use DESTDIR. - - * passphrase.c (passphrase_to_dek): Emit missing-passphrase while in - batchmode. - - * parse-packet.c (parse_pubkeyenc): Fixed a SEGV. - -Mon Jun 14 21:18:54 CEST 1999 Michael Roth - - * g10.c: New options --openpgp, --no-tty, --emit-version, - --default-comment and --lock-multiple - -Thu Jun 10 14:18:23 CEST 1999 Werner Koch - - * free-packet.c (free_encrypted): Fixed EOF case (Remi). - (free_plaintext): Ditto. - - * helptext.c (keyedit.delsig.unknown): New (Remi). - * keyedit.c (print_and_check_one_sig): Add arg print_without_key and - changed all callers to make use of it (Remi): - -Tue Jun 8 13:36:25 CEST 1999 Werner Koch - - * keylist.c (print_key_data): New and called elsewhere. - * g10.c: New option --with-key-data - -Wed Jun 2 14:17:19 CEST 1999 Werner Koch - - * mainproc.c (proc_tree): Yet another bad hack to cope with - broken pgp2 created detached messages in textmode. - -Tue Jun 1 16:01:46 CEST 1999 Werner Koch - - * openfile.c (make_outfile_name): New. - * plaintext.c (handle_plaintext): Outputfile is now the inputfile - without the suffix. - * g10.c: New option --use-embedded-filename - -Mon May 31 19:41:10 CEST 1999 Werner Koch - - * g10.c (main): Fix for SHM init (Michael). - - * compress.c, encr-data.c, mdfilter.c, - plaintext.c, free-packet.c: Speed patches (Rémi). - -Thu May 27 09:40:55 CEST 1999 Werner Koch - - * status.c (cpr_get_answer_yes_no_quit): New. - * keyedit.c (menu_delsig): New. - (check_all_keysigs): Splitted. - (print_and_check_one_sig): New. - -Wed May 26 14:36:29 CEST 1999 Werner Koch - - * build-packet.c (build_sig_subpkt): Support large packets. - * parse-packet.c (enum_sig_subpkt): Replaces parse_sig_subpkt. - * mainproc.c (print_notation_data): Print all notation packets. - * g10.c (add_notation_data): Add a way to specify the critical flag. - (main): Add option --set-policy-url. - (check_policy_url): Basic checks. - * sign.c (mk_notation_and_policy): Replaces mk_notation. - - * parse-packet.c (can_handle_critical): Moved decision whether we can - handle critical subpacket to an extra function. - -Tue May 25 19:50:32 CEST 1999 Werner Koch - - * sign.c (sign_file): Always use compression algo 1 for signed - onyl file becuase we can´ be sure the the verifier supports other - algorithms. - - * build-packet.c (build_sig_subpkt): Support for notation data. - * sign.c (sign_file,clearsign_file,make_keysig_packet): Ditto. - (mk_notation): New. - * g10.c (add_notation_data): New and add option -N - * mainproc.c (print_notation_data): New. - (check_sig_and_print): Print any notation data of the signed text. - -Sun May 23 14:20:22 CEST 1999 Werner Koch - - * pkclist.c (check_signatures_trust): Print a warning and return - immediateley if opt.always_trust is true. - - * g10.c (main): Corrected handling of no-default-keyring - - * pkclist.c (algo_available): Disable Twofish until we have settled - how to do the MDC. - - * hkp.c: Disable everything for mingw32 - -Sat May 22 22:47:26 CEST 1999 Werner Koch - - * mainproc.c (check_sig_and_print): Add sig creation time to the - VALIDSIG status output. Add more info to the ERRSIG output. - * sig-check.c (signature_check): Add sig time after epoch to SIG_ID. - - * import.c (import_one): Merge duplicate user IDs. - (collapse_uids): New. - * kbnode.c (move_kbnode): New. - (remove_kbnode): New. - * keyedit.c (keyedit_menu): Call collapse_uids. - - * g10.c: new option --logger-fd. - - * import.c: s/log_*_f/log_*/ - -Thu May 20 14:04:08 CEST 1999 Werner Koch - - * misc.c (pull_in_libs): do the volatile only for gcc - - * sig-check (signature_check): Emit SIG_iD only for classes 0 and 1. - - * armor.c (armor_filter): Add detection of PGP2 created clearsigs. - (fake_packet): A tab is not a WS for pgp2 - handle this. - * textfilter.c (len_without_trailing_chars): New. - (copy_clearsig_text): Add pgp2mode arg. - * sign.c (clearsign_file): pass old_style to the above fnc. - - -Wed May 19 16:04:30 CEST 1999 Werner Koch - - * g10.c: New option --interactive. - - * mainproc.c (proc_plaintext): Add workaround for pgp2 bug - (do_check_sig): Ditto. - (proc_tree): Ditto. - * plaintext.c (do_hash): Ditto. - (hash_datafiles): Ditto, add an arg, changed all callers. - * mdfilter.c (md_filter): Add support for the alternate hash context. - -Mon May 17 21:54:43 CEST 1999 Werner Koch - - * parse-packet.c (parse_encrypted): Support for PKT_ENCRYPTED_MDC. - * build-packet.c (do_encrypted_mdc): Ditto. - * cipher.c (write_header): Add mdc hashing. - (cipher_filter): write out the hash. - * mainproc.c (do_proc_packets): Add PKT_ENCRYPTED_MDC. - * encr-data.c (decrypt_data): Add mdc hashing. - (mdc_decode_filter): New. - - * parse-packet.c (parse_sig_subpkt): Fixed stupid bug for subpkt - length calculation - (parse_signature): Fixed even more stupid bug. - -Sat May 8 19:28:08 CEST 1999 Werner Koch - - * build-packet.c (do_signature): Removed MDC hack. - * encode.c (encode_crypt_mdc): Removed. - * mainproc.c (do_check_sig): Removed MDC hack. - (check_sig_and_print): Ditto. - * parse-packet.c (parse_signature): Ditto. - * sig-check.c (mdc_kludge_check): Ditto. - * free-packte.c (copy_signature, free_seckey_enc): Ditto. - - * parse-packet.c (parse_signature,parse_key): Store data of - unknown algorithms with mpi_set_opaque inseatd of the old - faked data stuff. - (read_rest): Removed. - (read_rest2): Renamed to read_rest - * build-packet.c (write_fake_data): Use mpi_get_opaque. - * free-packet.c (cp_fake_data): Removed and cahnged all callers - to use mpi_copy. - (free_pubkey_enc,free_seckey_enc,release_public_key_parts, - release_secret_key_parts): Use mpi_free for opaque data. - -Thu May 6 14:18:17 CEST 1999 Werner Koch - - * trustdb.c (check_trust): Check for revoked subkeys. - * pkclist.c (do_we_trust): Handled revoked subkeys. - (do_we_trust_pre): Ditto. - (check_signatures_trust): Ditto. - - * build-packet.c (hash_public_key): Fix for ancient g10 keys. - - * mainproc.c (do_proc_packets): Return EOF if no data has been read. - * g10.c (main): Catch errors for default operation. - -Thu Apr 29 12:29:22 CEST 1999 Werner Koch - - * sign.c (sign_file): Fixed hashing in case of no subpackets. - (clearsign_file): Ditto. - (make_keysig_packet): Ditto. - -Wed Apr 28 13:03:03 CEST 1999 Werner Koch - - * keyedit.c (keyedit_menu): Add new command revkey. - * (menu_revkey): New. - - -Mon Apr 26 17:48:15 CEST 1999 Werner Koch - - * parse-packet.c (parse_signature): Add the MDC hack. - * build-packet.c (do_signature): Ditto. - * free-packet.c (free_seckey_enc,copy_signature,cmp_signatures): Ditto. - * mainproc.c (do_check_sig): Ditto. - * sig-check.c (mdc_kludge_check): New. - * encode.c (encrypt_mdc_file): New. - - * keyedit.c (check_all_keysigs): List revocations. - * (menu_revsig): New. - * sign (make_keysig_packet): Support for class 0x30. - -Sun Apr 18 20:48:15 CEST 1999 Werner Koch - - * pkclist.c (select_algo_from_prefs): Fixed the case that one key - has no preferences (Remi Guyomarch). - - keylist.c (list_keyblock): ulti_hack to propagate trust to all uids. - -Sun Apr 18 10:11:28 CEST 1999 Werner Koch - - * seckey-cert.c (do_check): Use real IV instead of a 0 one, so that - it works even if the length of the IV doesn't match the blocksize. - Removed the save_iv stuff. - (protect_secret_key): Likewise. Create the IV here. - * packet.h (PKT_secret_key): Increased size of IV field and add a - ivlen field. - * parse-packet.c (parse_key): Use the len protect.ivlen. - * build-packet.c (do_secret_key). Ditto. - - * getkey.c (key_byname): Close keyblocks. - - * Makefile.am (gpgm): Removed this - * g10.c: Merged gpg and gpgm - - * import.c (import): Utilize option quiet. - * tdbio.c (tdbio_set_dbname): Ditto. - * ringedit.c (add_keyblock_resource,keyring_copy): Ditto. - - * keyedit.c (sign_uids): Add some batch support. - - * g10.c (main): add call to tty_batchmode. - -Fri Apr 9 12:26:25 CEST 1999 Werner Koch - - * status.c (write_status_text): Some more status codes. - * passphrase_to_dek (passphrase_to_dek): add a status code. - * seckey_cert.c (check_secret_key): Likewise. - - * encr-data.c (decrypt_data): Reverse the last changes - * cipher.c (write_header): Ditto. - - * parse-packet.c (parse_key): Dropped kludge for ancient blowfish mode. - -Thu Apr 8 09:35:53 CEST 1999 Werner Koch - - * mainproc.c (proc_encrypted): Add a new status output - * passphrase.c (passphrase_to_dek): Ditto. - * status.h status.c: Add new status tokens. - -Wed Apr 7 20:51:39 CEST 1999 Werner Koch - - * encr-data.c (decrypt_data): Fixes for 128 bit blocksize - * cipher.c (write_header): Ditto. - * seckey-cert.c (do_check): Ditto. - (protect_secret_key). Ditto. - * misc.c (print_cipher_algo_note): Twofish is now a standard algo. - - * keygen.c (do_create): Fixed spelling (Gaël Quéri) - (ask_keysize): Only allow keysizes up to 4096 - - * ringedit.c (add_keyblock_resource): chmod newly created secrings. - - * import.c (delete_inv_parts): Fixed accidently deleted subkeys. - -Tue Apr 6 19:58:12 CEST 1999 Werner Koch - - * armor.c: Removed duped include (John Bley) - * mainproc.c: Ditto. - - * build-packet.c (hash_public_key): Fixed hashing of the header. - - * import.c (delete_inv_parts): Allow import of own non-exportable sigs. - -Sat Mar 20 13:59:47 CET 1999 Werner Koch - - * armor.c (fake_packet): Fix for not not-dash-escaped - -Sat Mar 20 11:44:21 CET 1999 Werner Koch - - * g10.c (main): Added command --recv-keys - * hkp.c (hkp_import): New. - -Wed Mar 17 13:09:03 CET 1999 Werner Koch - - * trustdb.c (check_trust): add new arg add_fnc and changed all callers. - (do_check): Ditto. - (verify_key): Ditto. - (propagate_validity): Use the new add_fnc arg. - (print_user_id): Add the FILE arg. - (propagate_ownertrust): New. - * pkclist.c (add_ownertrust_cb): New and changed the add_ownertrust - logic. - - * getkey.c (get_keyblock_bylid): New. - * trustdb.c (print_uid_from_keyblock): New. - (dump_tn_tree_with_colons): New. - (list_trust_path): Add colon print mode. - - * trustdb.c (insert_trust_record): Always use the primary key. - - * encode.c (encode_simple): Added text_mode filter (Rémi Guyomarch) - (encode_crypt): Ditto. - - * mainproc.c (proc_pubkey_enc): Added status ENC_TO. - * armor.c (armor_filter): Added status NODATA. - * passphrase.c (passphrase_to_dek): Always print NEED_PASSPHRASE - * seckey_cert.c (check_secret_key): Added BAD_PASS status. - - * g10.c (main): Set g10_opt_homedir. - -Sun Mar 14 19:34:36 CET 1999 Werner Koch - - * keygen.c (do_create): Changed wording of the note (Hugh Daniel) - -Thu Mar 11 16:39:46 CET 1999 Werner Koch - - * tdbdump.c: New - - * trustdb.c (walk_sigrecs,do_list_sigs,list_sigs, - list_records,list_trustdb,export_ownertrust,import_ownertrust): Moved - to tdbdump.c - (init_trustdb): renamed to setup_trustdb. Changed all callers. - (do_init_trustdb): renamed to init_trustdb(). - * trustdb.c (die_invalid_db): replaced by tdbio_invalid. - * tdbio.c (tdbio_invalid): New. - - * import.c (delete_inv_parts): Skip non exportable signatures. - * keyedit.c (sign_uid_mk_attrib): New. - (sign_uids): Add the local argument. - (keyedit_menu): New "lsign" command. - * trustdb.c (register_trusted_key): Removed this and all related stuff. - * g10.c (oTrustedKey): Removed option. - - * tdbio.h (dir.valcheck): New trustdb field. - * tdbio.c: Add support for this field - (tdbio_read_modify_stamp): New. - (tdbio_write_modify_stamp): New. - * trustdb.c (do_check): Check against this field. Removed cache update. - (verify_key): Add cache update. - (upd_uid_record): Some functional changes. - (upd_cert_record): Ditto - -Wed Mar 10 11:26:18 CET 1999 Werner Koch - - * keylist.c (list_keyblock): Fixed segv in uid. Print 'u' as - validity of sks. - -Mon Mar 8 20:47:17 CET 1999 Werner Koch - - * getkey.c (classify_user_id): Add new mode 12 (#). - - * seckey-cert.c (check_secret_key): replaced error by info. - - * trustdb.c (query_trust_info): Add another arg, changed all callers. - (check_trust): Ditto. - (do_check): Ditto. - (verify_key): Handle namehash. - * keylist.c (list_keyblock): print trust info for user ids. - - * sig-check.c (signature_check): Add sig-created to status output. - -Tue Mar 2 16:44:57 CET 1999 Werner Koch - - * textfilter.c (copy_clearsig_text): New. - (clearsign): Removed. - * sign.c (clearsign_file): does not use textfiler anymore. - - * keygen.c (ask_user_id): print a note about the used charset. - -Tue Mar 2 10:38:42 CET 1999 Werner Koch - - * sig-check.c (signature_check): sig-id now works for all algos. - - * armor.c (armor_filter): Fixed armor bypassing. - -Sun Feb 28 19:11:00 CET 1999 Werner Koch - - * keygen.c (ask_user_id): Don't change the case of email addresses. - (has_invalid_email_chars): Adjusted. - - * keylist.c (list_one): Really list serect keys (Remi Guyomarch) - - * keyedit.c (menu_select_uid): Add some braces to make egcs happy. - (menu_select_key): Ditto. - - * mainproc.c (do_proc_packets): List sym-enc packets (Remi Guyomarch) - -Fri Feb 26 17:55:41 CET 1999 Werner Koch - - * pkclist.c (build_pk_list): Return error if there are no recipients. - - * sig-check.c (signature_check): New signature id feature. - * armor.c (make_radic64_string): New. - - * mainproc.c (proc_pubkey_enc): early check for seckey availability. - - * pkclist.c (do_we_trust_pre): print user id before asking. - - * ringedit.c (add_keyblock_resource,get_keyblock_handle): Cleaner - handling of default resource. - - -Thu Feb 25 18:47:39 CET 1999 Werner Koch - - * pkclist.c (algo_available): New. - (select_algo_from_prefs): Check whether algo is available. - - * ringedit.c (keyring_copy): Take care of opt.dry_run. - (do_gdbm_store): Ditto. - * openfile.c (open_outfile). Ditto. - (copy_options_file): Ditto. - * trustdb.c (update_trustdb): Ditto. - (clear_trust_checked_flag): Ditto. - (update_trust_record): Ditto. - (insert_trust_record): Ditto. - -Wed Feb 24 11:07:27 CET 1999 Werner Koch - - * keylist.c (secret_key_list): Now really list the secret key. - - * trustdb.c (do_init_trustdb): New. Init is now deferred. - -Mon Feb 22 20:04:00 CET 1999 Werner Koch - - * getkey.c (lookup_sk): Return G10ERR_NO_SECKEY and not x_PUBKEY. - -Fri Feb 19 15:49:15 CET 1999 Werner Koch - - * pkclist.c (select_algo_from_prefs): retrieve LID if not there. - - * armor.c (fake_packet): Replaced ugly lineending handling. - - * g10.c (oNoEncryptTo): New. - * pkclist.c (build_pk_list): Implemented this option. - - * g10.c (main): Greeting is now printed to stderr and not to tty. - Use add_to_strlist() instead of direct coding. - - * import.c (import): Use iobuf_push_filter2. - - * mainproc.c (check_sig_and_print): Print all user ids - for good signatures. - * getkey.c (get_pubkeyblock): New. - - * import.c (chk_self_sigs): Fixed SEGV for unbounded class 0x18 keys. - (delete_inv_parts): Delete special marked packets. - -Tue Feb 16 14:10:02 CET 1999 Werner Koch - - * g10.c (main): New option --encrypt-to - - * pkclist.c (build_pk_list): Implemented encrypt-to. - - * parse-packet.c (parse_user_id): Removed the hack to work with - utf-8 strings. - - * g10.c (main): Install lockfile cleanup handler. - * tdbio.c (cleanup): Removed: this is now handled by dotlock. - -Sat Feb 13 14:13:04 CET 1999 Werner Koch - - * tdbio.c (tdbio_set_dbname): Init lockhandle for a new trustdb - -Wed Feb 10 17:15:39 CET 1999 Werner Koch - - * g10.c (main): check for development version now in configure - - * tdbio.c (tdbio_write_record): Add uid.validity - (tdbio_read_record) : Ditto. - (tdbio_dump_record) : Ditto. - - * keygen.c (keygen_add_std_prefs): Replaced Blowfish by Twofish, - removed MD5 and Tiger. - * pubkey-enc.c (get_it): Suppress warning about missing Blowfish - in preferences in certain cases. - - * ringedit.c (lock_rentry,unlock_rentry): New. - - * getkey.c (key_byname): Pass ret_kb down to lookup_xx. - - * armor.c (armor_filter): No output of of empty comment lines. - Add option --no-version to suppress the output of the version string. - - * getkey.c: Release the getkey context for auto context variables. - -Sun Jan 24 18:16:26 CET 1999 Werner Koch - - * getkey.c: Changed the internal design to allow simultaneous - lookup of multible user ids - (get_pubkey_bynames): New. - (get_seckey_bynames): New. - (get_seckey_next): New. - (get_seckey_end): New. - * keylist.c (list_one): Use the new functions. - - * keylist.c (list_keyblock): add a newline for normal listings. - - * g10.c (--recipient): New option name to replace --remote-user - - -Wed Jan 20 18:59:49 CET 1999 Werner Koch - - * textfilter.c: Mostly rewritten - * plaintext.c (handle_plaintext): Use now text_filter semantics. - -Tue Jan 19 19:34:58 CET 1999 Werner Koch - - * export.c (export_pubkeys_stream): New. - (do_export_stream): New. - * g10.c (aSendKeys): New command. - * hkp.c (hkp_export): New. - - * compress.c (do_uncompress): Hack for algo 1 and 1.1.3 - -Sun Jan 17 11:04:33 CET 1999 Werner Koch - - * textfilter.c (text_filter): Now uses iobuf_read_line(). - (read_line): Removed. - - * armor.c (trim_trailing_spaces): Removed and replaced - by trim_trailing_ws from libutil - -Sat Jan 16 12:03:27 CET 1999 Werner Koch - - * hkp.c (hkp_ask_import): Use only the short keyid - -Sat Jan 16 09:27:30 CET 1999 Werner Koch - - * import.c (import_key_stream): New - (import): New, moved most of import_keys here. - * g10.c: New option --keyserver - * mainproc.c (check_sig_and_print): Hook to import a pubkey. - - * pref.c pref.h : Removed - - * hkp.c hkp.h: New - -Wed Jan 13 14:10:15 CET 1999 Werner Koch - - * armor.c (radix64_read): Print an error if a bad armor was detected. - -Wed Jan 13 12:49:36 CET 1999 Werner Koch - - * armor.c (radix64_read): Now handles malformed armors produced - by some buggy MUAs. - -Tue Jan 12 11:17:18 CET 1999 Werner Koch - - * ringedit.c (find_keyblock_bysk): New. - - * skc_list.c (is_insecure): New. - (build_sk_list): usage check for insecure keys. - - * import.c (chk_self_sigs): Add handling for subkeys. - (delete_inv_parts): Skip unsigned subkeys - - * sig-check.c (do_check): Print info if the signature is older - than the key. - * keygen.c (generate_subkeypair): Fail on time warp. - * sign.c (do_sign): Ditto. - -Sun Jan 10 15:10:02 CET 1999 Werner Koch - - * armor.c (fake_packet): Fixed not-dash-escaped bug. - -Sat Jan 9 16:02:23 CET 1999 Werner Koch - - * sig-check.c (do_check): Output time diff on error - - * status.c (STATUS_VALIDSIG): New. - (is_status_enabled): New. - * mainproc.c (check_sig_and_print): Issue that status message. - - * plaintext.c (special_md_putc): Removed - - * armor.c (armor_filter): print error for truncated lines. - - * free-packet.c (free_encrypted): Revomed call to set_block_mode. - (free_plaintext): Ditto. - -Thu Jan 7 18:00:58 CET 1999 Werner Koch - - * pkclist.c (add_ownertrust): Fixed return value. - - * encr-data.c (decrypt_data): Disabled iobuf_set_limit and - iobuf_pop_filter stuff. - * compress.c (handle_compressed): Disabled iobuf_pop_filter. - - * packet.h (PKT_secret_key): Add is_primary flag. - * parse-packet.c (parse_key): Set this flag. - * passphrase.c (passphrase_to_dek): Kludge to print the primary - keyid - changed the API: keyid must now hold 2 keyids. - * getkey.c (get_primary_seckey): New. - * seckey-cert.c (do_check): pass primary keyid to passphrase query - - * tbdio.c (open_db): removed the atexit - (tdbio_set_dbname): and moved it to here. - - * armor.c: Rewrote large parts. - -Tue Dec 29 19:55:38 CET 1998 Werner Koch - - * revoke.c (gen_revoke): Removed compression. - - * pkclist.c (do_we_trust_pre): special check for revoked keys - - * trustdb.c (update_trust_record): Fixed revoke flag. - -Tue Dec 29 14:41:47 CET 1998 Werner Koch - - * misc.c (disable_core_dumps): Check for EINVAL (Atari) - - * getkey (merge_one_pk_and_selfsig): Fixed search of expiredate. - (merge_keys_and_selfsig): Ditto. - - * free-packet.c (cmp_public_keys): cmp expire only for v3 packets - (cmp_secret_keys): Ditto. - (cmp_public_secret_key): Ditto. - -Wed Dec 23 17:12:24 CET 1998 Werner Koch - - * armor.c (find_header): Reset not_dashed at every header - -Wed Dec 23 13:18:14 CET 1998 Werner Koch - - * pkclist.c (add_ownertrust): Refresh validity values. - - * trustdb.c (enum_cert_paths_print): New arg refresh. - - * ringedit.c: Fixed problems fix keyrings - * parse-packet.c (dbg_parse_packet): New debug functions. - - * getkey.c (getkey_disable_caches): New. - * import.c (import_keys): Disable caches. - -Thu Dec 17 18:31:15 CET 1998 Werner Koch - - * misc.c (trap_unaligned): Only for glibc 1 - - * sign.c (write_dash_escaped): Now escapes "From " lines - * g10.c: New option --escape-from-lines - - * trustdb.c (sort_tsl_list): New - (list_trust_path): Now prints sorted list. - (enum_cert_paths): Likewise. - (enum_cert_paths_print): New. - (print_paths): New printing format. - * pkclist.c (add_ownertrust): New arg quit. - (edit_ownertrust): New quit selection and does not query - the recipients ownertrust anymore. - (add_ownertrust): Print the ceritficate path. - - -Mon Dec 14 21:18:49 CET 1998 Werner Koch - - * parse-packet.c (parse_signature): Now checks for critical bit - (parse_sig_subpkt): Splitted. - (parse_one_sig_subpkt): New. - * sig-check.c (do_check): handle critical bit. - -Sun Dec 13 14:10:56 CET 1998 Werner Koch - - * pcklist.c (select_algo_from_prefs): Preferences should - now work (lost the != ? ) - -Thu Dec 10 20:15:36 CET 1998 Werner Koch - - * ringedit.c (gdbm_store): Fix for inserts - - * g10.c (main): New option --export-all - * export.c (export_pubkeys): New arg. - (do_export): Now may skip old keys. - - * status.c: Minor patches for Sun's cc - - * keygen.c (ask_algo): Disabled v3 ElGamal choice, rearranged - the numbers. Add a warning question when a sign+encrypt key - is selected. - - * g10.c (do_not_use_RSA): Removed. - * misc.c (print_pubkey_algo_note): New as replacement for the - do_not_use_RSA() and chnaged all callers. - (print_cipher_algo_note): New. - (print_hash_algo_note): New. - - * cipher.c (write_header): Add a call to print_cipher_algo_note. - * seckey-cert.c (protect_secret_key): Ditto - * sign.c (do_sign): Add a call to print_digest_algo_note. - - * getkey.c (get_long_user_id_string): New. - * mainproc.c (check_sig_and_print): Changed the format of the - status output. - - * encrypt.c (write_pubkey_enc_from_list): print used symmetric cipher. - - * pkclist.c (do_we_trust): Changed a message. - -Wed Dec 9 13:41:06 CET 1998 Werner Koch - - * misc.c (trap_unaligned) [ALPHA]: Only if UAC_SIGBUS is defined. - - * sign.c (write_dash_escaped): Add the forgotten patch by Brian Moore. - - * compress.c (do_uncompress): Fixed the inflating bug. - - -Tue Dec 8 13:15:16 CET 1998 Werner Koch - - * trustdb.c (upd_uid_record): Now uses the newest self-signature - (insert_trust_record): Now calls update with recheck set to true. - (register_trusted_key): New. - (verify_own_keys): Enhanced by list of trusted keys. - - * g10.c (main): Print a warning when a devel version is used. - (main): New option --trusted-key - - * import.c (merge_blocks): Fixed merging of new user ids and - added merging of subkeys. - (append_uid): Ditto. - (merge_keysig): New. - (append_key): New. - * getkey.c (merge_one_pk_and_selfsig): Get the expiration time - from the newest self-signature. - (merge_keys_and_selfsig): Ditto. - - * free-packet.c (cmp_secret_key): New. - - -Fri Nov 27 21:37:41 CET 1998 Werner Koch - - * g10.c: New option --lock-once - * tdbio.c (open_db): Add an atexit - (cleanup): New. - (tdbio_sync): Add locking. - (tdbio_end_transaction): Ditto. - (put_record_into_cache): Ditto. - * ringedit.c (keyring_copy): Ditto. - (cleanup): New. - (add_keyblock_resource): Add an atexit. - -Fri Nov 27 15:30:24 CET 1998 Werner Koch - - * armor.c (find_header): Another fix for clearsigs. - -Fri Nov 27 12:39:29 CET 1998 Werner Koch - - - * status.c (display_help): Removed. - * helptext.c: New and removed the N_() from all cpr_gets. - - -Fri Nov 20 16:54:52 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10.c (main): New option --not-dash-escaped - * sign.c (write_dashed_escaped): Ditto. - * armor.c (find_header): Support for NotDashEscaped header. - - * getkey.c: print "disabled cache.." only if verbose is used. - -Thu Nov 19 07:17:31 1998 Werner Koch - - * parse-packet.c (dump_sig_subpkt): Fixed expire listing - * getkey.c (merge_keys_and_selfsig): Fixed expire calculation. - (merge_one_pk_and_selfsig): Ditto. - * keyedit.c (menu_expire). Ditto. - * keygen.c (keygen_add_key_expire): Ditto. - (ask_expire_interval): New and changed all local function to use - this instead. - (keygen_add_key_expire): Opaque should now be a public key; - changed all callers. - - * parse.packet.c (parse): use skip_rest to skip packets. - - * keyedit.c (keyedit_menu): New arg for cmdline cmds. - -Wed Nov 18 20:33:50 1998 Werner Koch (wk@isil.d.shuttle.de) - - * trustdb.c (check_trustdb): Now rechecks all gived userids. - (collect_paths): Some fixes. - (upd_pref_records): Skips empty items, evaluate all items. - - * parse-packet.c (dump_sig_subpkt): Better listing of prefs. - (skip_packet): Now knows about marker packet - - * g10.c: removed cmd "--edit-sig". - - * pubring.asc: Updated. - -Sat Nov 14 14:01:29 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10.c (main): Changed syntax of --list-trust-path - * trustdb.c (list_trust_path): Replaced max_depth by - opt.max_cert_depth - -Fri Nov 13 07:39:58 1998 Werner Koch - - * trustdb.c (collect_paths): Removed a warning message. - (enum_trust_web): Removed. - (enum_cert_paths): New. - * pkclist.c (add_ownertrust): Changed to use enum_cert_paths. - (edit_ownertrust): Now list ceritficates on request. - (show_paths): New. - -Wed Nov 11 18:05:44 1998 Werner Koch - - * g10.c (main): New option --max-cert-depth - * tdbio.h: add new fields to ver and dir record. - * tdbio.c: read/write/dump of these fields. - (tdbio_db_matches_options): New. - * trustdb.c: replaced MAC_CERT_DEPTH by opt.max_cert_depth. - (do_check): cache validity and changed other functions - to reset the cached value. - - * keylist.c (list_one): Now lists the ownertrust. - * mainproc.c (list_node): Ditto. - -Tue Nov 10 10:08:59 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10.c (g10_exit): Now looks at the new g10_errors_seen. - * mainproc.c (check_sig_and_print): Sets g10_errors_seen. - - * *.c : i18n many more strings. - - * ringedit.c (locate_keyblock_by_keyid): Add HAVE_LIBGDBM - (locate_keyblock_by_fpr): Ditto. - - * g10.c (main): removed unsused "int errors". - (main): Add new option --charset. - - * g10.c (main): special message for the unix newbie. - -Mon Nov 9 07:17:42 1998 Werner Koch - - * getkey.c (finish_lookup): Kludge to prefere algo 16. - - * trustdb.c (new_lid_table): Clear cached item. - - * status.c (cpr_get_utf8): New. - * pkclist.c (build_pk_list): Uses this. - -Sun Nov 8 17:20:39 1998 Werner Koch (wk@isil.d.shuttle.de) - - * mainproc.c (check_sig_and_print): Why did I use strlen()-1 - in the printf? - This truncated the TZ. - -Sat Nov 7 15:57:28 1998 me,,, (wk@tobold) - - * getkey.c (lookup): Changes to support a read_next. - (get_pubkey): Fixed a memory leak. - - * keylist.c (list_one): Now lists all matching user IDs. - -Tue Nov 3 16:19:21 1998 Werner Koch (wk@isil.d.shuttle.de) - - * keygen.c (ask_user_id): Now converted to UTF-8 - - * g10.c (main): Kludge for pgp clearsigs and textmode. - -Fri Oct 30 16:40:39 1998 me,,, (wk@tobold) - - * signal.c (block_all_signals): New. - (unblock_all_signals): New - * tdbio.c (tdbio_end_transaction): Now blocks all signals. - - * trustdb.c (new_lid_table): Changed the representation of the - former local_lid_info stuff. - - * trustdb.c (update_trust_record): Reorganized the whole thing. - * sig-check.c (check_key_signature): Now handles class 0x28 - - -Wed Oct 28 18:56:33 1998 me,,, (wk@tobold) - - * export.c (do_export): Takes care of the exportable sig flag. - -Tue Oct 27 14:53:04 1998 Werner Koch (wk@isil.d.shuttle.de) - - * trustdb.c (update_trust_record): New "fast" parameter. - -Sun Oct 25 19:32:05 1998 Werner Koch (wk@isil.d.shuttle.de) - - * openfile.c (copy_options_File): New. - * ringedit.c (add_keyblock_resource): Creates options file - * tdbio.c (tdbio_set_dbname): Ditto. - -Sat Oct 24 14:10:53 1998 brian moore - - * mainproc.c (proc_pubkey_enc): Don't release the DEK - (do_proc_packets): Ditto. - -Fri Oct 23 06:49:38 1998 me,,, (wk@tobold) - - * keyedit.c (keyedit_menu): Comments are now allowed - - * trustdb.c: Rewrote large parts. - - -Thu Oct 22 15:56:45 1998 Michael Roth (mroth@nessie.de) - - * encode.c: (encode_simple): Only the plain filename without - a given directory is stored in generated packets. - (encode_crypt): Ditto. - - * sign.c: (sign_file) Ditto. - - -Thu Oct 22 10:53:41 1998 Werner Koch (wk@isil.d.shuttle.de) - - * trustdb.c (update_trust_record): Add new optional arg. - - * import.c (import_keys): Add statistics output - * trustdb.c (update_trustdb): Ditto. - (insert_trustdb): Ditto. - - * tdbio.c (tdbio_begin_transaction): New. - (tdbio_end_transaction): New. - (tdbio_cancel_transaction): New. - - * g10.c (main): New option --quit. - - * trustdb.c (check_hint_sig): No tests for user-id w/o sig. - This caused an assert while checking the sigs. - - * trustdb.c (upd_sig_record): Splitted into several functions. - - * import.c (import_keys): New arg "fast". - * g10.c (main): New command --fast-import. - -Wed Oct 21 18:19:36 1998 Michael Roth - - * ringedit.c (add_keyblock_resource): Directory is now created. - * tdbio.c (tdbio_set_dbname): New info message. - -Wed Oct 21 11:52:04 1998 Werner Koch (wk@isil.d.shuttle.de) - - * trustdb.c (update_trustdb): released keyblock in loop. - - * keylist.c (list_block): New. - (list_all): Changed to use list_block. - - * trustdb.c: Completed support for GDBM - - * sign.c (only_old_style): Changed the way force_v3 is handled - (sign_file): Ditto. - (clearsign_file): Ditto. - - * keygen.c (has_invalid_email_chars): Splitted into mailbox and - host part. - - * keylist.c (list_one): Add a merge_keys_and_selfsig. - * mainproc.c (proc_tree): Ditto. - -Sun Oct 18 11:49:03 1998 Werner Koch (wk@isil.d.shuttle.de) - - * sign.c (only_old_style): Add option force_v3_sigs - (sign_file): Fixed a bug in sig->version - (clearsign_file): Ditto. - - * parse-packet.c (dump_sig_subpkt): New - - * keyedit.c (menu_expire): New. - * free-packet.c (cmp_signatures): New - - -Sat Oct 17 10:22:39 1998 Werner Koch (wk@isil.d.shuttle.de) - - * armor.c: changed output line length from 72 to 64. - - * keyedit.c (fix_keyblock): New. - -Fri Oct 16 10:24:47 1998 Werner Koch (wk@isil.d.shuttle.de) - - * trustdb.c: Rewrote most. - * tdbio.c: Add cache and generalized hash tables. - - * options.h (ENABLE_COMMENT_PACKETS): New but undef'ed. - * encode.c, sign.c, keygen.c: Disabled comment packets. - * export.c (do_export): Comment packets are never exported, - except for those in the secret keyring. - - * g10.c (main): Removed option do-no-export-rsa; should be - be replaced by a secpial tool. - * export.c (do_export): Removed the code for the above option. - - * armor.c (find_header): Support for new only_keyblocks. - * import.c (import_keys): Only looks for keyblock armors. - - * packet.h: replaced valid_days by expiredate and changed all users. - * build-packet.c (do_public_key): calculates valid-days - (do_secret_key): Ditto. - * parse-packet.c (parse_key): expiredate is calucated from the - valid_period in v3 packets. - * keyid.c (do_fingerprint_md): calculates valid_dates. - - * keygen.c (add_key_expire): fixed key expiration time for v4 packets. - - * armor.c (find_header): A LF in the first 28 bytes - was skipped for non-armored data. - -Thu Oct 8 11:35:51 1998 Werner Koch (wk@isil.d.shuttle.de) - - * armor.c (is_armored): Add test on old comment packets. - - * tdbio.c (tdbio_search_dir_bypk): fixed memory leak. - - * getkey.c: Changed the caching algorithms. - -Wed Oct 7 19:33:28 1998 Werner Koch (wk@isil.d.shuttle.de) - - * kbnodes.c (unused_nodes): New. - -Wed Oct 7 11:15:36 1998 Werner Koch (wk@isil.d.shuttle.de) - - * keyedit.c (sign_uids): Fixed a problem with SK which could caused - a save of an unprotected key. - (menu_adduid): Ditto. - - * keyedit.c (keyedit_menu): Prefs are now correctly listed for - new user ids. - - * trustdb.c (update_trust_record): New. - (insert_trust_record): Now makes use of update_trust_record. - -Tue Oct 6 16:18:03 1998 Werner Koch (wk@isil.d.shuttle.de) - - * trustdb.c (read_record): replaces most of the tdbio_read_records. - (write_record): Ditto. - -Sat Oct 3 11:01:21 1998 Werner Koch (wk@isil.d.shuttle.de) - - * keygen.c (ask_alogo): enable ElGamal enc-only only for addmode. - -Wed Sep 30 10:15:33 1998 Werner Koch (wk@isil.d.shuttle.de) - - * import.c (import_one): Fixed update of wrong keyblock. - -Tue Sep 29 08:32:08 1998 me,,, (wk@tobold) - - * mainproc.c (proc_plaintext): Display note for special filename. - * plaintext.c (handle_plaintext): Suppress output of special file. - -Mon Sep 28 12:57:12 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10.c (verify_own_keys): Add warning if a key is not protected. - - * passphrase (hash_passphrase): Fixed iterated+salted mode and - setup for keysizes > hashsize. - - * g10.c (main): New options: --s2k-{cipher,digest,mode}. - -Fri Sep 25 09:34:23 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10.c: Chnaged some help texts. - -Tue Sep 22 19:34:39 1998 Werner Koch (wk@isil.d.shuttle.de) - - * passphrase.c (read_passphrase_from_fd): fixed bug for long - passphrases. - -Mon Sep 21 11:28:05 1998 Werner Koch (wk@(none)) - - * getkey.c (lookup): Add code to use the sub key if the primary one - does not match the usage. - - * armor.c (armor_filter): New error message: no valid data found. - (radix64_read): Changes to support multiple messages. - (i18n.h): New. - * mainproc.c (add_onepass_sig): bug fix. - -Mon Sep 21 08:03:16 1998 Werner Koch (wk@isil.d.shuttle.de) - - * pkclist.c (do_we_trust): Add keyid to most messages. - - * passphrase.c (read_passphrase_from_fd): New. - (have_static_passphrase): New - (get_passphrase_fd): Removed. - (set_passphrase_fd): Removed. - * g10.c (main): passphrase is now read here. - - * keyedit.c (keyedit_menu): "help" texts should now translate fine. - -Mon Sep 21 06:40:02 1998 Werner Koch (wk@isil.d.shuttle.de) - - * encode.c (encode_simple): Now disables compression - when --rfc1991 is used. - (encode_crypt): Ditto. - -Fri Sep 18 16:50:32 1998 Werner Koch (wk@isil.d.shuttle.de) - - * getkey.c (merge_key_and_selfsig): New. - -Fri Sep 18 10:20:11 1998 Werner Koch (wk@isil.d.shuttle.de) - - * pkclist.c (select_algo_from_prefs): Removed 3DES kludge. - - * seskey.c (make_session_key): Fixed SERIOUS bug introduced - by adding the weak key detection code. - - * sign.c (sign_file): Changed aremor header in certain cases. - -Tue Sep 15 17:52:55 1998 Werner Koch (wk@isil.d.shuttle.de) - - * mainproc.c (check_sig_and_print): Replaced ascime by asctimestamp. - -Mon Sep 14 11:40:52 1998 Werner Koch (wk@isil.d.shuttle.de) - - * seskey.c (make_session_key): Now detects weak keys. - - * trustdb (clear_trust_checked_flag): New. - - * plaintext.c (handle_plaintext): Does no anymore suppress CR from - cleartext signed messages. - -Sun Sep 13 12:54:29 1998 Werner Koch (wk@isil.d.shuttle.de) - - * trustdb.c (insert_trust_record): Fixed a stupid bug in the free - liunked list loops. - -Sat Sep 12 15:49:16 1998 Werner Koch (wk@isil.d.shuttle.de) - - * status.c (remove_shmid): New. - (init_shm_comprocess): Now sets permission to the real uid. - -Wed Sep 9 11:15:03 1998 Werner Koch (wk@isil.d.shuttle.de) - - * packet.h (PKT_pubkey_enc): New flah throw_keyid, and add logic to - implement it. - * g10.c (main): New Option --throw-keyid - - * getkey.c (enum_secret_keys): Add new ar and changed all callers. - -Tue Sep 8 20:04:09 1998 Werner Koch (wk@isil.d.shuttle.de) - - * delkey.c (delete_key): Moved from keyedit.c. - -Mon Sep 7 16:37:52 1998 Werner Koch (wk@isil.d.shuttle.de) - - * build-packet.c (calc_length_header): New arg new_ctb to correctly - calculate the length of new style packets. - - * armor.c (is_armored): Checks for symkey_enc packets. - - * pkclist.c (select_algo_from_prefs): 3DEs substitute is now CAST5. - -Tue Aug 11 17:54:50 1998 Werner Koch (wk@isil.d.shuttle.de) - - * build-packet.c (do_secret_key): Fixed handling of old keys. - - * getkey.c (compare_name): Fixed exact and email matching - - * openfile.c (open_outfile): Changed arguments and all callers. - -Tue Aug 11 09:14:35 1998 Werner Koch (wk@isil.d.shuttle.de) - - * encode.c (encode_simple): Applied option set-filename and comment. - (encode_crypt): Ditto. - * sign.c (sign_file): Ditto. - * armor.c (armor_filter): Applied option comment. - - * encode.c (encode_crypt): Moved init_packet to the begin. - (encode_simple): add an init_packet(). - - * comment (write_comment): Now enforces a hash sign as the 1st byte. - - * import.c (import_one): Add explanation for "no user ids". - - * compress.c (do_uncompress): Applied Brian Warner's patch to support - zlib 1.1.3 etc. - - * trustdb.c (check_trust): Fixed a problem after inserting new keys. - - * getkey (lookup): do not return the primary key if usage is given - (lookup_sk): Ditto and take usage into account. - - * status.c (cpr_get_answer_is_yes): add display_help. - -Mon Aug 10 10:11:28 1998 Werner Koch (wk@isil.d.shuttle.de) - - * getkey.c (lookup_sk): Now always returns the primary if arg - primary is true. - (lookup): Likewise. - (get_pubkey_byname): Now returns the primary key - (get_seckey_byname): Ditto. - - -Mon Aug 10 08:34:03 1998 Werner Koch (wk@isil.d.shuttle.de) - - * keyid.c (pubkey_letter): ELG_E is now a small g. - -Sat Aug 8 17:26:12 1998 Werner Koch (wk@isil.d.shuttle.de) - - * openfile (overwrite_filep): Changed semantics and all callers. - -Sat Aug 8 12:17:07 1998 Werner Koch (wk@isil.d.shuttle.de) - - * status.c (display_help): New. - -Thu Aug 6 16:30:41 1998 Werner Koch,mobil,,, (wk@tobold) - - * seskey.c (encode_session_key): Now uses get_random_bits(). - -Thu Aug 6 07:34:56 1998 Werner Koch,mobil,,, (wk@tobold) - - * ringedit.c (keyring_copy): No more backupfiles for - secret keyrings and add additional warning in case of - a failed secret keyring operation. - -Wed Aug 5 11:54:37 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10.c (check_opts): Moved to main. Changed def_cipher_algo - semantics and chnaged all users. - - * pubkey-enc.c (get_sssion_key): New informational output - about preferences. - - * parse-packet.c (parse_symkeyenc): Fixed salted+iterated S2K - (parse_key): Ditto. - * build-packet.c (do_secret_key): Ditto. - (do_symkey_enc): Ditto. - -Tue Aug 4 08:59:10 1998 Werner Koch (wk@isil.d.shuttle.de) - - * getkey.c (enum_secret_keys): Now returns only primary keys. - - * getkey (lookup): Now sets the new namehash field. - - * parse-packet.c (parse_sig_subpkt2): New. - - * sign.c (sign_file): one-pass sigs are now emiited reverse. - Preference data is considered when selecting the compress algo. - -Wed Jul 29 12:53:03 1998 Werner Koch (wk@isil.d.shuttle.de) - - * free-packet.c (copy_signature): New. - - * keygen.c (generate_subkeypair): rewritten - * g10.c (aKeyadd): Removed option --add-key - -Mon Jul 27 10:37:28 1998 Werner Koch (wk@isil.d.shuttle.de) - - * seckey-cert.c (do_check): Additional check on cipher blocksize. - (protect_secret_key): Ditto. - * encr-data.c: Support for other blocksizes. - * cipher.c (write_header): Ditto. - -Fri Jul 24 16:47:59 1998 Werner Koch (wk@isil.d.shuttle.de) - - * kbnode.c (insert_kbnode): Changed semantics and all callers. - * keyedit.c : More or less a complete rewrite - -Wed Jul 22 17:10:04 1998 Werner Koch (wk@isil.d.shuttle.de) - - * build-packet.c (write_sign_packet_header): New. - -Tue Jul 21 14:37:09 1998 Werner Koch (wk@isil.d.shuttle.de) - - * import.c (import_one): Now creates a trustdb record. - - * g10.c (main): New command --check-trustdb - -Mon Jul 20 11:15:07 1998 Werner Koch (wk@isil.d.shuttle.de) - - * genkey.c (generate_keypair): Default key is now DSA with - encryption only ElGamal subkey. - -Thu Jul 16 10:58:33 1998 Werner Koch (wk@isil.d.shuttle.de) - - * keyid.c (keyid_from_fingerprint): New. - * getkey.c (get_pubkey_byfprint): New. - -Tue Jul 14 18:09:51 1998 Werner Koch (wk@isil.d.shuttle.de) - - * keyid.c (fingerprint_from_pk): Add argument and changed all callers. - (fingerprint_from_sk): Ditto. - -Tue Jul 14 10:10:03 1998 Werner Koch (wk@isil.d.shuttle.de) - - * plaintext.c (handle_plaintext): Now returns create error if - the file could not be created or the user responded not to overwrite - the file. - * mainproc.c (proc_plaintext): Tries again if the file could not - be created to check the signature without output. - - * misc.c (disable_core_dumps): New. - * g10.c (main): disable coredumps for gpg - - * g10.c (MAINTAINER_OPTIONS): New to disable some options - -Mon Jul 13 16:47:54 1998 Werner Koch (wk@isil.d.shuttle.de) - - * plaintext.c (hash_datafiles): New arg for better support of - detached sigs. Changed all callers. - * mainproc.c (proc_signature_packets): Ditto. - - * g10.c (main): New option "compress-sigs" - * sig.c (sign_file): detached signatures are not anymore compressed - unless the option --compress-sigs is used. - -Thu Jul 9 19:54:54 1998 Werner Koch (wk@isil.d.shuttle.de) - - * armor.c: Fixes to allow zero length cleartext signatures - -Thu Jul 9 14:52:47 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10.c (build_list): Now drops setuid. - (main): Changed the way keyrings and algorithms are registered . - -Wed Jul 8 14:17:30 1998 Werner Koch (wk@isil.d.shuttle.de) - - * packet.h (PKT_public_key): Add field keyid. - * parse-packet.c (parse_key): Reset the above field. - * keyid.c (keyid_from_pk): Use above field as cache. - - * tdbio.c, tdbio.h: New - * trustdb.c: Moved some functions to tdbio.c. - (print_keyid): New. - - * pkclist.c (check_signatures_trust): New. - -Wed Jul 8 10:45:28 1998 Werner Koch (wk@isil.d.shuttle.de) - - * plaintext.c (special_md_putc): New. - (handle_plaintext): add clearsig argument - * mainproc.c (proc_plaintext): detection of clearsig - * sign.c (write_dased_escaped): Changed clearsig format - -Tue Jul 7 18:56:19 1998 Werner Koch (wk@isil.d.shuttle.de) - - * armor.c (find_header): Now makes sure that there is only one - empty line for clearsigs, as this is what OP now says. - -Mon Jul 6 13:09:07 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10.c (main): New option default-secret-key - * getkey.c (get_seckey_byname): support for this option. - -Mon Jul 6 09:03:49 1998 Werner Koch (wk@isil.d.shuttle.de) - - * getkey.c (add_keyring): Keyrings are now added to end of the - list of keyrings. The first added keyringwill be created. - (add_secret_keyring): Likewise. - - * ringedit.c (add_keyblock_resource): Files are created here. - - * g10.c (aNOP): Removed - - * getkey.c (lookup): Add checking of usage for name lookups - * packet.h (pubkey_usage): Add a field which may be used to store - usage capabilities. - * pkclist.c (build_pk_list): getkey now called with usage arg. - * skclist.c (build_sk_list): Ditto. - - * sign.c (clearsign_file): Fixed "Hash:" headers - -Sat Jul 4 13:33:31 1998 Werner Koch (wk@isil.d.shuttle.de) - - * trustdb.c (list_ownertrust): New. - * g10.c (aListOwnerTrust): New. - - * g10.c (def_pubkey_algo): Removed. - - * trustdb.c (verify_private_data): Removed and also the call to it. - (sign_private_data): Removed. - -Fri Jul 3 13:26:10 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10.c (aEditKey): was aEditSig. Changed usage msg. - - * keyedit.c: Done some i18n stuff. - - * g10.c (do_not_use_RSA): New. - * sign.c (do_sign): Add call to above function. - * encode.c (write_pubkey_enc_from_list): Ditto. - -Thu Jul 2 21:01:25 1998 Werner Koch (wk@isil.d.shuttle.de) - - * parse-packet.c: Now is able sto store data of unknown - algorithms. - * free-packet.c: Support for this. - * build-packet.c: Can write data of packet with unknown algos. - -Thu Jul 2 11:46:36 1998 Werner Koch (wk@isil.d.shuttle.de) - - * parse-packet.c (parse): fixed 4 byte length header - -Wed Jul 1 12:36:55 1998 Werner Koch (wk@isil.d.shuttle.de) - - * packet.h (new_ctb): New field for some packets - * build-packet.c (build_packet): Support for new_ctb - * parse-packet.c (parse): Ditto. - -Mon Jun 29 12:54:45 1998 Werner Koch (wk@isil.d.shuttle.de) - - * packet.h: changed all "_cert" to "_key", "subcert" to "subkey". - - * free-packet.c (free_packet): Removed memory leak for subkeys. - -Sun Jun 28 18:32:27 1998 Werner Koch (wk@isil.d.shuttle.de) - - * import.c (import_keys): Renamed from import_pubkeys. - (import_secret_one): New. - - * g10.c (aExportSecret): New. - - * export.c (export_seckeys): New. - - * parse-packet.c (parse_certificate): Cleaned up. - (parse_packet): Trust packets are now considered as unknown. - (parse_pubkey_warning): New. - -Fri Jun 26 10:37:35 1998 Werner Koch (wk@isil.d.shuttle.de) - - * keygen.c (has_invalid_email_chars): New. - -Wed Jun 24 16:40:22 1998 Werner Koch (wk@isil.d.shuttle.de) - - * armor.c (armor_filter): Now creates valid onepass_sig packets - with all detected hash algorithms. - * mainproc.c (proc_plaintext): Now uses the hash algos as specified - in the onepass_sig packets (if there are any) - -Mon Jun 22 11:54:08 1998 Werner Koch (wk@isil.d.shuttle.de) - - * plaintext.c (handle_plaintext): add arg to disable outout - * mainproc.c (proc_plaintext): disable output when in sigs_only mode. - -Thu Jun 18 13:17:27 1998 Werner Koch (wk@isil.d.shuttle.de) - - * keygen.c: Removed all rsa packet stuff, chnaged defaults - for key generation. - -Sun Jun 14 21:28:31 1998 Werner Koch (wk@isil.d.shuttle.de) - - * misc.c (checksum_u16): Fixed a stupid bug which caused a - wrong checksum calculation for the secret key protection and - add a backward compatibility option. - * g10.c (main): Add option --emulate-checksum-bug. - -Thu Jun 11 13:26:44 1998 Werner Koch (wk@isil.d.shuttle.de) - - * packet.h: Major changes to the structure of public key material - which is now stored in an array and not anaymore in a union of - algorithm specific structures. These is needed to make the system - more extendable and makes a lot of stuff much simpler. Changed - all over the system. - - * dsa.c, rsa.c, elg.c: Removed. - -Wed Jun 10 07:22:02 1998 Werner Koch,mobil,,, (wk@tobold) - - * g10.c ("load-extension"): New option. - -Mon Jun 8 22:23:37 1998 Werner Koch (wk@isil.d.shuttle.de) - - * seckey-cert.c (do_check): Removed cipher constants - (protect_secret_key): Ditto. - -Fri May 29 10:00:28 1998 Werner Koch (wk@isil.d.shuttle.de) - - * trustdb.c (query_trust_info): New. - * keylist.c (list_one): Add output of trust info - * mainproc (list_node): ditto. - * g10.c (main): full trustdb init if -with-colons and any of the - key list modes. - -Thu May 28 10:34:42 1998 Werner Koch (wk@isil.d.shuttle.de) - - * status.c (STATUS_RSA_OR_IDEA): New. - * sig-check.c (check_signature): Output special status message. - * pubkey-enc.c (get_session_key): Ditto. - - * mainproc.c (check_sig_and_print): Changed format of output. - * passpharse.c (passphrase_to_dek): Likewise. - -Wed May 27 13:46:48 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10.c (aListSecretKeys): New option --list-secret-keys - * keylist.c (std_key_list): Renamed to public_key_list. - (secret_key_list): New - (list_one, list_all): Add support for secret keys. - * getkey.c (get_secret_keyring): New. - * mainproc.c (list_node): Add option --with-colons for secret keys - - * sig-check.c (check_key_signature): detection of selfsigs - * mainproc.c (list_node): fixed listing. - - * g10.c (aListSecretKeys): New option --always-trust - * pkclist.c (do_we_trust): Override per option added - - * status.c (write_status_text): Add a prefix to every output line. - -Wed May 27 07:49:21 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10 (--compress-keys): New. - * options.h (compress_keys): New. - * export.c (export_pubkeys): Only compresses with the new option. - -Tue May 26 11:24:33 1998 Werner Koch (wk@isil.d.shuttle.de) - - * passphrase.c (get_last_passphrase): New - (set_next_passphrase): New. - (passphrase_to_dek): add support for the above functions. - * keyedit.c (make_keysig_packet): Add sigclass 0x18, - changed all callers due to a new argument. - * keygen.c (write_keybinding): New - (generate_subkeypair): Add functionality - (ask_algo, ask_keysize, ask_valid_days): Broke out of generate_keypair - (ask_user_id, ask_passphrase): Ditto. - -Thu May 21 11:26:13 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10.c,gpgd.c (main): Does now return an int, so that egcs does - not complain. - - * armor.c (fake_packet): Removed erro message and add a noticed - that this part should be fixed. - - * sign.c (sign_file): Compression now comes in front of encryption. - * encode.c (encode_simple): Ditto. - (encode_crypt): Ditto. - -Tue May 19 16:18:19 1998 Werner Koch (wk@isil.d.shuttle.de) - - * armor.c (fake_packet): Changed assertion to log_error - -Sat May 16 16:02:06 1998 Werner Koch (wk@isil.d.shuttle.de) - - * build-packet.c (build_packet): Add SUBKEY packets. - -Fri May 15 17:57:23 1998 Werner Koch (wk@isil.d.shuttle.de) - - * sign.c (hash_for): New and used in all places here. - * main.h (DEFAULT_): new macros. - * g10.c (opt.def_digest_algo): Now set to 0 - - * compress.c (init_compress): Add support for algo 1 - * options.h (def_compress_algo): New - * g10.c (main): New option --compress-algo - -Fri May 15 13:23:59 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10.c (print_mds): New feature to print only one hash, - chnaged formatting. - -Thu May 14 15:36:24 1998 Werner Koch (wk@isil.d.shuttle.de) - - * misc.c (trap_unaligned) [__alpha__]: New - * g10.c (trap_unaligned): Add call to this to track down SIGBUS - on Alphas (to avoid the slow emulation code). - -Wed May 13 11:48:27 1998 Werner Koch (wk@isil.d.shuttle.de) - - * build-packet.c (do_signature): Support for v4 pakets. - * keyedit.c (make_keysig_packet): Ditto. - * build-packet.c (build_sig_subpkt_from_sig): New. - (build_sig_subpkt): New. - - * elg.c (g10_elg_sign): removed keyid_from_skc. - * dsa.c (g10_dsa_sign): Ditto. - * rsa.c (g10_rsa_sign): Ditto. - * keyedit.c (make_keysig_packet): Add call to keyid_from_skc - - * sign.c (clearsign_file): Support for v4 signatures. - (sign_file): Ditto. - -Wed May 6 09:31:24 1998 Werner Koch (wk@isil.d.shuttle.de) - - * parse-packet.c (do_parse): add support for 5 byte length leader. - (parse_subpkt): Ditto. - * build-packet.c (write_new_header): Ditto. - - * packet.h (SIGSUBPKT_): New constants. - * parse-packet.c (parse_sig_subpkt): Changed name, made global, - and arg to return packet length, chnaged all callers - - -Tue May 5 22:11:59 1998 Werner Koch (wk@isil.d.shuttle.de) - - * keygen.c (gen_dsa): New. - * build_packet.c (do_secret_cert): Support for DSA - -Mon May 4 19:01:25 1998 Werner Koch (wk@isil.d.shuttle.de) - - * compress.c: doubled buffer sizes - * parse-packet.c (do_plaintext): now uses iobuf_read/write. - -Mon May 4 09:35:53 1998 Werner Koch (wk@isil.d.shuttle.de) - - * seskey.c (encode_md_value): Add optional argument hash_algo, - changed all callers. - - * passphrase.c (make_dek_from_passphrase): Removed - * (get_passhrase_hash): Changed name to passphrase_to_dek, add arg, - changed all callers. - - * all: Introduced the new ELG identifier and added support for the - encryption only one (which is okay to use by GNUPG for signatures). - -Sun May 3 17:50:26 1998 Werner Koch (wk@isil.d.shuttle.de) - - * packet.h (PKT_OLD_COMMENT): New name for type 16. - * parse-packet.c (parse_comment): Now uses type 61 - -Fri May 1 12:44:39 1998 Werner Koch,mobil,,, (wk@tobold) - - * packet.h (count): Chnaged s2k count from byte to u32. - * seckey-cert.c (do_check): Changed s2k algo 3 to 4, changed - reading of count. - * build-packet.c (do_secret_cert): ditto. - * parse-packet.c (parse_certificate): ditto. - - * parse-packet.c (parse_symkeyenc): New. - * build-packet.c (do_symkey_enc): New. - -Thu Apr 30 16:33:34 1998 Werner Koch (wk@isil.d.shuttle.de) - - * sign.c (clearsign_file): Fixed "Hash: " armor line. - -Tue Apr 28 14:27:42 1998 Werner Koch (wk@isil.d.shuttle.de) - - * parse-packet.c (parse_subpkt): Some new types. - -Mon Apr 27 12:53:59 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10.c (main): Add option --skip-verify. - * mainproc.c (check_sig_and_print): Ditto. - - * g10.c (print_mds): Add output for Tiger. - - * sign.c (sign_file): Now uses partial length headers if used - in canonical textmode (kludge to fix a bug). - - * parse-packet.c (parse_certificate): Changed BLOWFISH id. - * pubkey-enc.c (get_session_key): Ditto. - * seskey.c (make_session_key): Ditto. - * seckey-cert.c (protect_secret_key,do_check): Add BLOWFISH160. - -Fri Apr 24 17:38:48 1998 Werner Koch,mobil,,, (wk@tobold) - - * sig-check.c (check_key_signature): Add sig-class 0x14..0x17 - * keyedit.c (sign-key): Some changes to start with support of - the above new sig-classes. - -Wed Apr 22 09:01:57 1998 Werner Koch,mobil,,, (wk@tobold) - - * getkey.c (compare_name): add email matching - -Tue Apr 21 16:17:12 1998 Werner Koch,mobil,,, (wk@tobold) - - * armor.c (armor_filter): fixed missing last LF before CSUM. - -Thu Apr 9 11:35:22 1998 Werner Koch (wk@isil.d.shuttle.de) - - * seckey-cert.c (do_check): New; combines all the check functions - into one. - - * sign.c: removed all key management functions - * keyedit.c: New. - -Thu Apr 9 09:49:36 1998 Werner Koch (wk@isil.d.shuttle.de) - - * import.c (chk_self_sigs): Changed an error message. - -Wed Apr 8 16:19:39 1998 Werner Koch (wk@isil.d.shuttle.de) - - * packet.h: packet structs now uses structs from the pubkey, - removed all copy operations from packet to pubkey structs. - -Wed Apr 8 13:40:33 1998 Werner Koch (wk@isil.d.shuttle.de) - - * trustdb.c (verify_own_certs): Fixed "public key not found". - - * getkey.c (key_byname): New, combines public and secret key search. - - * pkclist.c (build_pkc_list): Add new arg usage, changed all callers. - * skclist.c (build_skc_list): Likewise. - - * ringedit.c (find_keyblock, keyring_search2): Removed. - -Wed Apr 8 09:47:21 1998 Werner Koch (wk@isil.d.shuttle.de) - - * sig-check.c (do_check): Applied small fix from Ulf Möller. - -Tue Apr 7 19:28:07 1998 Werner Koch (wk@isil.d.shuttle.de) - - * cipher.c, encr-data.c, seckey-cert.c: Now uses cipher_xxxx - functions instead of blowfish_xxx or cast_xxx - -Tue Apr 7 11:04:02 1998 Werner Koch (wk@isil.d.shuttle.de) - - * Makefile.am (g10maint.o): Changed the way it is created. - -Mon Apr 6 11:17:08 1998 Werner Koch (wk@isil.d.shuttle.de) - - * misc.c: New. - * keygen.c (checksum,checksum_u16,checksum_mpi): Moved to misc.c - * seckey-cert.c: Kludge for wrong ELG checksum implementation. - -Sat Apr 4 20:07:01 1998 Werner Koch (wk@isil.d.shuttle.de) - - * cipher.c (cipher_filter): Support for CAST5 - * encr-data.c (decode_filter): Ditto. - (decrypt_data): Ditto. - * seskey.c (make_session_key): Ditto. - * seckey-cert.c (check_elg, check_dsa): Ditto, - (protect_secret_key): Ditto. - * pubkey-enc.c (get_session_key): Ditto. - * passphrase.c (hash_passphrase): Ditto. - -Thu Apr 2 20:22:35 1998 Werner Koch (wk@isil.d.shuttle.de) - - * gpgd.c: New - -Thu Apr 2 10:38:16 1998 Werner Koch (wk@isil.d.shuttle.de) - - * keygen.c (generate_keypair): Add valid_days stuff. - * trustdb.c (check_trust): Add check for valid_days. - -Wed Apr 1 16:15:58 1998 Werner Koch (wk@isil.d.shuttle.de) - - * keygen.c (generate_keypair): Addional question whether the - selected large keysize is really needed. - -Wed Apr 1 15:56:33 1998 Werner Koch (wk@isil.d.shuttle.de) - - * seckey-cert.c (protect_secret_key): merged protect_xxx to here. - -Wed Apr 1 10:34:46 1998 Werner Koch (wk@isil.d.shuttle.de) - - * Makefile.am (g10maint.c): Changed creation rule, so that it works - on FreeBSD (missing CFLAGS). - - * parse-packet.c (parse_subkey): Removed. - -Thu Mar 19 15:22:36 1998 Werner Koch (wk@isil.d.shuttle.de) - - * ringedit.c (keyring_enum): Fixed problem with reading too - many packets. Add support to read secret keyrings. - - * getkey.c (scan_keyring): Removed - (lookup): New to replace scan_keyring. - (scan_secret_keyring): Removed. - (lookup_skc): New. - -Wed Mar 18 11:47:34 1998 Werner Koch (wk@isil.d.shuttle.de) - - * ringedit.c (enum_keyblocks): New read mode 11. - - * keyid.c (elg_fingerprint_md): New and changed all other functions - to call this if the packet version is 4 or above. - -Tue Mar 17 20:46:16 1998 Werner Koch (wk@isil.d.shuttle.de) - - * parse-packet.c (parse_certificate): Add listing support for subkeys. - -Tue Mar 17 20:32:22 1998 Werner Koch (wk@isil.d.shuttle.de) - - * armor.c (is_armored): Allow marker packet. - -Thu Mar 12 13:36:49 1998 Werner Koch (wk@isil.d.shuttle.de) - - * trustdb.c (check_trust): Checks timestamp of pubkey. - * sig-check. (do_check): Compares timestamps. - -Tue Mar 10 17:01:56 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10.c (main): Add call to init_signals. - * signal.c: New. - -Mon Mar 9 12:43:42 1998 Werner Koch (wk@isil.d.shuttle.de) - - * dsa.c: New - * packet.h, free-packet.c, parse-packet.c : Add support for DSA - * sig-check.c, getkey.c, keyid.c, ringedit.c: Ditto. - * seckey-cert.c: Ditto. - - * packet.h : Moved .digest_algo of signature packets to outer - structure. Changed all references - -Sun Mar 8 13:06:42 1998 Werner Koch (wk@isil.d.shuttle.de) - - * openfile.c : Support for stdout filename "-". - - * mainproc.c (check_sig_and_print): Enhanced status output: - * status.c (write_status_text): New. - -Fri Mar 6 16:10:54 1998 Werner Koch (wk@isil.d.shuttle.de) - - * kbnode.c (clone_kbnode): Fixed private_flag. - - * mainproc.c (list_node): Output of string "Revoked" as user-id. - -Fri Mar 6 14:26:39 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10.c (main): Add userids to "-kv" and cleaned up this stuff. - -Fri Mar 6 12:45:58 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10.c (main): Changed semantics of the list-... commands - and added a new one. Removed option "-d" - - * decrypt.c: New. - - * trustdb.c (init_trustdb): Autocreate directory only if it ends - in "/.gnupg". - -Thu Mar 5 12:12:11 1998 Werner Koch (wk@isil.d.shuttle.de) - - * mainproc.c (do_proc_packets): New. Common part of proc_packet. - (proc_signature_packets): special version to handle signature data. - * verify.c: New. - * g10.c (aVerify): New. - * plaintext.c (hash_datafiles): New. - * compress.c (handle_compressed): Add callback arg, changed caller. - -Thu Mar 5 10:20:06 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10.c: Is nom the common source for gpg and gpgm - * g10maint.c: Removed - * Makefile.am: Add rule to build g10maint.c - -Thu Mar 5 08:43:59 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10.c (main): Changed the way clear text sigs are faked. - -Wed Mar 4 19:47:37 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10maint.c (aMuttKeyList): New - * keylist.c: New. - -Wed Mar 4 17:20:33 1998 Werner Koch (wk@isil.d.shuttle.de) - - * getkey.c (get_pubkey_byname): Kludge to allow 0x prefix. - -Tue Mar 3 13:46:55 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10maint.c (main): New option --gen-random. - -Tue Mar 3 09:50:08 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10.c (aDeleteSecretKey): New. - (aEditSig): Add option "--edit-key" as synonym for "--edit-sig". - (aDeleteSecretKey): New. - * getkey.c (seckey_available): New. - * sign.c (delete_key): Enhanced to delete secret keys, changed all - callers. - -Mon Mar 2 21:23:48 1998 Werner Koch (wk@isil.d.shuttle.de) - - * pkc_list.c (build_pkc_list): Add interactive input of user ID. - -Mon Mar 2 20:54:05 1998 Werner Koch (wk@isil.d.shuttle.de) - - * pkclist.c (do_we_trust_pre): New. - (add_ownertrust): Add message. - * trustdb.c (enum_trust_web): Quick fix. - -Mon Mar 2 13:50:53 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10.c (main): New action aDeleteKey - * sign.c (delete_key): New. - -Sun Mar 1 16:38:58 1998 Werner Koch (wk@isil.d.shuttle.de) - - * trustdb.c (do_check): No returns TRUST_UNDEFINED instead of - eof error. - -Fri Feb 27 18:14:03 1998 Werner Koch (wk@isil.d.shuttle.de) - - * armor.c (find_header): Removed trailing CR on headers. - -Fri Feb 27 18:02:48 1998 Werner Koch (wk@isil.d.shuttle.de) - - * ringedit.c (keyring_search) [MINGW32]: Open and close file here - because rename does not work on open files. Chnaged callers. - -Fri Feb 27 16:43:11 1998 Werner Koch (wk@isil.d.shuttle.de) - - * sig-check.c (do_check): Add an md_enable. - * mainproc.c (do_check_sig): Use md_open in case of detached sig - (proc_tree): Take detached sigs into account. - -Fri Feb 27 15:22:46 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10.c (main): Make use of GNUPGHOME envvar. - * g10main.c (main): Ditto. - -Wed Feb 25 11:40:04 1998 Werner Koch (wk@isil.d.shuttle.de) - - * plaintext.c (ask_for_detached_datafile): add opt.verbose to - info output. - - * openfile.c (open_sigfile): Try also name ending in ".asc" - -Wed Feb 25 08:41:00 1998 Werner Koch (wk@isil.d.shuttle.de) - - * keygen.c (generate_keypair): Fixed memory overflow. - -Tue Feb 24 15:51:55 1998 Werner Koch (wk@isil.d.shuttle.de) - - * parse-packet.c (parse_certificate): Support for S2K. - * build-packet.c (do_secret_cert): Ditto. - * keygen.c (gen_elg): Ditto. - * seckey-cert.c (check_elg): Ditto - (protect_elg): Ditto. - * sign.c (chnage_passphrase): Ditto. - * passphrase.c (get_passphrase_hash): Support for a salt and - changed all callers. - (make_dek_from_passphrase): Ditto. - -Tue Feb 24 12:30:56 1998 Werner Koch (wk@isil.d.shuttle.de) - - * build-packet.c (hash_public_cert): Disabled debug output. - -Fri Feb 20 17:22:28 1998 Werner Koch (wk@isil.d.shuttle.de) - - * trustdb.c (init_trustdb) [MINGW32]: Removed 2nd mkdir arg. - (keyring_copy) [MINGW32]: Add a remove prior to the renames. - -Wed Feb 18 18:39:02 1998 Werner Koch (wk@isil.d.shuttle.de) - - * Makefile.am (OMIT_DEPENDENCIES): New. - - * rsa.c: Replaced log_bug by BUG. - -Wed Feb 18 13:35:58 1998 Werner Koch (wk@isil.d.shuttle.de) - - * mainproc.c (do_check_sig): Now uses hash_public_cert. - * parse-packet.c (parse_certificate): Removed hashing. - * packet.h (public_cert): Removed hash variable. - * free-packet.c (copy_public_cert, free_public_cert): Likewise. - - * sig-check.c (check_key_signatures): Changed semantics. - -Wed Feb 18 12:11:28 1998 Werner Koch (wk@isil.d.shuttle.de) - - * trustdb.c (do_check): Add handling for revocation certificates. - (build_sigrecs): Ditto. - (check_sigs): Ditto. - -Wed Feb 18 09:31:04 1998 Werner Koch (wk@isil.d.shuttle.de) - - * armor.c (armor_filter): Add afx->hdrlines. - * revoke.c (gen_revoke): Add comment line. - * dearmor.c (enarmor_file): Ditto. - - * sig-check.c (check_key_signature): Add handling for class 0x20. - * mainproc.c : Ditto. - -Tue Feb 17 21:24:17 1998 Werner Koch (wk@isil.d.shuttle.de) - - * armor.c : Add header lines "...ARMORED FILE .." - * dearmor.c (enarmor_file): New. - * g10maint.c (main): New option "--enarmor" - -Tue Feb 17 19:03:33 1998 Werner Koch (wk@isil.d.shuttle.de) - - * mainproc.c : Changed a lot, because the packets are now stored - a simple linlked list and not anymore in a complicatd tree structure. - -Tue Feb 17 10:14:48 1998 Werner Koch (wk@isil.d.shuttle.de) - - * free_packet.c (cmp_public_certs): New. - (cmp_user_ids): New. - - * kbnode.c (clone_kbnode): New. - (release_kbnode): Add clone support. - - * ringedit.c (find_keyblock_bypkc): New. - - * sign.c (remove_keysigs): Self signatures are now skipped, - changed arguments and all callers. - - * import.c : Add functionality. - -Tue Feb 17 09:31:40 1998 Werner Koch (wk@isil.d.shuttle.de) - - * options.h (homedir): New option. - * g10.c, g10maint.c, getkey.c, keygen.c, trustdb.c (opt.homedir): New. - - * trustdb.c (init_trustdb): mkdir for hoem directory - (sign_private_data): Renamed "sig" to "g10.sig" - -Mon Feb 16 20:02:03 1998 Werner Koch (wk@isil.d.shuttle.de) - - * kbnode.c (commit_kbnode): New. - (delete_kbnode): removed unused first arg. Changed all Callers. - - * ringedit.c (keyblock_resource_name): New. - (get_keyblock_handle): NULL for filename returns default resource. - -Mon Feb 16 19:38:48 1998 Werner Koch (wk@isil.d.shuttle.de) - - * sig-check.s (check_key_signature): Now uses the supplied - public key to check the signature and not any more the one - from the getkey.c - (do_check): New. - (check_signature): Most work moved to do_check. - -Mon Feb 16 14:48:57 1998 Werner Koch (wk@isil.d.shuttle.de) - - * armor.c (find_header): Fixed another bug. - -Mon Feb 16 12:18:34 1998 Werner Koch (wk@isil.d.shuttle.de) - - * getkey.c (scan_keyring): Add handling of compressed keyrings. - -Mon Feb 16 10:44:51 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10.c, g10maint.c (strusage): Rewrote. - (build_list): New - -Mon Feb 16 08:58:41 1998 Werner Koch (wk@isil.d.shuttle.de) - - * armor.c (use_armor): New. - -Sat Feb 14 14:30:57 1998 Werner Koch (wk@isil.d.shuttle.de) - - * mainproc.c (proc_tree): Sigclass fix. - -Sat Feb 14 14:16:33 1998 Werner Koch (wk@isil.d.shuttle.de) - - * armor.c (armor_filter): Changed version and comment string. - * encode.c, sign.c, keygen.c: Changed all comment packet strings. - -Sat Feb 14 12:39:24 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10.c (aGenRevoke): New command. - * revoke.c: New. - * sign.c (make_keysig_packet): Add support for sigclass 0x20. - -Fri Feb 13 20:18:14 1998 Werner Koch (wk@isil.d.shuttle.de) - - * ringedit.c (enum_keyblocks, keyring_enum): New. - -Fri Feb 13 19:33:40 1998 Werner Koch (wk@isil.d.shuttle.de) - - * export.c: Add functionality. - - * keygen.c (generate_keypair): Moved the leading comment behind the - key packet. - * kbnode.c (walk_kbnode): Fixed. - - * g10.c (main): listing armored keys now work. - -Fri Feb 13 16:17:43 1998 Werner Koch (wk@isil.d.shuttle.de) - - * parse-packet.c (parse_publickey, parse_signature): Fixed calls - to mpi_read used for ELG b. - -Fri Feb 13 15:13:23 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10.c (main): changed formatting of help output. - -Thu Feb 12 22:24:42 1998 Werner Koch (wk@frodo) - - * pubkey-enc.c (get_session_key): rewritten - - - Copyright 1998,1999,2000,2001,2002 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 -#include -#include -#include -#include -#include -#include - -#include "errors.h" -#include "iobuf.h" -#include "memory.h" -#include "util.h" -#include "filter.h" -#include "packet.h" -#include "options.h" -#include "main.h" -#include "status.h" -#include "i18n.h" - -#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 -#include -#include -#include -#include - -#include "packet.h" -#include "errors.h" -#include "iobuf.h" -#include "mpi.h" -#include "util.h" -#include "cipher.h" -#include "memory.h" -#include "options.h" - - -static int do_comment( IOBUF out, int ctb, PKT_comment *rem ); -static int do_user_id( IOBUF out, int ctb, PKT_user_id *uid ); -static int do_public_key( IOBUF out, int ctb, PKT_public_key *pk ); -static int do_secret_key( IOBUF out, int ctb, PKT_secret_key *pk ); -static int do_symkey_enc( IOBUF out, int ctb, PKT_symkey_enc *enc ); -static int do_pubkey_enc( IOBUF out, int ctb, PKT_pubkey_enc *enc ); -static u32 calc_plaintext( PKT_plaintext *pt ); -static int do_plaintext( IOBUF out, int ctb, PKT_plaintext *pt ); -static int do_encrypted( IOBUF out, int ctb, PKT_encrypted *ed ); -static int do_encrypted_mdc( IOBUF out, int ctb, PKT_encrypted *ed ); -static int do_compressed( IOBUF out, int ctb, PKT_compressed *cd ); -static int do_signature( IOBUF out, int ctb, PKT_signature *sig ); -static int do_onepass_sig( IOBUF out, int ctb, PKT_onepass_sig *ops ); - -static int calc_header_length( u32 len, int new_ctb ); -static int write_16(IOBUF inp, u16 a); -static int write_32(IOBUF inp, u32 a); -static int write_header( IOBUF out, int ctb, u32 len ); -static int write_sign_packet_header( IOBUF out, int ctb, u32 len ); -static int write_header2( IOBUF out, int ctb, u32 len, int hdrlen, int blkmode ); -static int write_new_header( IOBUF out, int ctb, u32 len, int hdrlen ); -static int write_version( IOBUF out, int ctb ); - -/**************** - * Build a packet and write it to INP - * Returns: 0 := okay - * >0 := error - * Note: Caller must free the packet - */ -int -build_packet( IOBUF out, PACKET *pkt ) -{ - int new_ctb=0, rc=0, ctb; - 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 -#include -#include -#include -#include -#include - -#include "errors.h" -#include "iobuf.h" -#include "memory.h" -#include "util.h" -#include "filter.h" -#include "packet.h" -#include "options.h" -#include "main.h" -#include "status.h" - - -#define MIN_PARTIAL_SIZE 512 - - -static void -write_header( cipher_filter_context_t *cfx, IOBUF a ) -{ - PACKET pkt; - PKT_encrypted ed; - byte temp[18]; - unsigned blocksize; - unsigned nprefix; - - blocksize = cipher_get_blocksize( cfx->dek->algo ); - if( blocksize < 8 || blocksize > 16 ) - log_fatal("unsupported blocksize %u\n", blocksize ); - - memset( &ed, 0, sizeof ed ); - ed.len = cfx->datalen; - ed.extralen = blocksize+2; - ed.new_ctb = !ed.len && !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 -#include -#include -#include -#include -#include -#include -#include - -#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 -#include -#include -#include -#include -#include - -#include "options.h" -#include "packet.h" -#include "errors.h" -#include "iobuf.h" -#include "keydb.h" -#include "memory.h" -#include "util.h" -#include "main.h" -#include "status.h" -#include "i18n.h" - - - -/**************** - * Assume that the input is an encrypted message and decrypt - * (and if signed, verify the signature on) it. - * This command differs from the default operation, as it never - * writes to the filename which is included in the file and it - * rejects files which don't begin with an encrypted message. - */ - -int -decrypt_message( const char *filename ) -{ - IOBUF fp; - armor_filter_context_t afx; - 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 -#include -#include -#include -#include -#include -#include - -#include "options.h" -#include "packet.h" -#include "errors.h" -#include "iobuf.h" -#include "keydb.h" -#include "memory.h" -#include "util.h" -#include "main.h" -#include "trustdb.h" -#include "filter.h" -#include "ttyio.h" -#include "status.h" -#include "i18n.h" - - -/**************** - * Delete a public or secret key from a keyring. - * r_sec_avail will be set if a secret key is available and the public - * key can't be deleted for that reason. - */ -static int -do_delete_key( const char *username, int secret, int *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 -#include -#include -#include -#include -#include - -#include "options.h" -#include "packet.h" -#include "errors.h" -#include "iobuf.h" -#include "keydb.h" -#include "memory.h" -#include "util.h" -#include "main.h" -#include "filter.h" -#include "trustdb.h" -#include "i18n.h" -#include "status.h" - -static int encode_simple( const char *filename, int mode, int 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 -#include -#include -#include -#include -#include -#ifndef EXEC_TEMPFILE_ONLY -#include -#endif -#ifdef HAVE_DOSISH_SYSTEM -#include -#endif -#include -#include -#include -#include -#include "options.h" -#include "memory.h" -#include "i18n.h" -#include "iobuf.h" -#include "util.h" -#include "exec.h" - -#ifdef NO_EXEC -int exec_write(struct exec_info **info,const char *program, - const char *args_in,const char *name,int writeonly,int binary) -{ - log_error(_("no remote program execution supported\n")); - return G10ERR_GENERAL; -} - -int exec_read(struct exec_info *info) { return G10ERR_GENERAL; } -int exec_finish(struct exec_info *info) { return G10ERR_GENERAL; } -int set_exec_path(const char *path,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=".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 -#include -#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 -#include -#include -#include -#include -#include - -#include "options.h" -#include "packet.h" -#include "errors.h" -#include "keydb.h" -#include "memory.h" -#include "util.h" -#include "main.h" -#include "i18n.h" - -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;ipkt->pkt.signature->numrevkeys;i++) - if(node->pkt->pkt.signature->revkey[i]->class & 0x40) - break; - - if(ipkt->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 -#include -#include -#include -#include - -#include "packet.h" -#include "iobuf.h" -#include "mpi.h" -#include "util.h" -#include "cipher.h" -#include "memory.h" -#include "options.h" - -void -free_symkey_enc( PKT_symkey_enc *enc ) -{ - m_free(enc); -} - -void -free_pubkey_enc( PKT_pubkey_enc *enc ) -{ - int n, i; - n = pubkey_get_nenc( enc->pubkey_algo ); - if( !n ) - mpi_free(enc->data[0]); - for(i=0; i < n; i++ ) - mpi_free( enc->data[i] ); - m_free(enc); -} - -void -free_seckey_enc( PKT_signature *sig ) -{ - int n, i; - - n = pubkey_get_nsig( sig->pubkey_algo ); - if( !n ) - mpi_free(sig->data[0]); - for(i=0; i < n; i++ ) - mpi_free( sig->data[i] ); - - m_free(sig->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 -#include -#include -#include -#include -#include -#include -#include -#ifdef HAVE_DOSISH_SYSTEM - #include /* for setmode() */ -#endif -#ifdef HAVE_STAT -#include /* 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 .\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 "); - 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;iflags |= 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 -#include -#include -#include -#include -#include -#include "util.h" -#include "packet.h" -#include "memory.h" -#include "iobuf.h" -#include "keydb.h" -#include "options.h" -#include "main.h" -#include "trustdb.h" -#include "i18n.h" - -#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;inumrevkeys;i++) - memcpy(&pk->revkey[pk->numrevkeys++], - sig->revkey[i], - sizeof(struct revocation_key)); - } - - if( sig->timestamp >= sigdate ) { - if(sig->flags.expired) - ; /* signature has expired - ignore it */ - else { - sigdate = sig->timestamp; - signode = k; - sigversion = sig->version; - - } - } - } - } - } - } - - /* Remove dupes from the revocation keys */ - - if(pk->revkey) - { - int i,j,x,changed=0; - - for(i=0;inumrevkeys;i++) - { - for(j=i+1;jnumrevkeys;j++) - { - if(memcmp(&pk->revkey[i],&pk->revkey[j], - sizeof(struct revocation_key))==0) - { - /* remove j */ - - for(x=j;xnumrevkeys-1;x++) - pk->revkey[x]=pk->revkey[x+1]; - - pk->numrevkeys--; - j--; - changed=1; - } - } - } - - if(changed) - pk->revkey=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 -#include -#include -#include -#include -#include -#include -#ifdef HAVE_DOSISH_SYSTEM - #include /* 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 .\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 -#include -#include -#include -#include -#include - -#include "options.h" -#include "packet.h" -#include "errors.h" -#include "keydb.h" -#include "memory.h" -#include "util.h" -#include "trustdb.h" -#include "main.h" -#include "i18n.h" -#include "ttyio.h" -#include "status.h" -#include "keyserver-internal.h" - -struct stats_s { - ulong count; - ulong no_user_id; - ulong imported; - ulong imported_rsa; - ulong n_uids; - ulong n_sigs; - ulong n_subk; - ulong unchanged; - ulong n_revoc; - ulong secret_read; - ulong secret_imported; - ulong secret_dups; - ulong skipped_new_keys; - ulong not_imported; -}; - - -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;idxnumrevkeys;idx++) - { - u32 keyid[2]; - - keyid_from_fingerprint(sig->revkey[idx]->fpr, - MAX_FINGERPRINT_LEN,keyid); - - for(inode=keyblock->next;inode;inode=inode->next) - { - /* If we reach user IDs, we're done. */ - if(inode->pkt->pkttype==PKT_USER_ID) - break; - - if(inode->pkt->pkttype==PKT_SIGNATURE && - inode->pkt->pkt.signature->sig_class==0x20 && - inode->pkt->pkt.signature->keyid[0]==keyid[0] && - inode->pkt->pkt.signature->keyid[1]==keyid[1]) - { - /* Okay, we have a revocation key, and a - revocation issued by it. Do we have the key - itself? */ - int rc; - - rc=get_pubkey_byfprint(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 -#include -#include -#include -#include -#include "util.h" -#include "memory.h" -#include "packet.h" -#include "keydb.h" - -#define USE_UNUSED_NODES 1 - -static KBNODE unused_nodes; - -static KBNODE -alloc_node(void) -{ - KBNODE n; - - n = unused_nodes; - if( n ) - unused_nodes = n->next; - else - n = 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 -#include -#include -#include -#include -#include -#include -#include -#include - -#include "util.h" -#include "options.h" -#include "main.h" /*try_make_homedir ()*/ -#include "packet.h" -#include "keyring.h" -#include "keydb.h" -#include "i18n.h" - -static int active_handles; - -typedef enum { - KEYDB_RESOURCE_TYPE_NONE = 0, - KEYDB_RESOURCE_TYPE_KEYRING -} KeydbResourceType; -#define MAX_KEYDB_RESOURCES 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 -#include -#include -#include -#include -#include -#include - -#include "options.h" -#include "packet.h" -#include "errors.h" -#include "iobuf.h" -#include "keydb.h" -#include "memory.h" -#include "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;inumrevkeys;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;inumrevkeys;i++) - { - if(memcmp(&pk->revkey[i],&revkey, - sizeof(struct revocation_key))==0) - { - char buf[50]; - - log_error(_("this key has already been designated " - "as a revoker\n")); - - sprintf(buf,"%08lX%08lX", - (ulong)pk->keyid[0],(ulong)pk->keyid[1]); - write_status_text(STATUS_ALREADY_SIGNED,buf); - - break; - } - } - - if(inumrevkeys) - continue; - } - - 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;inumattribs;i++) - { - byte type; - u32 size; - - if(uid->attribs[i].type==ATTRIB_IMAGE && - parse_image_header(&uid->attribs[i],&type,&size)) - { - tty_printf(_("Displaying %s photo ID of size %ld for " - "key 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 -#include -#include -#include -#include -#include -#include -#include "util.h" -#include "main.h" -#include "packet.h" -#include "cipher.h" -#include "ttyio.h" -#include "options.h" -#include "keydb.h" -#include "trustdb.h" -#include "status.h" -#include "i18n.h" - -#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; ihashed, 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;ihashed, 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" - " = key expires in n days\n" - " w = key expires in n weeks\n" - " m = key expires in n months\n" - " y = key expires in n years\n")); - break; - - case 1: - tty_printf(_("Please specify how long the signature should be valid.\n" - " 0 = signature does not expire\n" - " = signature expires in n days\n" - " w = signature expires in n weeks\n" - " m = signature expires in n months\n" - " y = signature expires in n years\n")); - break; - - default: - BUG(); - } - - /* Note: The elgamal subkey for DSA has no expiration date because - * it must be signed with the DSA key and this one has the expiration - * date */ - - answer = NULL; - for(;;) { - 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) \"\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;iu.revkey,&revkey,sizeof(struct revocation_key)); - - return 0; - - fail: - log_error("%s:%d: invalid revocation key\n", fname, r->lnr ); - return -1; /* error */ -} - - -static u32 -get_parameter_u32( struct para_data_s *para, enum para_name key ) -{ - struct para_data_s *r = 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 -#include -#include -#include -#include -#include -#include -#include "util.h" -#include "main.h" -#include "packet.h" -#include "options.h" -#include "mpi.h" -#include "keydb.h" -#include "i18n.h" - - -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 -#include -#include -#include -#include -#include - -#include "options.h" -#include "packet.h" -#include "errors.h" -#include "keydb.h" -#include "memory.h" -#include "photoid.h" -#include "util.h" -#include "ttyio.h" -#include "trustdb.h" -#include "main.h" -#include "i18n.h" -#include "status.h" - -static void list_all(int); -static void list_one( STRLIST names, int secret); - -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;ihashed,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;iinv_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;inumattribs;i++) - { - if(is_status_enabled()) - { - byte array[MAX_FINGERPRINT_LEN], *p; - char buf[(MAX_FINGERPRINT_LEN*2)+90]; - size_t j,n; - - if(pk) - fingerprint_from_pk( pk, array, &n ); - else if(sk) - fingerprint_from_sk( sk, array, &n ); - else - BUG(); - - p = array; - for(j=0; j < n ; j++, p++ ) - sprintf(buf+2*j, "%02X", *p ); - - sprintf(buf+strlen(buf)," %lu %u %u %u %lu %lu %u", - (ulong)uid->attribs[i].len,uid->attribs[i].type,i+1, - uid->numattribs,(ulong)uid->created,(ulong)uid->expiredate, - ((uid->is_primary?0x01:0)| - (uid->is_revoked?0x02:0)| - (uid->is_expired?0x04:0))); - write_status_text(STATUS_ATTRIBUTE,buf); - } - - fwrite(uid->attribs[i].data,uid->attribs[i].len,1,attrib_fp); - } -} - -static void -list_keyblock_print ( KBNODE keyblock, int secret, int fpr, void *opaque ) -{ - int rc = 0; - KBNODE kbctx; - KBNODE node; - PKT_public_key *pk; - PKT_secret_key *sk; - 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 -#include -#include -#include -#include -#include -#include -#include -#include - -#include "util.h" -#include "keyring.h" -#include "packet.h" -#include "keydb.h" -#include "options.h" -#include "main.h" /*for check_key_signature()*/ -#include "i18n.h" - -/* off_item is a funny named for an object used to keep track of known - * keys. The idea was to use the offset to seek to the known keyblock, but - * this is not possible if more than one process is using the keyring. - */ -struct off_item { - struct off_item *next; - u32 kid[2]; - /*off_t off;*/ -}; - -typedef struct off_item **OffsetHashTable; - - -typedef struct keyring_name *KR_NAME; -struct keyring_name { - struct keyring_name *next; - int secret; - DOTLOCK 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 -#include -#include -#include -#include -#include -#include "filter.h" -#include "keydb.h" -#include "status.h" -#include "exec.h" -#include "main.h" -#include "i18n.h" -#include "iobuf.h" -#include "memory.h" -#include "ttyio.h" -#include "options.h" -#include "packet.h" -#include "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;itochild,"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;itochild,"0x"); - - for(f=0;ftochild,"%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 -#include -#include -#include -#include -#include - -#include "packet.h" -#include "iobuf.h" -#include "memory.h" -#include "options.h" -#include "util.h" -#include "cipher.h" -#include "keydb.h" -#include "filter.h" -#include "main.h" -#include "status.h" -#include "i18n.h" -#include "trustdb.h" -#include "keyserver-internal.h" -#include "photoid.h" - - -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 -#include -#include -#include -#include -#include -#if defined(__linux__) && defined(__alpha__) && __GLIBC__ < 2 - #include - #include -#endif -#ifdef HAVE_SETRLIMIT - #include - #include - #include -#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+8pk) - fingerprint_from_pk(args->pk,array,&len); - else - memset(array,0, (len=MAX_FINGERPRINT_LEN)); - - if(idx+(len*2)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)= '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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "util.h" -#include "memory.h" -#include "ttyio.h" -#include "options.h" -#include "main.h" -#include "status.h" -#include "i18n.h" - -#ifdef USE_ONLY_8DOT3 - #define SKELEXT ".skl" -#else - #define SKELEXT EXTSEP_S "skel" -#endif - -#if defined (HAVE_DRIVE_LETTERS) || defined (__riscos__) - #define CMP_FILENAME(a,b) ascii_strcasecmp( (a), (b) ) -#else - #define CMP_FILENAME(a,b) strcmp( (a), (b) ) -#endif - -#ifdef MKDIR_TAKES_ONE_ARG -# undef mkdir -# define mkdir(a,b) mkdir(a) -#endif - -/* FIXME: Implement opt.interactive. */ - -/**************** - * Check whether FNAME exists and ask if it's okay to overwrite an - * existing one. - * Returns: True: it's okay to overwrite or the file does not exist - * False: Do not overwrite - */ -int -overwrite_filep( const char *fname ) -{ - if( !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 -#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=::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 -#include -#include -#include -#include - -#include "packet.h" -#include "iobuf.h" -#include "mpi.h" -#include "util.h" -#include "cipher.h" -#include "memory.h" -#include "filter.h" -#include "photoid.h" -#include "options.h" -#include "main.h" -#include "i18n.h" - -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= 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 - * 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 -#include -#include -#include -#include -#include -#include -#if !defined(HAVE_DOSISH_SYSTEM) && !defined(__riscos__) -#include -#include -#endif -#if defined (__MINGW32__) || defined (__CYGWIN32__) -# include -#endif -#include -#ifdef HAVE_LOCALE_H -#include -#endif - -#include "util.h" -#include "memory.h" -#include "options.h" -#include "ttyio.h" -#include "cipher.h" -#include "keydb.h" -#include "main.h" -#include "i18n.h" -#include "status.h" - - -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 -#include -#include -#include -#ifdef __MINGW32__ -# include -# ifndef VER_PLATFORM_WIN32_WINDOWS -# define VER_PLATFORM_WIN32_WINDOWS 1 -# endif -#endif -#include "packet.h" -#include "status.h" -#include "exec.h" -#include "keydb.h" -#include "util.h" -#include "i18n.h" -#include "iobuf.h" -#include "memory.h" -#include "options.h" -#include "main.h" -#include "photoid.h" - -/* 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;itempfile_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 -#include -#include -#include -#include -#include - -#include "options.h" -#include "packet.h" -#include "errors.h" -#include "keydb.h" -#include "memory.h" -#include "util.h" -#include "main.h" -#include "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<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 -#include -#include -#include -#include -#include -#ifdef HAVE_DOSISH_SYSTEM - #include /* for setmode() */ -#endif - -#include "util.h" -#include "memory.h" -#include "options.h" -#include "packet.h" -#include "ttyio.h" -#include "filter.h" -#include "main.h" -#include "status.h" -#include "i18n.h" - - - -/**************** - * 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 -#include -#include -#include -#include -#include "util.h" -#include "memory.h" -#include "packet.h" -#include "mpi.h" -#include "keydb.h" -#include "trustdb.h" -#include "cipher.h" -#include "status.h" -#include "options.h" -#include "main.h" -#include "i18n.h" - -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: - * : - */ -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 -#include -#include -#include -#include -#include -#include - -#include "options.h" -#include "packet.h" -#include "errors.h" -#include "keydb.h" -#include "memory.h" -#include "util.h" -#include "main.h" -#include "ttyio.h" -#include "status.h" -#include "i18n.h" - - -struct revocation_reason_info { - int code; - char *desc; -}; - - -int -revocation_reason_build_cb( PKT_signature *sig, void *opaque ) -{ - struct revocation_reason_info *reason = opaque; - char *ud = NULL; - byte *buffer; - size_t buflen = 1; - - if(!reason) - return 0; - - if( reason->desc ) { - ud = native_to_utf8( reason->desc ); - buflen += strlen(ud); - } - buffer = 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;inumrevkeys;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;jpkt->pkt.signature->numrevkeys;j++) - { - if(pk->revkey[i].class== - signode->pkt->pkt.signature->revkey[j]->class && - pk->revkey[i].algid== - signode->pkt->pkt.signature->revkey[j]->algid && - memcmp(pk->revkey[i].fpr, - signode->pkt->pkt.signature->revkey[j]->fpr, - MAX_FINGERPRINT_LEN)==0) - { - revkey=signode->pkt->pkt.signature; - break; - } - } - } - } - - if(!revkey) - BUG(); - - rc=export_minimal_pk(out,keyblock,sig,revkey); - if(rc) - goto leave; - - /* and issue a usage notice */ - tty_printf(_("Revocation certificate created.\n")); - break; - } - } - - if(!any) - log_error(_("no revocation keys found for `%s'\n"),uname); - - leave: - if( pk ) - free_public_key( pk ); - if( sk ) - free_secret_key( sk ); - if( sig ) - free_seckey_enc( sig ); - - 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 -#include -#include -#include -#include -#include "util.h" -#include "memory.h" -#include "packet.h" -#include "mpi.h" -#include "keydb.h" -#include "cipher.h" -#include "main.h" -#include "options.h" -#include "i18n.h" -#include "status.h" - - -static int -do_check( PKT_secret_key *sk, const char *tryagain_text ) -{ - 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 -#include -#include -#include -#include -#include "util.h" -#include "packet.h" -#include "memory.h" -#include "mpi.h" -#include "keydb.h" -#include "cipher.h" -#include "main.h" -#include "status.h" -#include "i18n.h" -#include "options.h" - -struct cmp_help_context_s { - PKT_signature *sig; - MD_HANDLE md; -}; - -static int do_check( PKT_public_key *pk, PKT_signature *sig, - MD_HANDLE digest, int *r_expired ); - -/**************** - * 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;inumrevkeys;i++) - { - u32 keyid[2]; - - keyid_from_fingerprint(pk->revkey[i].fpr,MAX_FINGERPRINT_LEN,keyid); - - if(keyid[0]==sig->keyid[0] && keyid[1]==sig->keyid[1]) - { - MD_HANDLE md; - - md=md_open(sig->digest_algo,0); - hash_public_key(md,pk); - rc=signature_check(sig,md); - cache_sig_result(sig,rc); - 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 -#include -#include -#include -#include -#include -#include /* need sleep() */ - -#include "options.h" -#include "packet.h" -#include "errors.h" -#include "iobuf.h" -#include "keydb.h" -#include "memory.h" -#include "util.h" -#include "main.h" -#include "filter.h" -#include "ttyio.h" -#include "trustdb.h" -#include "status.h" -#include "i18n.h" - - -#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 -#include -#include -#include -#include -#include -#include -#include - -#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 -#include -#include -#include -#include -#include -#include -#ifdef USE_SHM_COPROCESSING - #ifdef USE_CAPABILITIES - #include - #endif - #ifdef HAVE_SYS_IPC_H - #include - #include - #endif - #ifdef HAVE_SYS_SHM_H - #include - #endif - #if defined(HAVE_MLOCK) - #include - #endif -#endif -#include "util.h" -#include "status.h" -#include "ttyio.h" -#include "options.h" -#include "main.h" -#include "i18n.h" -#include "cipher.h" /* for progress functions */ - -#define CONTROL_D ('D' - 'A' + 1) - - - -static FILE *statusfp; - -#ifdef USE_SHM_COPROCESSING - static int shm_id = -1; - static volatile char *shm_area; - static size_t shm_size; - static int shm_is_locked; -#endif /*USE_SHM_COPROCESSING*/ - - -static void -progress_cb ( void *ctx, int c ) -{ - char buf[50]; - - if ( c == '\n' ) - sprintf ( buf, "%.20s X 100 100", (char*)ctx ); - else - sprintf ( buf, "%.20s %c 0 0", (char*)ctx, c ); - write_status_text ( STATUS_PROGRESS, buf ); -} - -static const char * -get_status_string ( int no ) -{ - const char *s; - - switch( no ) { - case STATUS_ENTER : s = "ENTER"; break; - case STATUS_LEAVE : s = "LEAVE"; break; - case STATUS_ABORT : s = "ABORT"; break; - case STATUS_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 -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "errors.h" -#include "iobuf.h" -#include "memory.h" -#include "util.h" -#include "options.h" -#include "main.h" -#include "i18n.h" -#include "trustdb.h" -#include "tdbio.h" - -#if defined(HAVE_DOSISH_SYSTEM) && !defined(__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 -#include -#include -#include -#include -#include - -#include "errors.h" -#include "iobuf.h" -#include "memory.h" -#include "util.h" -#include "filter.h" -#include "i18n.h" -#include "options.h" - -#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 -#include -#include -#include -#include - -#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 -#include -#include -#include -#include -#include -#include /* for isatty() */ - -#include "options.h" -#include "packet.h" -#include "errors.h" -#include "iobuf.h" -#include "keydb.h" -#include "memory.h" -#include "util.h" -#include "main.h" -#include "status.h" -#include "filter.h" -#include "ttyio.h" -#include "i18n.h" - - - -/**************** - * Assume that the input is a signature and verify it without - * generating any output. With no arguments, the signature packet - * is read from stdin (it may be a detached signature when not - * used in batch mode). If only a sigfile is given, it may be a complete - * signature or a detached signature in which case the signed stuff - * is expected from stdin. With more than 1 argument, the first should - * be a detached signature and the remaining files are the signed stuff. - */ - -int -verify_signatures( int nfiles, char **files ) -{ - IOBUF fp; - armor_filter_context_t afx; - 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 - -%%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 . - -%%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 - - * keyserver.h: Go to KEYSERVER_PROTO_VERSION 1. - -2002-10-08 David Shaw - - * keyserver.h: Add new error code KEYSERVER_UNREACHABLE. - -2002-10-03 David Shaw - - * util.h: Add new log_warning logger command which can be switched - between log_info and log_error via log_set_strict. - -2002-09-24 David Shaw - - * keyserver.h: Add some new error codes for better GPA support. - -2002-09-10 Werner Koch - - * mpi.h (mpi_is_protected, mpi_set_protect_flag) - (mpi_clear_protect_flag): Removed. - (mpi_get_nbit_info, mpi_set_nbit_info): Removed. - -2002-08-13 David Shaw - - * cipher.h: Add AES aliases for RIJNDAEL algo numbers. - -2002-08-07 David Shaw - - * cipher.h: Add md_algo_present(). - -2002-08-06 Stefan Bellon - - * util.h [__riscos__]: Added riscos_getchar(). - -2002-06-21 Stefan Bellon - - * util.h [__riscos__]: Further moving away of RISC OS specific - stuff from general code. - -2002-06-20 Stefan Bellon - - * util.h [__riscos__]: Added riscos_set_filetype(). - -2002-06-14 David Shaw - - * util.h: Add pop_strlist() from strgutil.c. - -2002-06-07 Stefan Bellon - - * util.h [__riscos__]: RISC OS needs strings.h for strcasecmp() - and strncasecmp(). - -2002-05-22 Werner Koch - - * util.h: Add strncasecmp. Removed stricmp and memicmp. - -2002-05-10 Stefan Bellon - - * mpi.h: New function mpi_debug_alloc_like for M_DEBUG. - - * util.h [__riscos__]: Make use of __func__ that later - Norcroft compiler provides. - - * memory.h: Fixed wrong definition of m_alloc_secure_clear. - -2002-04-23 David Shaw - - * util.h: New function answer_is_yes_no_default() to give a - default answer. - -2002-04-22 Stefan Bellon - - * util.h [__riscos__]: Removed riscos_open, riscos_fopen and - riscos_fstat as those special versions aren't needed anymore. - -2002-02-19 David Shaw - - * keyserver.h: Add KEYSERVER_NOT_SUPPORTED for unsupported actions - (say, a keyserver that has no way to search, or a readonly - keyserver that has no way to add). - -2002-01-02 Stefan Bellon - - * util.h [__riscos__]: Updated prototype list. - - * types.h [__riscos__]: Changed comment wording. - -2001-12-27 David Shaw - - * KEYSERVER_SCHEME_NOT_FOUND should be 127 to match the POSIX - system() (via /bin/sh) way of signaling this. - - * Added G10ERR_KEYSERVER - -2001-12-27 Werner Koch - - * util.h [MINGW32]: Fixed name of include file. - -2001-12-22 Timo Schulz - - * util.h (is_file_compressed): New. - -2001-12-19 Werner Koch - - * util.h [CYGWIN32]: Allow this as an alias for MINGW32. Include - stdarg.h becuase we use the va_list type. By Disastry. - -2001-09-28 Werner Koch - - * cipher.h (PUBKEY_USAGE_CERT): New. - -2001-09-07 Werner Koch - - * util.h: Add strsep(). - -2001-08-30 Werner Koch - - * cipher.h (DEK): Added use_mdc. - -2001-08-24 Werner Koch - - * cipher.h (md_write): Made buf arg const. - -2001-08-20 Werner Koch - - * cipher.h (DEK): Added algo_info_printed; - - * util.h [__riscos__]: Added prototypes and made sure that we - never use __attribute__. - * cipher.h, iobuf.h, memory.h, mpi.h [__riscos__]: extern hack. - * i18n.h [__riscos__]: Use another include file - -2001-05-30 Werner Koch - - * ttyio.h (tty_printf): Add missing parenthesis for non gcc. - * http.h: Removed trailing comma to make old ccs happy. Both are - by Albert Chin. - -2001-05-25 Werner Koch - - * ttyio.h (tty_printf): Add printf attribute. - -2001-04-23 Werner Koch - - * http.h: New flag HTTP_FLAG_NO_SHUTDOWN. - -2001-04-13 Werner Koch - - * iobuf.h: Removed iobuf_fopen. - -2001-03-01 Werner Koch - - * errors.h (G10ERR_UNU_SECKEY,G10ERR_UNU_PUBKEY): New - -2000-11-30 Werner Koch - - * iobuf.h (iobuf_translate_file_handle): Add prototype. - -2000-11-11 Paul Eggert - - * iobuf.h (iobuf_get_filelength): Now returns off_t, not u32. - (struct iobuf_struct, iobuf_set_limit, - iobuf_tell, iobuf_seek): Use off_t, not ulong, for file offsets. - -2000-10-12 Werner Koch - - * mpi.h: Changed the way mpi_limb_t is defined. - -Wed Sep 6 17:55:47 CEST 2000 Werner Koch - - * iobuf.c (IOBUF_FILELENGTH_LIMIT): New. - -2000-03-14 14:03:43 Werner Koch (wk@habibti.openit.de) - - * types.h (HAVE_U64_TYPEDEF): Defined depending on configure test. - -Thu Jan 13 19:31:58 CET 2000 Werner Koch - - * types.h (HAVE_U64_TYPEDEF): Add a test for _LONGLONG which fixes - this long living SGI bug. Reported by Alec Habig. - -Sat Dec 4 12:30:28 CET 1999 Werner Koch - - * iobuf.h (IOBUFCTRL_CANCEL): Nww. - -Mon Oct 4 21:23:04 CEST 1999 Werner Koch - - * errors.h (G10ERR_NOT_PROCESSED): New. - -Wed Sep 15 16:22:17 CEST 1999 Werner Koch - - - * i18n.h: Add support for simple-gettext. - -Tue Jun 29 21:44:25 CEST 1999 Werner Koch - - - * util.h (stricmp): Use strcasecmp as replacement. - -Sat Jun 26 12:15:59 CEST 1999 Werner Koch - - - * cipher.h (MD_HANDLE): Assigned a structure name. - -Fri Apr 9 12:26:25 CEST 1999 Werner Koch - - * cipher.h (BLOWFISH160): Removed. - -Tue Apr 6 19:58:12 CEST 1999 Werner Koch - - * cipher.h (DEK): increased max. key length to 32 bytes - - -Sat Feb 20 21:40:49 CET 1999 Werner Koch - - * g10lib.h: Removed file and changed all files that includes this. - -Tue Feb 16 14:10:02 CET 1999 Werner Koch - - * types.h (STRLIST): Add field flags. - -Wed Feb 10 17:15:39 CET 1999 Werner Koch - - * cipher.h (CIPHER_ALGO_TWOFISH): Chnaged ID to 10 and renamed - the old experimenatl algorithm to xx_OLD. - -Thu Jan 7 18:00:58 CET 1999 Werner Koch - - * cipher.h (MD_BUFFER_SIZE): Removed. - -Mon Dec 14 21:18:49 CET 1998 Werner Koch - - * types.h: fix for SUNPRO_C - -Tue Dec 8 13:15:16 CET 1998 Werner Koch - - * mpi.h (MPI): Changed the structure name to gcry_mpi and - changed all users. - -Tue Oct 20 11:40:00 1998 Werner Koch (wk@isil.d.shuttle.de) - - * iobuf.h (iobuf_get_temp_buffer): New. - -Tue Oct 13 12:40:48 1998 Werner Koch (wk@isil.d.shuttle.de) - - * iobuf.h (iobuf_get): Now uses .nofast - (iobuf_get2): Removed. - -Mon Sep 14 09:17:22 1998 Werner Koch (wk@(none)) - - * util.h (HAVE_ATEXIT): New. - (HAVE_RAISE): New. - -Mon Jul 6 10:41:55 1998 Werner Koch (wk@isil.d.shuttle.de) - - * cipher.h (PUBKEY_USAGE_): New. - -Mon Jul 6 09:49:51 1998 Werner Koch (wk@isil.d.shuttle.de) - - * iobuf.h (iobuf_set_error): New. - (iobuf_error): New. - -Sat Jun 13 17:31:32 1998 Werner Koch (wk@isil.d.shuttle.de) - - * g10lib.h: New as interface for the g10lib. - -Mon Jun 8 22:14:48 1998 Werner Koch (wk@isil.d.shuttle.de) - - * cipher.h (CIPHER_ALGO_CAST5): Changed name from .. CAST - -Thu May 21 13:25:51 1998 Werner Koch (wk@isil.d.shuttle.de) - - * cipher.h: removed ROT 5 and changed one id and add dummy - -Tue May 19 18:09:05 1998 Werner Koch (wk@isil.d.shuttle.de) - - * cipher.h (DIGEST_ALGO_TIGER): Chnaged id from 101 to 6. - -Mon May 4 16:37:17 1998 Werner Koch (wk@isil.d.shuttle.de) - - * cipher.h (PUBKEY_ALGO_ELGAMAL_E): New, with value of the - old one. - * (is_ELGAMAL, is_RSA): New macros - -Sun Apr 26 14:35:24 1998 Werner Koch (wk@isil.d.shuttle.de) - - * types.h: New type u64 - -Mon Mar 9 12:59:55 1998 Werner Koch (wk@isil.d.shuttle.de) - - * cipher.h: Included dsa.h. - -Tue Mar 3 15:11:21 1998 Werner Koch (wk@isil.d.shuttle.de) - - * cipher.h (random.h): Add new header and move all relevalt - functions to this header. - - - Copyright 1998, 1999, 2000, 2001 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 /* suggested by Ernst Molitor */ -#endif - -#ifdef ENABLE_NLS -#ifndef __riscos__ - #include -#else - #include "libgettext.h" -#endif /* __riscos__ */ - #define _(a) gettext (a) - #ifdef gettext_noop - #define N_(a) gettext_noop (a) - #else - #define N_(a) (a) - #endif -#else - #define _(a) (a) - #define N_(a) (a) -#endif -#endif /* !USE_SIMPLE_GETTEXT */ - -#endif /*G10_I18N_H*/ 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 -#include -#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 - - -#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 -#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 -/* needed for filename munging */ -#include -/* needed for image file system feature */ -#include -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 - - * 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 -#endif - -#include -#include -#include - -#ifdef _LIBC -# include -#else -# include "libgnuintl.h" -#endif -#include "gettextP.h" - -#ifdef _LIBC -/* We have to handle multi-threaded applications. */ -# include -#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 . */ -#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 " - echo "# and Bruno Haible ." - echo "#" - echo "C ASCII" - # ISO-8859-1 languages - echo "ca CP850" - echo "ca_ES CP850" - echo "da CP865" # not CP850 ?? - echo "da_DK CP865" # not CP850 ?? - echo "de CP850" - echo "de_AT CP850" - echo "de_CH CP850" - echo "de_DE CP850" - echo "en CP850" - echo "en_AU CP850" # not CP437 ?? - echo "en_CA CP850" - echo "en_GB CP850" - echo "en_NZ CP437" - echo "en_US CP437" - echo "en_ZA CP850" # not CP437 ?? - echo "es CP850" - echo "es_AR CP850" - echo "es_BO CP850" - echo "es_CL CP850" - echo "es_CO CP850" - echo "es_CR CP850" - echo "es_CU CP850" - echo "es_DO CP850" - echo "es_EC CP850" - echo "es_ES CP850" - echo "es_GT CP850" - echo "es_HN CP850" - echo "es_MX CP850" - echo "es_NI CP850" - echo "es_PA CP850" - echo "es_PY CP850" - echo "es_PE CP850" - echo "es_SV CP850" - echo "es_UY CP850" - echo "es_VE CP850" - echo "et CP850" - echo "et_EE CP850" - echo "eu CP850" - echo "eu_ES CP850" - echo "fi CP850" - echo "fi_FI CP850" - echo "fr CP850" - echo "fr_BE CP850" - echo "fr_CA CP850" - echo "fr_CH CP850" - echo "fr_FR CP850" - echo "ga CP850" - echo "ga_IE CP850" - echo "gd CP850" - echo "gd_GB CP850" - echo "gl CP850" - echo "gl_ES CP850" - echo "id CP850" # not CP437 ?? - echo "id_ID CP850" # not CP437 ?? - echo "is CP861" # not CP850 ?? - echo "is_IS CP861" # not CP850 ?? - echo "it CP850" - echo "it_CH CP850" - echo "it_IT CP850" - echo "lt CP775" - echo "lt_LT CP775" - echo "lv CP775" - echo "lv_LV CP775" - echo "nb CP865" # not CP850 ?? - echo "nb_NO CP865" # not CP850 ?? - echo "nl CP850" - echo "nl_BE CP850" - echo "nl_NL CP850" - echo "nn CP865" # not CP850 ?? - echo "nn_NO CP865" # not CP850 ?? - echo "no CP865" # not CP850 ?? - echo "no_NO CP865" # not CP850 ?? - echo "pt CP850" - echo "pt_BR CP850" - echo "pt_PT CP850" - echo "sv CP850" - echo "sv_SE CP850" - # ISO-8859-2 languages - echo "cs CP852" - echo "cs_CZ CP852" - echo "hr CP852" - echo "hr_HR CP852" - echo "hu CP852" - echo "hu_HU CP852" - echo "pl CP852" - echo "pl_PL CP852" - echo "ro CP852" - echo "ro_RO CP852" - echo "sk CP852" - echo "sk_SK CP852" - echo "sl CP852" - echo "sl_SI CP852" - echo "sq CP852" - echo "sq_AL CP852" - echo "sr CP852" # CP852 or CP866 or CP855 ?? - echo "sr_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 -#endif - -#include "gettextP.h" -#ifdef _LIBC -# include -#else -# include "libgnuintl.h" -#endif - -/* @@ end of prolog @@ */ - -/* Names for the libintl functions are a problem. They must not clash - with existing names and they should follow ANSI C. But this source - code is also used in GNU C Library where the names have a __ - prefix. So we have to make a difference here. */ -#ifdef _LIBC -# define DCGETTEXT __dcgettext -# define DCIGETTEXT __dcigettext -#else -# define DCGETTEXT 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 to provide a prototype for mempcpy(). - This must come before because may include - , and once has been included, it's too late. */ -#ifndef _GNU_SOURCE -# define _GNU_SOURCE 1 -#endif - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include - -#ifdef __GNUC__ -# define alloca __builtin_alloca -# define HAVE_ALLOCA 1 -#else -# if defined HAVE_ALLOCA_H || defined _LIBC -# include -# else -# ifdef _AIX - #pragma alloca -# else -# ifndef alloca -char *alloca (); -# endif -# endif -# endif -#endif - -#include -#ifndef errno -extern int errno; -#endif -#ifndef __set_errno -# define __set_errno(val) errno = (val) -#endif - -#include -#include - -#include -#if !HAVE_STRCHR && !defined _LIBC -# ifndef strchr -# define strchr index -# endif -#endif - -#if defined HAVE_UNISTD_H || defined _LIBC -# include -#endif - -#include - -#if defined HAVE_SYS_PARAM_H || defined _LIBC -# include -#endif - -#include "gettextP.h" -#ifdef _LIBC -# include -#else -# include "libgnuintl.h" -#endif -#include "hash-string.h" - -/* Thread safetyness. */ -#ifdef _LIBC -# include -#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 . */ -#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 -#endif - -#ifndef _POSIX_PATH_MAX -# define _POSIX_PATH_MAX 255 -#endif - -#if !defined PATH_MAX && defined _PC_PATH_MAX -# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX)) -#endif - -/* Don't include sys/param.h if it already has been. */ -#if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN -# include -#endif - -#if !defined PATH_MAX && defined MAXPATHLEN -# define PATH_MAX MAXPATHLEN -#endif - -#ifndef PATH_MAX -# define PATH_MAX _POSIX_PATH_MAX -#endif - -/* Pathname support. - ISSLASH(C) tests whether C is a directory separator character. - IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not, - it may be concatenated to a directory pathname. - IS_PATH_WITH_DIR(P) tests whether P contains a directory specification. - */ -#if defined _WIN32 || defined __WIN32__ || defined __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 - -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 -#endif - -#include "gettextP.h" -#ifdef _LIBC -# include -#else -# include "libgnuintl.h" -#endif - -/* @@ end of prolog @@ */ - -/* Names for the libintl functions are a problem. They must not clash - with existing names and they should follow ANSI C. But this source - code is also used in GNU C Library where the names have a __ - prefix. So we have to make a difference here. */ -#ifdef _LIBC -# define DCNGETTEXT __dcngettext -# define DCIGETTEXT __dcigettext -#else -# define DCNGETTEXT 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 -#endif - -#include - -#include "gettextP.h" -#ifdef _LIBC -# include -#else -# include "libgnuintl.h" -#endif - -/* @@ end of prolog @@ */ - -/* Names for the libintl functions are a problem. They must not clash - with existing names and they should follow ANSI C. But this source - code is also used in GNU C Library where the names have a __ - prefix. So we have to make a difference here. */ -#ifdef _LIBC -# define 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 -#endif - -#include - -#include "gettextP.h" -#ifdef _LIBC -# include -#else -# include "libgnuintl.h" -#endif - -/* @@ end of prolog @@ */ - -/* Names for the libintl functions are a problem. They must not clash - with existing names and they should follow ANSI C. But this source - code is also used in GNU C Library where the names have a __ - prefix. So we have to make a difference here. */ -#ifdef _LIBC -# define 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 , 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 -#endif - -#include -#include -#include -#include - -#if defined HAVE_UNISTD_H || defined _LIBC -# include -#endif - -#include "gettextP.h" -#ifdef _LIBC -# include -#else -# include "libgnuintl.h" -#endif - -/* @@ 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 -#endif - -#ifdef _LIBC -# define __need_NULL -# include -#else -# include /* Just for NULL. */ -#endif - -#include "gettextP.h" -#ifdef _LIBC -# include -#else -# include "libgnuintl.h" -#endif - -/* @@ end of prolog @@ */ - -/* Names for the libintl functions are a problem. They must not clash - with existing names and they should follow ANSI C. But this source - code is also used in GNU C Library where the names have a __ - prefix. So we have to make a difference here. */ -#ifdef _LIBC -# define GETTEXT __gettext -# define DCGETTEXT __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 -#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 ) 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 , 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 /* Get size_t. */ - -#ifdef _LIBC -# include "../iconv/gconv_int.h" -#else -# if HAVE_ICONV -# include -# 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 -# 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 -#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 , 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 to provide a prototype for stpcpy(). - This must come before because may include - , and once has been included, it's too late. */ -#ifndef _GNU_SOURCE -# define _GNU_SOURCE 1 -#endif - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include -#if !HAVE_STRCHR && !defined _LIBC -# ifndef strchr -# define strchr index -# endif -#endif - -#if defined _LIBC || defined HAVE_ARGZ_H -# include -#endif -#include -#include -#include - -#include "loadinfo.h" - -/* On some strange systems still no definition of NULL is found. Sigh! */ -#ifndef NULL -# if defined __STDC__ && __STDC__ -# define NULL ((void *) 0) -# else -# define NULL 0 -# endif -#endif - -/* @@ end of prolog @@ */ - -#ifdef _LIBC -/* Rename the non ANSI C functions. This is required by the standard - because some ANSI C functions will require linking with this object - file and the name space must not be polluted. */ -# ifndef stpcpy -# define stpcpy(dest, src) __stpcpy(dest, src) -# endif -#else -# ifndef HAVE_STPCPY -static char *stpcpy 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 . - 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 - -#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 , 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 to provide a prototype for mempcpy(). - This must come before because may include - , and once has been included, it's too late. */ -#ifndef _GNU_SOURCE -# define _GNU_SOURCE 1 -#endif - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include -#include -#include -#include -#include - -#ifdef __GNUC__ -# define alloca __builtin_alloca -# define HAVE_ALLOCA 1 -#else -# if defined HAVE_ALLOCA_H || defined _LIBC -# include -# else -# ifdef _AIX - #pragma alloca -# else -# ifndef alloca -char *alloca (); -# endif -# endif -# endif -#endif - -#include -#include - -#if defined HAVE_UNISTD_H || defined _LIBC -# include -#endif - -#ifdef _LIBC -# include -# include -#endif - -#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \ - || (defined _LIBC && defined _POSIX_MAPPED_FILES) -# include -# undef HAVE_MMAP -# define HAVE_MMAP 1 -#else -# undef HAVE_MMAP -#endif - -#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 . */ -#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 . */ - -#ifdef HAVE_CONFIG_H -# include -#endif - -#if HAVE_STDDEF_H -# include -#endif - -#include -#if HAVE_STRING_H -# include -#else -# include -#endif -#if HAVE_STDLIB_H -# include -#endif - -#if defined _WIN32 || defined __WIN32__ -# undef WIN32 /* avoid warning on mingw32 */ -# define WIN32 -#endif - -#ifndef WIN32 -# if HAVE_LANGINFO_CODESET -# include -# else -# if HAVE_SETLOCALE -# include -# endif -# endif -#else /* WIN32 */ -# define WIN32_LEAN_AND_MEAN -# include -#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 to provide a prototype for mempcpy(). - This must come before because may include - , and once has been included, it's too late. */ -#ifndef _GNU_SOURCE -# define _GNU_SOURCE 1 -#endif - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include -#include -#include - -#ifdef __GNUC__ -# define alloca __builtin_alloca -# define HAVE_ALLOCA 1 -#else -# if defined HAVE_ALLOCA_H || defined _LIBC -# include -# else -# ifdef _AIX - #pragma alloca -# else -# ifndef alloca -char *alloca (); -# endif -# endif -# endif -#endif - -#include - -#include -#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 - -__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 -#endif - -#ifdef _LIBC -# define __need_NULL -# include -#else -# include /* Just for NULL. */ -#endif - -#include "gettextP.h" -#ifdef _LIBC -# include -#else -# include "libgnuintl.h" -#endif - -#include - -/* @@ end of prolog @@ */ - -/* Names for the libintl functions are a problem. They must not clash - with existing names and they should follow ANSI C. But this source - code is also used in GNU C Library where the names have a __ - prefix. So we have to make a difference here. */ -#ifdef _LIBC -# define NGETTEXT __ngettext -# define DCNGETTEXT __dcngettext -#else -# define NGETTEXT 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 , 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 - because may include arbitrary system headers. */ -#if defined _AIX && !defined __GNUC__ - #pragma alloca -#endif - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include -#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 - -#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 -#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 -#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 */ - #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 , 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 - because may include arbitrary system headers. */ -#if defined _AIX && !defined __GNUC__ - #pragma alloca -#endif - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include -#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 EQUOP2 CMPOP2 ADDOP2 MULOP2 -%token NUMBER -%type 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 -#endif - -#include -#include - -#ifdef _LIBC -# include -#else -# include "libgnuintl.h" -#endif -#include "gettextP.h" - -#ifdef _LIBC -/* We have to handle multi-threaded applications. */ -# include -#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 - - * keybox-search.c (blob_cmp_fpr_part): New. - (has_short_kid, has_long_kid): Implemented. - -2002-07-22 Werner Koch - - * 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 - - * 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 - - * 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 - - * keybox-search.c (keybox_search): Allow KEYDB_SEARCH_MODE_FPR20. - -2002-01-15 Werner Koch - - * keybox-search.c (blob_cmp_fpr): New. - (has_fingerprint): Implemented; - -2001-12-20 Werner Koch - - * 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 - - * 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 - - * keybox-search.c: Changed the way the serial number is - represented. - -2001-12-15 Werner Koch - - * keybox-search.c (blob_cmp_name): There is no terminating 0 stored - for the uid; fixed length compare. - -2001-12-14 Werner Koch - - * 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 - - * 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 -#include -#include -#include -#include -#include -#include - -#include - -#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 -#include -#include -#include -#include -#include -#include - -#ifdef KEYBOX_WITH_OPENPGP -/* include stuff to parse the packets */ -#endif -#ifdef KEYBOX_WITH_X509 -#include -#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 /* 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 -#include -#include -#include -#include - -#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 -#include -#include -#include - -#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 -#include -#include -#include -#include -#include - -#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 -#include -#include -#include -#include - -#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 -#include -#include -#include -#include -#include - -#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 */ -#endif - -#ifdef KEYBOX_WITH_X509 -# include -#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 - - * gpgkeys_hkp.c (write_quoted): Use %-encoding instead of - \-encoding. - (parse_hkp_index): Use new keyserver key listing format, and add - support for disabled keys via include-disabled. - - * gpgkeys_ldap.c (get_key): Don't print keysize unless it's >0. - (printquoted): Use %-encoding instead of \-encoding. - (search_key): Use new keyserver key listing format. - -2002-10-08 David Shaw - - * gpgkeys_ldap.c (search_key, main): Make sure LDAP values are - freed in case of error. - - * gpgkeys_ldap.c (fail_all): New function to unwind a keylist and - error each item. - (main): Call fail_all from here, as needed. Also add a NO_MEMORY - error in an appropriate place and fix error return code. - (ldap_err_to_gpg_err): Add KEYSERVER_UNREACHABLE. - - * gpgkeys_hkp.c (fail_all): New function to unwind a keylist and - error each item. - (main): Call fail_all from here. Also add a NO_MEMORY error in an - appropriate place. - (get_key): Use new UNREACHABLE error for network errors. - -2002-09-26 Werner Koch - - * gpgkeys_ldap.c (send_key): Removed non-constant initializers. - -2002-09-24 David Shaw - - * gpgkeys_ldap.c (ldap_err_to_gpg_err, ldap_to_gpg_err, send_key, - get_key, search_key, main): Some minor error reporting - enhancements for use with GPA (show reasons for KEY FAILED). - - * gpgkeys_hkp.c (send_key, get_key, search_key, main): Some minor - error reporting enhancements for use with GPA (show reasons for - KEY FAILED). - -2002-09-20 Werner Koch - - * gpgkeys_hkp.c (handle_old_hkp_index): s/input/inp/ to avoid - shadowing warning. - -2002-09-19 David Shaw - - * gpgkeys_hkp.c (get_key, handle_old_hkp_index, search_key): - Properly handle line truncation. - -2002-09-16 David Shaw - - * gpgkeys_mailto.in: Add quasi-RFC-2368 mailto:email@addr?from= - syntax so people can set their own email address to respond to. - - * gpgkeys_hkp.c (get_key): Properly respond with KEY FAILED (to - gpg) and "key not found" (to user) on failure. - -2002-09-13 David Shaw - - * gpgkeys_hkp.c: (search_key, handle_old_hkp_index): Try and - request a machine-readable key index. If the server supports - this, pass it through. If the server does not support it, parse - the "index" page. - -2002-09-12 Stefan Bellon - - * gpgkeys_hkp.c: Tidied up RISC OS initializations. - -2002-09-12 David Shaw - - * gpgkeys_hkp.c (main): Remove warning - this is no longer - experimental code. - -2002-09-09 Werner Koch - - * gpgkeys_hkp.c (send_key, get_key, search_key): Check return - value of malloc. - (dehtmlize): Use ascii_tolower to protect against weird locales. - Cast the argument for isspace for the sake of broken HP/UXes. - (search_key): Check return value of realloc. - -2002-09-09 David Shaw - - * gpgkeys_ldap.c (get_key): Some compilers (RISC OS, HPUX c89) - don't like using variables as array initializers. - - * gpgkeys_hkp.c (send_key): Use CRLF in headers. - -2002-08-28 David Shaw - - * gpgkeys_hkp.c (parse_hkp_index): Use same types on all - platforms. This was probably leftover from earlier code where the - typing mattered. - - * gpgkeys_hkp.c: Overall cleanup from iobuf conversion. Be - consistent in m_alloc and malloc usage. Remove include-disabled - (meaningless on HKP). RISC OS tweak. - -2002-08-27 David Shaw - - * gpgkeys_hkp.c, Makefile.am: Convert over to using iobufs. - - * gpgkeys_hkp.c (http_get, http_post): Use CRLF for line endings. - - * gpgkeys_hkp.c: Include util.h on RISC OS as per Stefan. Include - a replacement for hstrerror() for those platforms (such as RISC - OS) that don't have it. - -2002-08-26 David Shaw - - * Makefile.am: May as well include gpgkeys_hkp.c in the - distribution now. It works well enough without proxies, and isn't - built by default. It would be good to get some test experience - with it. - - * gpgkeys_hkp.c (main): Don't warn about include-subkeys - it - isn't unsupported, it's actually non-meaningful in the context of - HKP (yet). - - * gpgkeys_hkp.c (parse_hkp_index, dehtmlize): Move HTML - functionality into new "dehtmlize" function. Remove HTML before - trying to parse each line from the keyserver. If the keyserver - provides key type information in the listing, use it. (Copy over - from g10/hkp.c). - -2002-08-19 David Shaw - - * gpgkeys_hkp.c (get_key, parse_hkp_index): Bring over latest code - from g10/hkp.c. - - * gpgkeys_ldap.c (get_key): Fix cosmetic URL display problem - (extra ":" at the end). - -2002-08-03 Stefan Bellon - - * gpgkeys_ldap.c: Tidied up RISC OS initializations. - -2002-07-25 David Shaw - - * gpgkeys_hkp.c: "Warning" -> "WARNING" - -2002-07-24 David Shaw - - * Makefile.am: Install keyserver helpers in @GNUPG_LIBEXECDIR@ - -2002-07-15 David Shaw - - * gpgkeys_ldap.c (send_key, get_key, main): Consult the server - version string to determine whether to use pgpKey or pgpKeyV2. - -2002-07-09 David Shaw - - * gpgkeys_mailto.in: Use new OPAQUE tag for non net-path URIs. - Fail more elegantly if there is no email address to send to. Show - the GnuPG version in the message body. - -2002-07-04 David Shaw - - * gpgkeys_ldap.c (get_key), gpgkeys_hkp.c (get_key): Display - keyserver URI as a URI, but only if verbose. - -2002-07-01 David Shaw - - * gpgkeys_hkp.c (parse_hkp_index): Error if the keyserver returns - an unparseable HKP response. - - * gpgkeys_hkp.c (main): Warn on honor-http-proxy, - broken-http-proxy, and include-subkeys (not supported yet). - - * gpgkeys_ldap.c (main), gpgkeys_hkp.c (http_connect, main): Fix - some shadowing warnings. - -2002-06-11 David Shaw - - * Makefile.am: Don't hard-code the LDAP libraries - get them from - LDAPLIBS via configure. Also, gpgkeys_hkp is a program, not a - script. - -2002-06-10 David Shaw - - * gpgkeys_ldap.c (include_subkeys): Default "include-subkeys" to - off, since GnuPG now defaults it to on. - -2002-06-06 David Shaw - - * gpgkeys_hkp.c (parse_hkp_index): Type tweaks. - - * gpgkeys_hkp.c (main): Add experimental code warning. - -2002-06-05 David Shaw - - * Makefile.am, gpgkeys_hkp.c (new): Experimental HKP keyserver - interface. - -2002-05-08 David Shaw - - * gpgkeys_ldap.c: Include if we absolutely must. This - helps when compiling against a very old OpenLDAP. - -2002-04-29 David Shaw - - * gpgkeys_mailto.in: Properly handle key requests in full - fingerprint form. - -2002-03-29 David Shaw - - * gpgkeys_ldap.c (printquoted): Quote backslashes within keyserver - search responses. - -2002-02-25 David Shaw - - * gpgkeys_ldap (get_key): LDAP keyservers do not support v3 - fingerprints, so error out if someone tries. Actually, they don't - support any fingerprints, but at least we can calculate a keyid - from a v4 fingerprint. - -2002-02-23 David Shaw - - * gpgkeys_ldap: Clarify the notion of a partial failure. This is - possible if more than one key is being handled in a batch, and one - fails while the other succeeds. Note that a search that comes up - with no results is not a failure - that is a valid response of "no - answer". - - * gpgkeys_ldap.c (get_key): Allow GnuPG to send us full v4 - fingerprints, long key ids, or short key ids while fetching. - Since the LDAP server doesn't actually handle fingerprints, chop - them down to long key ids for actual use. - - * gpgkeys_ldap.c (main, get_key): When searching for a keyid, - search for subkeys as well as primary keys. This is mostly - significant when automatically fetching the key based on the id in - a header (i.e. "signature made by...."). "no-include-subkeys" - disables. - -2002-02-14 David Shaw - - * gpgkeys_ldap.c: Fix compiler warning. - - * gpgkeys_ldap.c: Be much more robust with mangled input files. - -2001-12-28 David Shaw - - * gpgkeys_mailto.in: Use the new OUTOFBAND indicator so gpg knows - not to try and import anything. Also turn on perl -w for - warnings. - - * gpgkeys_ldap.c (main): If we're using temp files (rather than - stdin/stdout), make sure the file is closed when we're done. - -2001-12-20 David Shaw - - * Properly free the LDAP response when we're done with it. - - * Now that we handle multiple keys, we must remove duplicates as - the LDAP keyserver returns keys with multiple user IDs multiple - times. - - * Properly handle multiple keys with the same key ID (it's really - rare, so fetch "0xDEADBEEF" to test this). - -2001-12-17 David Shaw - - * gpgkeys_ldap.c, gpgkeys_mailto.in: Fix GNU capitalization - issues. Prefix log messages with "gpgkeys" to clarify which - program is generating them. - -2001-12-14 David Shaw - - * gpgkeys_ldap.c (search_key): Use unsigned int rather than uint - for portability. - -2001-12-04 David Shaw - - * Initial version of gpgkeys_ldap (LDAP keyserver helper) and - gpgkeys_mailto (email keyserver helper) - - - Copyright 1998, 1999, 2000, 2001, 2002 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 -#include -#include -#include -#include -#include -#include -#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 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/3CB3B415 1998/04/03 David M. Shaw <dshaw@jabberwocky.com> */ - -/* 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 -#include -#include -#include -#include -#include -#include -#ifdef NEED_LBER_H -#include -#endif -#include -#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() -{ - 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() -{ - 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() - { - if(/^KEY (\w+) BEGIN$/) - { - $key=$1; - last; - } - } - - while() - { - 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() -{ - last if($_ eq "\n"); - print STDERR "--command-> $_"; - - if(/^COMMAND (\w+)/) - { - $command=$1; - } -} - -# Get the keylist block - -print STDERR "Keylist block:\n"; - -while() -{ - last if($_ eq "\n"); - print STDERR "--keylist-> $_"; -} - -# If it's a SEND, then get the key material - -if($command eq "SEND") -{ - print STDERR "Key material to send:\n"; - - while() - { - print STDERR "$_"; - } -} - -printf STDERR "gpgkeys_test finished\n"; 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 - - * config.links (powerpc-apple-darwin6.1): Disable assembler - due to non-working modules/as. Suggested by Gordon Worley. - -2002-10-02 David Shaw - - * longlong.h: Some whitespace changes in HPPA to fix assembler - problems on HP-UX. From David Ellement. - -2002-09-20 Werner Koch - - * mpicoder.c (do_get_buffer): Avoid zero length allocation. - Checked that all callers behave properly when NBYTES returns 0 as - the length of the allocated buffer. - -2002-09-10 Werner Koch - - * mpi-bit.c (mpi_normalize): Replaced the check for protected by - is_opaque. - (mpi_get_nbits): Removed the special case for protected MPIs. - * mpicoder.c (do_get_buffer): Likewise. - (mpi_print): Removed the nbit_info printing. - -2002-09-03 Werner Koch - - * mpicoder.c (mpi_set_buffer): Cast all left operands of a shift - to a larger type so that 16 bit CPUs don't suffer from an - overflow. Suggested by TOGAWA Satoshi. - -2002-08-24 David Shaw - - * longlong.h: Remove space between \ and newline. gcc is - complaining. - -2002-08-13 Werner Koch - - * mpicoder.c (do_get_buffer): Don't remove leading zeros if the - MPI is marked as protected. - -2002-08-02 Timo Schulz - - * mpicoder.c: Add a '\n' to all log_bug functions. - -2002-08-01 Werner Koch - - * config.links: Added case for sparc64-netbsd. Suggested by - ww@styx.org. - -2002-07-25 David Shaw - - * config.links: Add special rule for OpenBSD on x86 to use special - i386-openbsd files. OpenBSD (at least until version 3.1) has an - older assembler that won't work with the files in i386. - -2002-07-24 Stefan Bellon - - * longlong.h [__riscos__]: Removed #pragma which is not needed - anymore since the K&R multiline strings are gone. - -2002-07-24 Werner Koch - - * longlong.h: Replaced all K&R multiline strings by ISO ones for - the sake of modern compilers. Suggested by Marco Parrone. - -2002-05-10 Stefan Bellon - - * mpiutil.c (mpi_alloc_like/mpi_debug_alloc_like): Added code - for M_DEBUG. - -2002-04-18 Werner Koch - - * i386/syntax.h (ALIGN): Removed parens from definition - * i386/mpih-add1.S, i386/mpih-sub1.S, i386/mpih-rshift.S, - i386/mpih-lshift.S: Minor syntax changes suggested by Mark Pettit - after comparing the files with those for GMP 4. - -2001-11-08 Werner Koch - - * config.links (mpi_sflags): Add extra rule for sparc64-sun-solaris2. - -2001-08-20 Werner Koch - - * longlong.h [__riscos__]: Need a special pragma here. - -2001-08-09 Werner Koch - - * config.links: Added configuraton for powerpc-openbsd. By Peter - Valchev - -2001-07-09 Werner Koch - - * config.links: Changed the way the list of files to be - symlinked is returned. - -2001-05-27 Werner Koch - - * hppa/, hppa1.1/, pa7100/ : Use .label command instead of labels - because there syntax changed. By Matthew Wilcox. - -2001-05-06 Werner Koch - - * longlong.h: Fixes for ARM by Phil Blundell. - -2001-04-17 Werner Koch - - Updated copyright notices. - -2001-03-24 Werner Koch - - * mpi-mul.c (mpi_mul): Make sure that secret temporary results are - not stored in w. Suggested by Florian Weimer. - -2001-03-18 Werner Koch - - * config.links: Use i386 code for i386. According to tests by - Kevin Ryde the i586 code runs slow on i386 CPUs. Ditto for i786. - -2000-10-24 Werner Koch - - * mips3/: Changed a few comments to C-style. By Jeff Long. - -2000-10-13 Werner Koch - - * mpi.h: Removed the inclusion of mpi-asm-defs.h because this - makes some trouble when doing a VPATH build. configure now - takes care of it. - -2000-10-12 Werner Koch - - * generic/mpi-asm-defs.h: New. - * mips3/mpi-asm-defs.h: New. - * config.links: Create a link to one of the above files. - -Wed Jul 19 11:26:43 CEST 2000 Werner Koch - - * config.links: Support for powerpc--netbsd by Gabriel Rosenkoetter. - -Wed Mar 22 13:50:24 CET 2000 Werner Koch - - * config.links: Add support for FreeBSD 5 and made the case stmt - looking nicer. From Jun Kuriyama. - -Fri Mar 17 17:50:25 CET 2000 Werner Koch - - * config.links (sparc64-unknown-linux-gnu): use udic module. - From Adam Mitchell. - -2000-03-14 12:03:56 Werner Koch (wk@habibti.openit.de) - - * Makefile.am: Do not use .s and .S files but a temp names, so that - OSes with caseinsensitive filenames do work. From Frank Donahoe. - -Tue Mar 7 18:45:31 CET 2000 Werner Koch - - * mpih-mul.c (mpihelp_mul_karatsuba_case): It seems that the - untested part works fine. Removed the debugging message. - - * longlong.h (umul_ppmm): Fixes for ARM-4. By Sean MacLennan. - - * config.links: Add support for NetBSD. - -Thu Jan 13 19:31:58 CET 2000 Werner Koch - - * mpi-internal.h (karatsuba_ctx): New. - * mpih-mul.c (mpihelp_release_karatsuba_ctx): New. - (mpihelp_mul_karatsuba_case): New. - (mpihelp_mul): Splitted to make use of the new functions. - * mpi-pow.c (mpi_powm): Make use of the new splitted function - to avoid multiple allocation of temporary memory during the - karatsuba operations. - - * mpi_mpow.c: Removed the unused Barrett code. - -Sun Dec 19 15:22:26 CET 1999 Werner Koch - - * power/ : Converted more comments to C comments because some AS - complain about ' in comments. - -Thu Dec 16 10:07:58 CET 1999 Werner Koch - - * Makefile.am: c/SFLAGS/ASFLAGS/. This has only been used by the - powerpc and actually never passed the -Wa,foo to the cc. - -Thu Dec 9 10:31:05 CET 1999 Werner Koch - - * power/: Add all files from GMP for this CPU. - - * config.links: Support for BSDI 4.x. By Wayne Chapeskie. - (sparc8): Made the search path the same as sparc9 - - * mpih-div.c (mpihelp_divrem): The MPN_COPY_DECR copied one - elemnat too many. This is gmp2.0.2p9.txt patch. - -Sat Oct 9 20:34:41 CEST 1999 Werner Koch - - * Makefile.am: Removed libtool. - -Mon Aug 30 20:38:33 CEST 1999 Werner Koch - - * config.links: Add case label for DJGPP - -Wed Jul 14 19:42:08 CEST 1999 Werner Koch - - - * Makefile.am: Use .s files as temporaries, disabled other .S rules. - -Wed Jul 7 13:08:40 CEST 1999 Werner Koch - - - * mpicoder.c (g10_log_mpidump): New. - - * Makefile.am: Support for libtool. - -Fri Jul 2 11:45:54 CEST 1999 Werner Koch - - - * mpi-bit.c (mpi_lshift_limbs,mpi_rshift_limbs): New. - * mpi-mpow.c (barrett_mulm): New but diabled. - -Tue Jun 1 16:01:46 CEST 1999 Werner Koch - - * config.links (i[56]86*-*-freebsdelf*): New. - -Sun May 23 14:20:22 CEST 1999 Werner Koch - - * config.links (sysdep.h): Not any more conditionally created. - -Tue May 4 15:47:53 CEST 1999 Werner Koch - - * mpiutil.c (mpi_alloc_like): New. - -Mon Apr 26 17:48:15 CEST 1999 Werner Koch - - * mpih-add.c, mpih-sub.c: Removed - * mpi-inline.c: New. - * mpi-inline.h: Make it usable by mpi-inline.c. - -Sun Apr 18 10:11:28 CEST 1999 Werner Koch - - * mpih-mul.c (mpihelp_mul_n): Fixed use of memory region. - (mpihelp_mul): Ditto. - -Wed Apr 7 20:51:39 CEST 1999 Werner Koch - - * Makefile.am: Explicit rules to invoke cpp on *.S - -Mon Mar 8 20:47:17 CET 1999 Werner Koch - - * config.links: Take advantage of the with_symbol_underscore macro. - Add support for freebsd 4. - -Wed Feb 24 11:07:27 CET 1999 Werner Koch - - * mips3/mpih-sub1.S: Removed left over junk in last line. (Should I - blame me or my editor?). - -Sat Feb 13 12:04:43 CET 1999 Werner Koch - - * Makefile.am: Removed the +=. Add MPI_OPT_FLAGS. - -Sat Jan 9 16:02:23 CET 1999 Werner Koch - - * mpi-cmp.c (mpi_cmp_ui): Normalized the arg. - -Thu Jan 7 18:00:58 CET 1999 Werner Koch - - * mpi-bit.c (mpi_normalize): New. - (mpi_get_nbits): Normalize the MPI. - * mpi-bit.c (mpi_cmp): Normalize the MPI before the compare. - - -Tue Dec 8 13:15:16 CET 1998 Werner Koch - - * config.links: Moved the case for powerpc*linux - * powerpcp32/*.S: Removed some underscores. - -Thu Nov 26 07:27:52 1998 Werner Koch - - * config.links: Support for ppc with ELF - * powerpc32/syntax.h: New. - * powerpc32/*.S: Applied ELF patches (glibc patches) - -Tue Nov 10 19:31:37 1998 Werner Koch (wk@isil.d.shuttle.de) - - * power*/ : Started with stuff for PPC - * config.links: Some stuff for PPC. - * generic/udiv-w-sdiv.c: New but disabled. - -Tue Oct 27 12:37:46 1998 Werner Koch (wk@isil.d.shuttle.de) - - * config.links (freebsd): Fixes for FreeBSD 3.0 - -Wed Oct 14 09:59:30 1998 Werner Koch (wk@isil.d.shuttle.de) - - * config.links (freebsd): ELF patches from Jun Kuriyama. - -Thu Oct 8 13:28:17 1998 Werner Koch (wk@isil.d.shuttle.de) - - * mpi-mpow.c (mpi_mulpowm): Fixed mem leak (m_free/mpi_free). - -Thu Sep 17 18:08:50 1998 Werner Koch (wk@(none)) - - * hppa1.1/udiv-qrnnd.S: Fix from Steffen Zahn for HPUX 10.20 - -Thu Aug 6 16:39:28 1998 Werner Koch,mobil,,, (wk@tobold) - - * mpi-bit.c (mpi_set_bytes): Removed. - -Wed Aug 5 15:11:12 1998 Werner Koch (wk@(none)) - - * mpicoder.c (mpi_read_from_buffer): New. - - * mpiutil.c (mpi_set_opaque): New. - (mpi_get_opaque): New. - (mpi_copy): Changed to support opauqe flag - (mpi_free): Ditto. - -Sat Jul 4 10:11:11 1998 Werner Koch (wk@isil.d.shuttle.de) - - * mpiutil.c (mpi_clear): Reset flags. - (mpi_set): Ditto. - (mpi_alloc_secure): Set flag to 1 and not ored the 1 in, tsss.. - -Fri Jun 26 11:19:06 1998 Werner Koch (wk@isil.d.shuttle.de) - - * mpiutil.c (mpi_alloc): set nbits to 0. - (mpi_alloc_secure): Ditto. - (mpi_clear): Ditto. - -Thu Jun 25 11:50:01 1998 Werner Koch (wk@isil.d.shuttle.de) - - * mips3/*.S: New - -Mon May 18 13:47:06 1998 Werner Koch (wk@isil.d.shuttle.de) - - * config.links: split mpih-shift into mpih-[lr]shift and - changed all implementations. - * mpi/alpha: add some new assembler stuff. - -Wed May 13 11:04:29 1998 Werner Koch (wk@isil.d.shuttle.de) - - * config.links: Add support for MIPS - -Thu Apr 9 11:31:36 1998 Werner Koch (wk@isil.d.shuttle.de) - - * mpicoder.c (mpi_get_secure_buffer): New. - -Wed Apr 8 09:44:33 1998 Werner Koch (wk@isil.d.shuttle.de) - - * config.links: Applied small fix from Ulf 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 <>./mpi/sysdep.h -#if __STDC__ -#define C_SYMBOL_NAME(name) _##name -#else -#define C_SYMBOL_NAME(name) _/**/name -#endif -EOF -else - cat <>./mpi/sysdep.h -#define C_SYMBOL_NAME(name) name -EOF -fi - - -# fixme: grep these modules from Makefile.in -mpi_ln_modules="${mpi_extra_modules} mpih-add1 mpih-mul1 mpih-mul2 mpih-mul3 \ - mpih-lshift mpih-rshift mpih-sub1" - -mpi_ln_objects= -mpi_ln_list= - -# try to get file to link from the assembler subdirectory and -# if this fails get it from the generic subdirectory. -path="$path generic" -for fn in $mpi_ln_modules ; do - mpi_ln_objects="$mpi_ln_objects $fn.o" - for dir in $path ; do - rm -f $srcdir/mpi/$fn.[Sc] - if test -f $srcdir/mpi/$dir/$fn.S ; then - mpi_ln_list="$mpi_ln_list mpi/$fn.S:mpi/$dir/$fn.S" - break; - elif test -f $srcdir/mpi/$dir/$fn.c ; then - mpi_ln_list="$mpi_ln_list mpi/$fn.c:mpi/$dir/$fn.c" - break; - fi - done -done - -# Same thing for the file which defines the limb size -path="$path generic" -for dir in $path ; do - rm -f $srcdir/mpi/mpi-asm-defs.h - if test -f $srcdir/mpi/$dir/mpi-asm-defs.h ; then - mpi_ln_list="$mpi_ln_list mpi/mpi-asm-defs.h:mpi/$dir/mpi-asm-defs.h" - break; - fi -done 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 -#include -#include -#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 -#include -#include -#include "mpi-internal.h" -#include "longlong.h" - -mpi_limb_t -mpihelp_add_n( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, - mpi_ptr_t s2_ptr, mpi_size_t size) -{ - mpi_limb_t x, y, cy; - mpi_size_t j; - - /* The loop counter and index J goes from -SIZE to -1. This way - the loop becomes faster. */ - j = -size; - - /* Offset the base pointers to compensate for the negative indices. */ - s1_ptr -= j; - s2_ptr -= j; - res_ptr -= j; - - cy = 0; - do { - y = s2_ptr[j]; - x = s1_ptr[j]; - y += cy; /* add previous carry to one addend */ - cy = y < cy; /* get out carry from that addition */ - y += x; /* add other addend */ - cy += y < x; /* get out carry from that add, combine */ - res_ptr[j] = y; - } while( ++j ); - - return cy; -} - 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 -#include -#include -#include "mpi-internal.h" - -/* Shift U (pointed to by UP and USIZE digits long) CNT bits to the left - * and store the USIZE least significant digits of the result at WP. - * Return the bits shifted out from the most significant digit. - * - * Argument constraints: - * 1. 0 < CNT < BITS_PER_MP_LIMB - * 2. If the result is to be written over the input, WP must be >= UP. - */ - -mpi_limb_t -mpihelp_lshift( mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize, - unsigned int cnt) -{ - mpi_limb_t high_limb, low_limb; - unsigned sh_1, sh_2; - mpi_size_t i; - mpi_limb_t retval; - - sh_1 = cnt; - wp += 1; - sh_2 = BITS_PER_MPI_LIMB - sh_1; - i = usize - 1; - low_limb = up[i]; - retval = low_limb >> sh_2; - high_limb = low_limb; - while( --i >= 0 ) { - low_limb = up[i]; - wp[i] = (high_limb << sh_1) | (low_limb >> sh_2); - high_limb = low_limb; - } - wp[i] = high_limb << sh_1; - - return retval; -} - - 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 -#include -#include -#include "mpi-internal.h" -#include "longlong.h" - -mpi_limb_t -mpihelp_mul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, - mpi_limb_t s2_limb) -{ - mpi_limb_t cy_limb; - mpi_size_t j; - mpi_limb_t prod_high, prod_low; - - /* The loop counter and index J goes from -S1_SIZE to -1. This way - * the loop becomes faster. */ - j = -s1_size; - - /* Offset the base pointers to compensate for the negative indices. */ - s1_ptr -= j; - res_ptr -= j; - - cy_limb = 0; - do { - umul_ppmm( prod_high, prod_low, s1_ptr[j], s2_limb ); - prod_low += cy_limb; - cy_limb = (prod_low < cy_limb?1:0) + prod_high; - res_ptr[j] = prod_low; - } while( ++j ); - - return cy_limb; -} - 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 -#include -#include -#include "mpi-internal.h" -#include "longlong.h" - - -mpi_limb_t -mpihelp_addmul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, - mpi_size_t s1_size, mpi_limb_t s2_limb) -{ - mpi_limb_t cy_limb; - mpi_size_t j; - mpi_limb_t prod_high, prod_low; - mpi_limb_t x; - - /* The loop counter and index J goes from -SIZE to -1. This way - * the loop becomes faster. */ - j = -s1_size; - res_ptr -= j; - s1_ptr -= j; - - cy_limb = 0; - do { - umul_ppmm( prod_high, prod_low, s1_ptr[j], s2_limb ); - - prod_low += cy_limb; - cy_limb = (prod_low < cy_limb?1:0) + prod_high; - - x = res_ptr[j]; - prod_low = x + prod_low; - cy_limb += prod_low < x?1:0; - res_ptr[j] = prod_low; - } while ( ++j ); - return cy_limb; -} - - 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 -#include -#include -#include "mpi-internal.h" -#include "longlong.h" - - -mpi_limb_t -mpihelp_submul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, - mpi_size_t s1_size, mpi_limb_t s2_limb) -{ - mpi_limb_t cy_limb; - mpi_size_t j; - mpi_limb_t prod_high, prod_low; - mpi_limb_t x; - - /* The loop counter and index J goes from -SIZE to -1. This way - * the loop becomes faster. */ - j = -s1_size; - res_ptr -= j; - s1_ptr -= j; - - cy_limb = 0; - do { - umul_ppmm( prod_high, prod_low, s1_ptr[j], s2_limb); - - prod_low += cy_limb; - cy_limb = (prod_low < cy_limb?1:0) + prod_high; - - x = res_ptr[j]; - prod_low = x - prod_low; - cy_limb += prod_low > x?1:0; - res_ptr[j] = prod_low; - } while( ++j ); - - return cy_limb; -} - - 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 -#include -#include -#include "mpi-internal.h" - - -/* Shift U (pointed to by UP and USIZE limbs long) CNT bits to the right - * and store the USIZE least significant limbs of the result at WP. - * The bits shifted out to the right are returned. - * - * Argument constraints: - * 1. 0 < CNT < BITS_PER_MP_LIMB - * 2. If the result is to be written over the input, WP must be <= UP. - */ - -mpi_limb_t -mpihelp_rshift( mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize, unsigned cnt) -{ - mpi_limb_t high_limb, low_limb; - unsigned sh_1, sh_2; - mpi_size_t i; - mpi_limb_t retval; - - sh_1 = cnt; - wp -= 1; - sh_2 = BITS_PER_MPI_LIMB - sh_1; - high_limb = up[0]; - retval = high_limb << sh_2; - low_limb = high_limb; - for( i=1; i < usize; i++) { - high_limb = up[i]; - wp[i] = (low_limb >> sh_1) | (high_limb << sh_2); - low_limb = high_limb; - } - wp[i] = low_limb >> sh_1; - - return retval; -} - 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 -#include -#include -#include "mpi-internal.h" -#include "longlong.h" - -mpi_limb_t -mpihelp_sub_n( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, - mpi_ptr_t s2_ptr, mpi_size_t size) -{ - mpi_limb_t x, y, cy; - mpi_size_t j; - - /* The loop counter and index J goes from -SIZE to -1. This way - the loop becomes faster. */ - j = -size; - - /* Offset the base pointers to compensate for the negative indices. */ - s1_ptr -= j; - s2_ptr -= j; - res_ptr -= j; - - cy = 0; - do { - y = s2_ptr[j]; - x = s1_ptr[j]; - y += cy; /* add previous carry to subtrahend */ - cy = y < cy; /* get out carry from that addition */ - y = x - y; /* main subtract */ - cy += y > x; /* get out carry from the subtract, combine */ - res_ptr[j] = y; - } while( ++j ); - - return cy; -} - - 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 -#include -#include -#include "mpi-internal.h" -#include "longlong.h" - - -#if 0 /* not yet ported to MPI */ - -mpi_limb_t -mpihelp_udiv_w_sdiv( mpi_limp_t *rp, - mpi_limp_t *a1, - mpi_limp_t *a0, - mpi_limp_t *d ) -{ - mp_limb_t q, r; - mp_limb_t c0, c1, b1; - - if ((mpi_limb_signed_t) d >= 0) - { - if (a1 < d - a1 - (a0 >> (BITS_PER_MP_LIMB - 1))) - { - /* dividend, divisor, and quotient are nonnegative */ - sdiv_qrnnd (q, r, a1, a0, d); - } - else - { - /* Compute c1*2^32 + c0 = a1*2^32 + a0 - 2^31*d */ - sub_ddmmss (c1, c0, a1, a0, d >> 1, d << (BITS_PER_MP_LIMB - 1)); - /* Divide (c1*2^32 + c0) by d */ - sdiv_qrnnd (q, r, c1, c0, d); - /* Add 2^31 to quotient */ - q += (mp_limb_t) 1 << (BITS_PER_MP_LIMB - 1); - } - } - else - { - b1 = d >> 1; /* d/2, between 2^30 and 2^31 - 1 */ - c1 = a1 >> 1; /* A/2 */ - c0 = (a1 << (BITS_PER_MP_LIMB - 1)) + (a0 >> 1); - - if (a1 < b1) /* A < 2^32*b1, so A/2 < 2^31*b1 */ - { - sdiv_qrnnd (q, r, c1, c0, b1); /* (A/2) / (d/2) */ - - r = 2*r + (a0 & 1); /* Remainder from A/(2*b1) */ - if ((d & 1) != 0) - { - if (r >= q) - r = r - q; - else if (q - r <= d) - { - r = r - q + d; - q--; - } - else - { - r = r - q + 2*d; - q -= 2; - } - } - } - else if (c1 < b1) /* So 2^31 <= (A/2)/b1 < 2^32 */ - { - c1 = (b1 - 1) - c1; - c0 = ~c0; /* logical NOT */ - - sdiv_qrnnd (q, r, c1, c0, b1); /* (A/2) / (d/2) */ - - q = ~q; /* (A/2)/b1 */ - r = (b1 - 1) - r; - - r = 2*r + (a0 & 1); /* A/(2*b1) */ - - if ((d & 1) != 0) - { - if (r >= q) - r = r - q; - else if (q - r <= d) - { - r = r - q + d; - q--; - } - else - { - r = r - q + 2*d; - q -= 2; - } - } - } - else /* Implies c1 = b1 */ - { /* Hence a1 = d - 1 = 2*b1 - 1 */ - if (a0 >= -d) - { - q = -1; - r = a0 + d; - } - else - { - q = -2; - r = a0 + 2*d; - } - } - } - - *rp = r; - return q; -} - -#endif - 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< 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 -#include -#include - -#include "mpi-internal.h" - - -/**************** - * Add the unsigned integer V to the mpi-integer U and store the - * result in W. U and V may be the same. - */ -void -mpi_add_ui(MPI w, MPI u, unsigned long v ) -{ - mpi_ptr_t wp, up; - mpi_size_t usize, wsize; - int usign, wsign; - - usize = u->nlimbs; - usign = u->sign; - wsign = 0; - - /* If not space for W (and possible carry), increase space. */ - wsize = usize + 1; - if( w->alloced < wsize ) - mpi_resize(w, wsize); - - /* These must be after realloc (U may be the same as W). */ - up = u->d; - wp = w->d; - - if( !usize ) { /* simple */ - wp[0] = v; - wsize = v? 1:0; - } - else if( !usign ) { /* mpi is not negative */ - mpi_limb_t cy; - cy = mpihelp_add_1(wp, up, usize, v); - wp[usize] = cy; - wsize = usize + cy; - } - else { /* The signs are different. Need exact comparison to determine - * which operand to subtract from which. */ - if( usize == 1 && up[0] < v ) { - wp[0] = v - up[0]; - wsize = 1; - } - else { - mpihelp_sub_1(wp, up, usize, v); - /* Size can decrease with at most one limb. */ - wsize = usize - (wp[usize-1]==0); - wsign = 1; - } - } - - w->nlimbs = wsize; - w->sign = wsign; -} - - -void -mpi_add(MPI w, MPI u, MPI v) -{ - mpi_ptr_t wp, up, vp; - mpi_size_t usize, vsize, wsize; - int usign, vsign, wsign; - - if( u->nlimbs < v->nlimbs ) { /* Swap U and V. */ - usize = v->nlimbs; - usign = v->sign; - vsize = u->nlimbs; - vsign = u->sign; - wsize = usize + 1; - RESIZE_IF_NEEDED(w, wsize); - /* These must be after realloc (u or v may be the same as w). */ - up = v->d; - vp = u->d; - } - else { - usize = u->nlimbs; - usign = u->sign; - vsize = v->nlimbs; - vsign = v->sign; - wsize = usize + 1; - RESIZE_IF_NEEDED(w, wsize); - /* These must be after realloc (u or v may be the same as w). */ - up = u->d; - vp = v->d; - } - wp = w->d; - wsign = 0; - - if( !vsize ) { /* simple */ - MPN_COPY(wp, up, usize ); - wsize = usize; - wsign = usign; - } - else if( usign != vsign ) { /* different sign */ - /* This test is right since USIZE >= VSIZE */ - if( usize != vsize ) { - mpihelp_sub(wp, up, usize, vp, vsize); - wsize = usize; - MPN_NORMALIZE(wp, wsize); - wsign = usign; - } - else if( mpihelp_cmp(up, vp, usize) < 0 ) { - mpihelp_sub_n(wp, vp, up, usize); - wsize = usize; - MPN_NORMALIZE(wp, wsize); - if( !usign ) - wsign = 1; - } - else { - mpihelp_sub_n(wp, up, vp, usize); - wsize = usize; - MPN_NORMALIZE(wp, wsize); - if( usign ) - wsign = 1; - } - } - else { /* U and V have same sign. Add them. */ - mpi_limb_t cy = mpihelp_add(wp, up, usize, vp, vsize); - wp[usize] = cy; - wsize = usize + cy; - if( usign ) - wsign = 1; - } - - w->nlimbs = wsize; - w->sign = wsign; -} - - -/**************** - * Subtract the unsigned integer V from the mpi-integer U and store the - * result in W. - */ -void -mpi_sub_ui(MPI w, MPI u, unsigned long v ) -{ - mpi_ptr_t wp, up; - mpi_size_t usize, wsize; - int usign, wsign; - - usize = u->nlimbs; - usign = u->sign; - wsign = 0; - - /* If not space for W (and possible carry), increase space. */ - wsize = usize + 1; - if( w->alloced < wsize ) - mpi_resize(w, wsize); - - /* These must be after realloc (U may be the same as W). */ - up = u->d; - wp = w->d; - - if( !usize ) { /* simple */ - wp[0] = v; - wsize = v? 1:0; - wsign = 1; - } - else if( usign ) { /* mpi and v are negative */ - mpi_limb_t cy; - cy = mpihelp_add_1(wp, up, usize, v); - wp[usize] = cy; - wsize = usize + cy; - } - else { /* The signs are different. Need exact comparison to determine - * which operand to subtract from which. */ - if( usize == 1 && up[0] < v ) { - wp[0] = v - up[0]; - wsize = 1; - wsign = 1; - } - else { - mpihelp_sub_1(wp, up, usize, v); - /* Size can decrease with at most one limb. */ - wsize = usize - (wp[usize-1]==0); - } - } - - w->nlimbs = wsize; - w->sign = wsign; -} - -void -mpi_sub(MPI w, MPI u, MPI v) -{ - if( w == v ) { - MPI vv = mpi_copy(v); - vv->sign = !vv->sign; - mpi_add( w, u, vv ); - mpi_free(vv); - } - else { - /* fixme: this is not thread-save (we temp. modify v) */ - v->sign = !v->sign; - mpi_add( w, u, v ); - v->sign = !v->sign; - } -} - - -void -mpi_addm( MPI w, MPI u, MPI v, MPI m) -{ - mpi_add(w, u, v); - mpi_fdiv_r( w, w, m ); -} - -void -mpi_subm( MPI w, MPI u, MPI v, MPI m) -{ - mpi_sub(w, u, v); - mpi_fdiv_r( w, w, m ); -} - 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 -#include -#include -#include -#include "mpi-internal.h" -#include "longlong.h" - - -#ifdef MPI_INTERNAL_NEED_CLZ_TAB -#ifdef __STDC__ -const -#endif -unsigned char -__clz_tab[] = -{ - 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, - 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, - 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, - 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, -}; -#endif - - -#define A_LIMB_1 ((mpi_limb_t)1) - - -/**************** - * Sometimes we have MSL (most significant limbs) which are 0; - * this is for some reasons not good, so this function removes them. - */ -void -mpi_normalize( MPI a ) -{ - if( mpi_is_opaque (a) ) - return; - - for( ; a->nlimbs && !a->d[a->nlimbs-1]; a->nlimbs-- ) - ; -} - - - -/**************** - * Return the number of bits in A. - */ -unsigned -mpi_get_nbits( MPI a ) -{ - unsigned n; - - mpi_normalize( a ); - if( a->nlimbs ) { - mpi_limb_t alimb = a->d[a->nlimbs-1]; - if( alimb ) - count_leading_zeros( n, alimb ); - else - n = BITS_PER_MPI_LIMB; - n = BITS_PER_MPI_LIMB - n + (a->nlimbs-1) * BITS_PER_MPI_LIMB; - } - else - n = 0; - return n; -} - - -/**************** - * Test whether bit N is set. - */ -int -mpi_test_bit( MPI a, unsigned n ) -{ - unsigned limbno, bitno; - mpi_limb_t limb; - - limbno = n / BITS_PER_MPI_LIMB; - bitno = n % BITS_PER_MPI_LIMB; - - if( limbno >= a->nlimbs ) - return 0; /* too far left: this is a 0 */ - limb = a->d[limbno]; - return (limb & (A_LIMB_1 << bitno))? 1: 0; -} - - -/**************** - * Set bit N of A. - */ -void -mpi_set_bit( MPI a, unsigned n ) -{ - unsigned limbno, bitno; - - limbno = n / BITS_PER_MPI_LIMB; - bitno = n % BITS_PER_MPI_LIMB; - - if( limbno >= a->nlimbs ) { /* resize */ - if( a->alloced >= limbno ) - mpi_resize(a, limbno+1 ); - a->nlimbs = limbno+1; - } - a->d[limbno] |= (A_LIMB_1<= a->nlimbs ) { /* resize */ - if( a->alloced >= limbno ) - mpi_resize(a, limbno+1 ); - a->nlimbs = limbno+1; - } - a->d[limbno] |= (A_LIMB_1<d[limbno] &= ~(A_LIMB_1 << bitno); - a->nlimbs = limbno+1; -} - -/**************** - * clear bit N of A and all bits above - */ -void -mpi_clear_highbit( MPI a, unsigned n ) -{ - unsigned limbno, bitno; - - limbno = n / BITS_PER_MPI_LIMB; - bitno = n % BITS_PER_MPI_LIMB; - - if( limbno >= a->nlimbs ) - return; /* not allocated, so need to clear bits :-) */ - - for( ; bitno < BITS_PER_MPI_LIMB; bitno++ ) - a->d[limbno] &= ~(A_LIMB_1 << bitno); - a->nlimbs = limbno+1; -} - -/**************** - * Clear bit N of A. - */ -void -mpi_clear_bit( MPI a, unsigned n ) -{ - unsigned limbno, bitno; - - limbno = n / BITS_PER_MPI_LIMB; - bitno = n % BITS_PER_MPI_LIMB; - - if( limbno >= a->nlimbs ) - return; /* don't need to clear this bit, it's to far to left */ - a->d[limbno] &= ~(A_LIMB_1 << bitno); -} - - -/**************** - * Shift A by N bits to the right - * FIXME: should use alloc_limb if X and A are same. - */ -void -mpi_rshift( MPI x, MPI a, unsigned n ) -{ - mpi_ptr_t xp; - mpi_size_t xsize; - - xsize = a->nlimbs; - x->sign = a->sign; - RESIZE_IF_NEEDED(x, xsize); - xp = x->d; - - if( xsize ) { - mpihelp_rshift( xp, a->d, xsize, n); - MPN_NORMALIZE( xp, xsize); - } - x->nlimbs = xsize; -} - - -/**************** - * Shift A by COUNT limbs to the left - * This is used only within the MPI library - */ -void -mpi_lshift_limbs( MPI a, unsigned int count ) -{ - mpi_ptr_t ap = a->d; - int n = a->nlimbs; - int i; - - if( !count || !n ) - return; - - RESIZE_IF_NEEDED( a, n+count ); - - for( i = n-1; i >= 0; i-- ) - ap[i+count] = ap[i]; - for(i=0; i < count; i++ ) - ap[i] = 0; - a->nlimbs += count; -} - - -/**************** - * Shift A by COUNT limbs to the right - * This is used only within the MPI library - */ -void -mpi_rshift_limbs( MPI a, unsigned int count ) -{ - mpi_ptr_t ap = a->d; - mpi_size_t n = a->nlimbs; - unsigned int i; - - if( count >= n ) { - a->nlimbs = 0; - return; - } - - for( i = 0; i < n - count; i++ ) - ap[i] = ap[i+count]; - ap[i] = 0; - a->nlimbs -= count; -} - - 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 -#include -#include -#include "mpi-internal.h" - -int -mpi_cmp_ui( MPI u, unsigned long v ) -{ - mpi_limb_t limb = v; - - mpi_normalize( u ); - if( !u->nlimbs && !limb ) - return 0; - if( u->sign ) - return -1; - if( u->nlimbs > 1 ) - return 1; - - if( u->d[0] == limb ) - return 0; - else if( u->d[0] > limb ) - return 1; - else - return -1; -} - -int -mpi_cmp( MPI u, MPI v ) -{ - mpi_size_t usize, vsize; - int cmp; - - 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 -#include -#include -#include "mpi-internal.h" -#include "longlong.h" - - - -void -mpi_fdiv_r( MPI rem, MPI dividend, MPI divisor ) -{ - int divisor_sign = divisor->sign; - MPI temp_divisor = NULL; - - /* We need the original value of the divisor after the remainder has been - * preliminary calculated. We have to copy it to temporary space if it's - * the same variable as REM. */ - if( rem == divisor ) { - temp_divisor = mpi_copy( divisor ); - divisor = temp_divisor; - } - - mpi_tdiv_r( rem, dividend, divisor ); - - if( ((divisor_sign?1:0) ^ (dividend->sign?1:0)) && rem->nlimbs ) - mpi_add( rem, rem, divisor); - - if( temp_divisor ) - mpi_free(temp_divisor); -} - - - -/**************** - * Division rounding the quotient towards -infinity. - * The remainder gets the same sign as the denominator. - * rem is optional - */ - -ulong -mpi_fdiv_r_ui( MPI rem, MPI dividend, ulong divisor ) -{ - mpi_limb_t rlimb; - - rlimb = mpihelp_mod_1( dividend->d, dividend->nlimbs, divisor ); - if( rlimb && dividend->sign ) - rlimb = divisor - rlimb; - - if( rem ) { - rem->d[0] = rlimb; - rem->nlimbs = rlimb? 1:0; - } - return rlimb; -} - - -void -mpi_fdiv_q( MPI quot, MPI dividend, MPI divisor ) -{ - MPI tmp = mpi_alloc( mpi_get_nlimbs(quot) ); - mpi_fdiv_qr( quot, tmp, dividend, divisor); - mpi_free(tmp); -} - -void -mpi_fdiv_qr( MPI quot, MPI rem, MPI dividend, MPI divisor ) -{ - int divisor_sign = divisor->sign; - MPI temp_divisor = NULL; - - if( quot == divisor || rem == divisor ) { - temp_divisor = mpi_copy( divisor ); - divisor = temp_divisor; - } - - mpi_tdiv_qr( quot, rem, dividend, divisor ); - - if( (divisor_sign ^ dividend->sign) && rem->nlimbs ) { - mpi_sub_ui( quot, quot, 1 ); - mpi_add( rem, rem, divisor); - } - - if( temp_divisor ) - mpi_free(temp_divisor); -} - - -/* If den == quot, den needs temporary storage. - * If den == rem, den needs temporary storage. - * If num == quot, num needs temporary storage. - * If den has temporary storage, it can be normalized while being copied, - * i.e no extra storage should be allocated. - */ - -void -mpi_tdiv_r( MPI rem, MPI num, MPI den) -{ - mpi_tdiv_qr(NULL, rem, num, den ); -} - -void -mpi_tdiv_qr( MPI quot, MPI rem, MPI num, MPI den) -{ - mpi_ptr_t np, dp; - mpi_ptr_t qp, rp; - mpi_size_t nsize = num->nlimbs; - mpi_size_t dsize = den->nlimbs; - mpi_size_t qsize, rsize; - mpi_size_t sign_remainder = num->sign; - mpi_size_t sign_quotient = num->sign ^ den->sign; - unsigned normalization_steps; - mpi_limb_t q_limb; - mpi_ptr_t marker[5]; - int markidx=0; - - /* Ensure space is enough for quotient and remainder. - * We need space for an extra limb in the remainder, because it's - * up-shifted (normalized) below. */ - rsize = nsize + 1; - mpi_resize( rem, rsize); - - qsize = rsize - dsize; /* qsize cannot be bigger than this. */ - if( qsize <= 0 ) { - if( num != rem ) { - rem->nlimbs = num->nlimbs; - rem->sign = num->sign; - MPN_COPY(rem->d, num->d, nsize); - } - if( quot ) { - /* This needs to follow the assignment to rem, in case the - * numerator and quotient are the same. */ - quot->nlimbs = 0; - quot->sign = 0; - } - return; - } - - if( quot ) - mpi_resize( quot, qsize); - - /* Read pointers here, when reallocation is finished. */ - np = num->d; - dp = den->d; - rp = rem->d; - - /* Optimize division by a single-limb divisor. */ - if( dsize == 1 ) { - mpi_limb_t rlimb; - if( quot ) { - qp = quot->d; - rlimb = mpihelp_divmod_1( qp, np, nsize, dp[0] ); - qsize -= qp[qsize - 1] == 0; - quot->nlimbs = qsize; - quot->sign = sign_quotient; - } - else - rlimb = mpihelp_mod_1( np, nsize, dp[0] ); - rp[0] = rlimb; - rsize = rlimb != 0?1:0; - rem->nlimbs = rsize; - rem->sign = sign_remainder; - return; - } - - - if( quot ) { - qp = quot->d; - /* Make sure QP and NP point to different objects. Otherwise the - * numerator would be gradually overwritten by the quotient limbs. */ - if(qp == np) { /* Copy NP object to temporary space. */ - np = marker[markidx++] = mpi_alloc_limb_space(nsize, - mpi_is_secure(quot)); - MPN_COPY(np, qp, nsize); - } - } - else /* Put quotient at top of remainder. */ - qp = rp + dsize; - - count_leading_zeros( normalization_steps, dp[dsize - 1] ); - - /* Normalize the denominator, i.e. make its most significant bit set by - * shifting it NORMALIZATION_STEPS bits to the left. Also shift the - * numerator the same number of steps (to keep the quotient the same!). - */ - if( normalization_steps ) { - mpi_ptr_t tp; - mpi_limb_t nlimb; - - /* Shift up the denominator setting the most significant bit of - * the most significant word. Use temporary storage not to clobber - * the original contents of the denominator. */ - tp = marker[markidx++] = mpi_alloc_limb_space(dsize,mpi_is_secure(den)); - mpihelp_lshift( tp, dp, dsize, normalization_steps ); - dp = tp; - - /* Shift up the numerator, possibly introducing a new most - * significant word. Move the shifted numerator in the remainder - * meanwhile. */ - nlimb = mpihelp_lshift(rp, np, nsize, normalization_steps); - if( nlimb ) { - rp[nsize] = nlimb; - rsize = nsize + 1; - } - else - rsize = nsize; - } - else { - /* The denominator is already normalized, as required. Copy it to - * temporary space if it overlaps with the quotient or remainder. */ - if( dp == rp || (quot && (dp == qp))) { - mpi_ptr_t tp; - - tp = marker[markidx++] = mpi_alloc_limb_space(dsize, mpi_is_secure(den)); - MPN_COPY( tp, dp, dsize ); - dp = tp; - } - - /* Move the numerator to the remainder. */ - if( rp != np ) - MPN_COPY(rp, np, nsize); - - rsize = nsize; - } - - q_limb = mpihelp_divrem( qp, 0, rp, rsize, dp, dsize ); - - if( quot ) { - qsize = rsize - dsize; - if(q_limb) { - qp[qsize] = q_limb; - qsize += 1; - } - - quot->nlimbs = qsize; - quot->sign = sign_quotient; - } - - rsize = dsize; - MPN_NORMALIZE (rp, rsize); - - if( normalization_steps && rsize ) { - mpihelp_rshift(rp, rp, rsize, normalization_steps); - rsize -= rp[rsize - 1] == 0?1:0; - } - - rem->nlimbs = rsize; - rem->sign = sign_remainder; - while( markidx ) - mpi_free_limb_space(marker[--markidx]); -} - -void -mpi_tdiv_q_2exp( MPI w, MPI u, unsigned count ) -{ - mpi_size_t usize, wsize; - mpi_size_t limb_cnt; - - usize = u->nlimbs; - limb_cnt = count / BITS_PER_MPI_LIMB; - wsize = usize - limb_cnt; - if( limb_cnt >= usize ) - w->nlimbs = 0; - else { - mpi_ptr_t wp; - mpi_ptr_t up; - - RESIZE_IF_NEEDED( w, wsize ); - wp = w->d; - up = u->d; - - count %= BITS_PER_MPI_LIMB; - if( count ) { - mpihelp_rshift( wp, up + limb_cnt, wsize, count ); - wsize -= !wp[wsize - 1]; - } - else { - MPN_COPY_INCR( wp, up + limb_cnt, wsize); - } - - w->nlimbs = wsize; - } -} - -/**************** - * Check whether dividend is divisible by divisor - * (note: divisor must fit into a limb) - */ -int -mpi_divisible_ui(MPI dividend, ulong divisor ) -{ - return !mpihelp_mod_1( dividend->d, dividend->nlimbs, divisor ); -} - 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 -#include -#include -#include "mpi-internal.h" - -/**************** - * Find the greatest common divisor G of A and B. - * Return: true if this 1, false in all other cases - */ -int -mpi_gcd( MPI g, MPI xa, MPI xb ) -{ - MPI a, b; - - a = mpi_copy(xa); - b = mpi_copy(xb); - - /* TAOCP Vol II, 4.5.2, Algorithm A */ - a->sign = 0; - b->sign = 0; - while( mpi_cmp_ui( b, 0 ) ) { - mpi_fdiv_r( g, a, b ); /* g used as temorary variable */ - mpi_set(a,b); - mpi_set(b,g); - } - mpi_set(g, a); - - mpi_free(a); - mpi_free(b); - return !mpi_cmp_ui( g, 1); -} - - - 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 -#include -#include - -/* put the inline functions as real functions into the lib */ -#define G10_MPI_INLINE_DECL - -#include "mpi-internal.h" - -/* always include the header becuase it is only - * included by mpi-internal if __GCC__ is defined but we - * need it here in all cases and the above definition of - * of the macro allows us to do so - */ -#include "mpi-inline.h" - 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 -#include -#include -#include "mpi-internal.h" - - -/**************** - * Calculate the multiplicative inverse X of A mod N - * That is: Find the solution x for - * 1 = (a*x) mod n - */ -void -mpi_invm( MPI x, MPI a, MPI n ) -{ - #if 0 - MPI u, v, u1, u2, u3, v1, v2, v3, q, t1, t2, t3; - MPI ta, tb, tc; - - u = mpi_copy(a); - v = mpi_copy(n); - u1 = mpi_alloc_set_ui(1); - u2 = mpi_alloc_set_ui(0); - u3 = mpi_copy(u); - v1 = mpi_alloc_set_ui(0); - v2 = mpi_alloc_set_ui(1); - v3 = mpi_copy(v); - q = mpi_alloc( mpi_get_nlimbs(u)+1 ); - t1 = mpi_alloc( mpi_get_nlimbs(u)+1 ); - t2 = mpi_alloc( mpi_get_nlimbs(u)+1 ); - t3 = mpi_alloc( mpi_get_nlimbs(u)+1 ); - while( mpi_cmp_ui( v3, 0 ) ) { - mpi_fdiv_q( q, u3, v3 ); - mpi_mul(t1, v1, q); mpi_mul(t2, v2, q); mpi_mul(t3, v3, q); - mpi_sub(t1, u1, t1); mpi_sub(t2, u2, t2); mpi_sub(t3, u3, t3); - mpi_set(u1, v1); mpi_set(u2, v2); mpi_set(u3, v3); - mpi_set(v1, t1); mpi_set(v2, t2); mpi_set(v3, t3); - } - /* log_debug("result:\n"); - log_mpidump("q =", q ); - log_mpidump("u1=", u1); - log_mpidump("u2=", u2); - log_mpidump("u3=", u3); - log_mpidump("v1=", v1); - log_mpidump("v2=", v2); */ - mpi_set(x, u1); - - mpi_free(u1); - mpi_free(u2); - mpi_free(u3); - mpi_free(v1); - mpi_free(v2); - mpi_free(v3); - mpi_free(q); - mpi_free(t1); - mpi_free(t2); - mpi_free(t3); - mpi_free(u); - mpi_free(v); - #elif 0 - /* Extended Euclid's algorithm (See TAOPC Vol II, 4.5.2, Alg X) - * modified according to Michael Penk's solution for Exercice 35 */ - - /* FIXME: we can simplify this in most cases (see Knuth) */ - MPI u, v, u1, u2, u3, v1, v2, v3, t1, t2, t3; - unsigned k; - int sign; - - u = mpi_copy(a); - v = mpi_copy(n); - for(k=0; !mpi_test_bit(u,0) && !mpi_test_bit(v,0); k++ ) { - mpi_rshift(u, u, 1); - mpi_rshift(v, v, 1); - } - - - u1 = mpi_alloc_set_ui(1); - u2 = mpi_alloc_set_ui(0); - u3 = mpi_copy(u); - v1 = mpi_copy(v); /* !-- used as const 1 */ - v2 = mpi_alloc( mpi_get_nlimbs(u) ); mpi_sub( v2, u1, u ); - v3 = mpi_copy(v); - if( mpi_test_bit(u, 0) ) { /* u is odd */ - t1 = mpi_alloc_set_ui(0); - t2 = mpi_alloc_set_ui(1); t2->sign = 1; - t3 = mpi_copy(v); t3->sign = !t3->sign; - goto Y4; - } - else { - t1 = mpi_alloc_set_ui(1); - t2 = mpi_alloc_set_ui(0); - t3 = mpi_copy(u); - } - do { - do { - if( mpi_test_bit(t1, 0) || mpi_test_bit(t2, 0) ) { /* one is odd */ - mpi_add(t1, t1, v); - mpi_sub(t2, t2, u); - } - mpi_rshift(t1, t1, 1); - mpi_rshift(t2, t2, 1); - mpi_rshift(t3, t3, 1); - Y4: - ; - } while( !mpi_test_bit( t3, 0 ) ); /* while t3 is even */ - - if( !t3->sign ) { - mpi_set(u1, t1); - mpi_set(u2, t2); - mpi_set(u3, t3); - } - else { - mpi_sub(v1, v, t1); - sign = u->sign; u->sign = !u->sign; - mpi_sub(v2, u, t2); - u->sign = sign; - sign = t3->sign; t3->sign = !t3->sign; - mpi_set(v3, t3); - t3->sign = sign; - } - mpi_sub(t1, u1, v1); - mpi_sub(t2, u2, v2); - mpi_sub(t3, u3, v3); - if( t1->sign ) { - mpi_add(t1, t1, v); - mpi_sub(t2, t2, u); - } - } while( mpi_cmp_ui( t3, 0 ) ); /* while t3 != 0 */ - /* mpi_lshift( u3, k ); */ - mpi_set(x, u1); - - mpi_free(u1); - mpi_free(u2); - mpi_free(u3); - mpi_free(v1); - mpi_free(v2); - mpi_free(v3); - mpi_free(t1); - mpi_free(t2); - mpi_free(t3); - #else - /* Extended Euclid's algorithm (See TAOPC Vol II, 4.5.2, Alg X) - * modified according to Michael Penk's solution for Exercice 35 - * with further enhancement */ - MPI u, v, u1, u2=NULL, u3, v1, v2=NULL, v3, t1, t2=NULL, t3; - unsigned k; - int sign; - int odd ; - - 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 -#include -#include -#include "mpi-internal.h" -#include "longlong.h" -#include - -static int -build_index( MPI *exparray, int k, int i, int t ) -{ - int j, bitno; - int 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<= 0 && idx < (1< -#include -#include -#include "mpi-internal.h" - - -void -mpi_mul_ui( MPI prod, MPI mult, unsigned long small_mult ) -{ - mpi_size_t size, prod_size; - mpi_ptr_t prod_ptr; - mpi_limb_t cy; - int sign; - - size = mult->nlimbs; - sign = mult->sign; - - if( !size || !small_mult ) { - prod->nlimbs = 0; - prod->sign = 0; - return; - } - - prod_size = size + 1; - if( prod->alloced < prod_size ) - mpi_resize( prod, prod_size ); - prod_ptr = prod->d; - - cy = mpihelp_mul_1( prod_ptr, mult->d, size, (mpi_limb_t)small_mult ); - if( cy ) - prod_ptr[size++] = cy; - prod->nlimbs = size; - prod->sign = sign; -} - - -void -mpi_mul_2exp( MPI w, MPI u, unsigned long cnt) -{ - mpi_size_t usize, wsize, limb_cnt; - mpi_ptr_t wp; - mpi_limb_t wlimb; - int usign, wsign; - - usize = u->nlimbs; - usign = u->sign; - - if( !usize ) { - w->nlimbs = 0; - w->sign = 0; - return; - } - - limb_cnt = cnt / BITS_PER_MPI_LIMB; - wsize = usize + limb_cnt + 1; - if( w->alloced < wsize ) - mpi_resize(w, wsize ); - wp = w->d; - wsize = usize + limb_cnt; - wsign = usign; - - cnt %= BITS_PER_MPI_LIMB; - if( cnt ) { - wlimb = mpihelp_lshift( wp + limb_cnt, u->d, usize, cnt ); - if( wlimb ) { - wp[wsize] = wlimb; - wsize++; - } - } - else { - MPN_COPY_DECR( wp + limb_cnt, u->d, usize ); - } - - /* Zero all whole limbs at low end. Do it here and not before calling - * mpn_lshift, not to lose for U == W. */ - MPN_ZERO( wp, limb_cnt ); - - w->nlimbs = wsize; - w->sign = wsign; -} - - - -void -mpi_mul( MPI w, MPI u, MPI v) -{ - mpi_size_t usize, vsize, wsize; - mpi_ptr_t up, vp, wp; - mpi_limb_t cy; - int usign, vsign, usecure, vsecure, sign_product; - int assign_wp=0; - mpi_ptr_t tmp_limb=NULL; - - - if( u->nlimbs < v->nlimbs ) { /* Swap U and V. */ - usize = v->nlimbs; - usign = v->sign; - usecure = mpi_is_secure(v); - up = v->d; - vsize = u->nlimbs; - vsign = u->sign; - vsecure = mpi_is_secure(u); - vp = u->d; - } - else { - usize = u->nlimbs; - usign = u->sign; - usecure = mpi_is_secure(u); - up = u->d; - vsize = v->nlimbs; - vsign = v->sign; - vsecure = mpi_is_secure(v); - vp = v->d; - } - sign_product = usign ^ vsign; - wp = w->d; - - /* Ensure W has space enough to store the result. */ - wsize = usize + vsize; - if ( !mpi_is_secure (w) && (mpi_is_secure (u) || mpi_is_secure (v)) ) { - /* w is not allocated in secure space but u or v is. To make sure - * that no temporray results are stored in w, we temporary use - * a newly allocated limb space for w */ - wp = mpi_alloc_limb_space( wsize, 1 ); - assign_wp = 2; /* mark it as 2 so that we can later copy it back to - * mormal memory */ - } - else if( w->alloced < wsize ) { - if( wp == up || wp == vp ) { - wp = mpi_alloc_limb_space( wsize, mpi_is_secure(w) ); - assign_wp = 1; - } - else { - mpi_resize(w, wsize ); - wp = w->d; - } - } - else { /* Make U and V not overlap with W. */ - if( wp == up ) { - /* W and U are identical. Allocate temporary space for U. */ - up = tmp_limb = mpi_alloc_limb_space( usize, usecure ); - /* Is V identical too? Keep it identical with U. */ - if( wp == vp ) - vp = up; - /* Copy to the temporary space. */ - MPN_COPY( up, wp, usize ); - } - else if( wp == vp ) { - /* W and V are identical. Allocate temporary space for V. */ - vp = tmp_limb = mpi_alloc_limb_space( vsize, vsecure ); - /* Copy to the temporary space. */ - MPN_COPY( vp, wp, vsize ); - } - } - - if( !vsize ) - wsize = 0; - else { - cy = mpihelp_mul( wp, up, usize, vp, vsize ); - wsize -= cy? 0:1; - } - - if( assign_wp ) { - if (assign_wp == 2) { - /* copy the temp wp from secure memory back to normal memory */ - mpi_ptr_t tmp_wp = mpi_alloc_limb_space (wsize, 0); - MPN_COPY (tmp_wp, wp, wsize); - mpi_free_limb_space (wp); - wp = tmp_wp; - } - mpi_assign_limb_space( w, wp, wsize ); - } - w->nlimbs = wsize; - w->sign = sign_product; - if( tmp_limb ) - mpi_free_limb_space( tmp_limb ); -} - - -void -mpi_mulm( MPI w, MPI u, MPI v, MPI m) -{ - mpi_mul(w, u, v); - mpi_fdiv_r( w, w, m ); -} - 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 -#include -#include -#include -#include "mpi-internal.h" -#include "longlong.h" -#include - - -/**************** - * 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 -#include -#include -#include "mpi-internal.h" -#include "longlong.h" - -/**************** - * Scan through an mpi and return byte for byte. a -1 is returned to indicate - * the end of the mpi. Scanning is done from the lsb to the msb, returned - * values are in the range of 0 .. 255. - * - * FIXME: This code is VERY ugly! - */ -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 -#include -#include -#include -#include - -#include "mpi.h" -#include "mpi-internal.h" -#include "iobuf.h" -#include "memory.h" -#include "util.h" - -#ifdef M_DEBUG - #undef mpi_read -#endif - -#define MAX_EXTERN_MPI_BITS 16384 - -/**************** - * write an mpi to out. - */ -int -mpi_write( IOBUF out, MPI a ) -{ - int rc; - unsigned nbits = mpi_get_nbits(a); - byte *p, *buf; - unsigned n; - - if( nbits > MAX_EXTERN_MPI_BITS ) - log_bug("mpi_encode: mpi too large (%u bits)\n", nbits); - - iobuf_put(out, (nbits >>8) ); - iobuf_put(out, (nbits) ); - - p = buf = mpi_get_buffer( a, &n, NULL ); - rc = iobuf_write( out, p, n ); - m_free(buf); - return rc; -} - - -/**************** - * Read an external representation of an mpi and return the MPI - * The external format is a 16 bit unsigned value stored in network byte order, - * giving the number of bits for the following integer. The integer is stored - * with MSB first (left padded with zeroes to align on a byte boundary). - */ -MPI -#ifdef M_DEBUG -mpi_debug_read(IOBUF inp, unsigned *ret_nread, int secure, const char *info) -#else -mpi_read(IOBUF inp, unsigned *ret_nread, int secure) -#endif -{ - int c, i, j; - unsigned nbits, nbytes, nlimbs, nread=0; - mpi_limb_t a; - MPI val = MPI_NULL; - - if( (c = iobuf_get(inp)) == -1 ) - goto leave; - nbits = c << 8; - if( (c = iobuf_get(inp)) == -1 ) - goto leave; - nbits |= c; - if( nbits > MAX_EXTERN_MPI_BITS ) { - log_error("mpi too large (%u bits)\n", nbits); - goto leave; - } - nread = 2; - - nbytes = (nbits+7) / 8; - nlimbs = (nbytes+BYTES_PER_MPI_LIMB-1) / BYTES_PER_MPI_LIMB; - #ifdef M_DEBUG - val = secure? mpi_debug_alloc_secure( nlimbs, info ) - : mpi_debug_alloc( nlimbs, info ); - #else - val = secure? mpi_alloc_secure( nlimbs ) - : mpi_alloc( nlimbs ); - #endif - i = BYTES_PER_MPI_LIMB - nbytes % BYTES_PER_MPI_LIMB; - i %= BYTES_PER_MPI_LIMB; - val->nbits = nbits; - j= val->nlimbs = nlimbs; - val->sign = 0; - for( ; j > 0; j-- ) { - a = 0; - for(; i < BYTES_PER_MPI_LIMB; i++ ) { - a <<= 8; - a |= iobuf_get(inp) & 0xff; nread++; - } - i = 0; - val->d[j-1] = a; - } - - leave: - if( nread > *ret_nread ) - log_bug("mpi crosses packet border\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 -#include -#include - -#include "mpi-internal.h" - -/**************** - * Compare OP1_PTR/OP1_SIZE with OP2_PTR/OP2_SIZE. - * There are no restrictions on the relative sizes of - * the two arguments. - * Return 1 if OP1 > OP2, 0 if they are equal, and -1 if OP1 < OP2. - */ -int -mpihelp_cmp( mpi_ptr_t op1_ptr, mpi_ptr_t op2_ptr, mpi_size_t size ) -{ - mpi_size_t i; - mpi_limb_t op1_word, op2_word; - - for( i = size - 1; i >= 0 ; i--) { - op1_word = op1_ptr[i]; - op2_word = op2_ptr[i]; - if( op1_word != op2_word ) - goto diff; - } - return 0; - - diff: - /* This can *not* be simplified to - * op2_word - op2_word - * since that expression might give signed overflow. */ - return (op1_word > op2_word) ? 1 : -1; -} - 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 -#include -#include -#include "mpi-internal.h" -#include "longlong.h" - -#ifndef UMUL_TIME - #define UMUL_TIME 1 -#endif -#ifndef UDIV_TIME - #define UDIV_TIME UMUL_TIME -#endif - -/* FIXME: We should be using invert_limb (or invert_normalized_limb) - * here (not udiv_qrnnd). - */ - -mpi_limb_t -mpihelp_mod_1(mpi_ptr_t dividend_ptr, mpi_size_t dividend_size, - mpi_limb_t divisor_limb) -{ - mpi_size_t i; - mpi_limb_t n1, n0, r; - int dummy; - - /* 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 -#include -#include -#include -#include "mpi-internal.h" -#include "longlong.h" - - - -#define MPN_MUL_N_RECURSE(prodp, up, vp, size, tspace) \ - do { \ - if( (size) < KARATSUBA_THRESHOLD ) \ - mul_n_basecase (prodp, up, vp, size); \ - else \ - mul_n (prodp, up, vp, size, tspace); \ - } while (0); - -#define MPN_SQR_N_RECURSE(prodp, up, size, tspace) \ - do { \ - if ((size) < KARATSUBA_THRESHOLD) \ - mpih_sqr_n_basecase (prodp, up, size); \ - else \ - mpih_sqr_n (prodp, up, size, tspace); \ - } while (0); - - - - -/* Multiply the natural numbers u (pointed to by UP) and v (pointed to by VP), - * both with SIZE limbs, and store the result at PRODP. 2 * SIZE limbs are - * always stored. Return the most significant limb. - * - * Argument constraints: - * 1. PRODP != UP and PRODP != VP, i.e. the destination - * must be distinct from the multiplier and the multiplicand. - * - * - * Handle simple cases with traditional multiplication. - * - * This is the most critical code of multiplication. All multiplies rely - * on this, both small and huge. Small ones arrive here immediately. Huge - * ones arrive here as this is the base case for Karatsuba's recursive - * algorithm below. - */ - -static mpi_limb_t -mul_n_basecase( mpi_ptr_t prodp, mpi_ptr_t up, - mpi_ptr_t vp, mpi_size_t size) -{ - mpi_size_t i; - mpi_limb_t cy; - mpi_limb_t v_limb; - - /* Multiply by the first limb in V separately, as the result can be - * stored (not added) to PROD. We also avoid a loop for zeroing. */ - v_limb = vp[0]; - if( v_limb <= 1 ) { - if( v_limb == 1 ) - MPN_COPY( prodp, up, size ); - else - MPN_ZERO( prodp, size ); - cy = 0; - } - else - cy = mpihelp_mul_1( prodp, up, size, v_limb ); - - prodp[size] = cy; - prodp++; - - /* For each iteration in the outer loop, multiply one limb from - * U with one limb from V, and add it to PROD. */ - for( i = 1; i < size; i++ ) { - v_limb = vp[i]; - if( v_limb <= 1 ) { - cy = 0; - if( v_limb == 1 ) - cy = mpihelp_add_n(prodp, prodp, up, size); - } - else - cy = mpihelp_addmul_1(prodp, up, size, v_limb); - - prodp[size] = cy; - prodp++; - } - - return cy; -} - - -static void -mul_n( mpi_ptr_t prodp, mpi_ptr_t up, mpi_ptr_t vp, - mpi_size_t size, mpi_ptr_t tspace ) -{ - if( size & 1 ) { - /* The size is odd, and the code below doesn't handle that. - * Multiply the least significant (size - 1) limbs with a recursive - * call, and handle the most significant limb of S1 and S2 - * separately. - * A slightly faster way to do this would be to make the Karatsuba - * code below behave as if the size were even, and let it check for - * odd size in the end. I.e., in essence move this code to the end. - * Doing so would save us a recursive call, and potentially make the - * stack grow a lot less. - */ - mpi_size_t esize = size - 1; /* even size */ - mpi_limb_t cy_limb; - - MPN_MUL_N_RECURSE( prodp, up, vp, esize, tspace ); - cy_limb = mpihelp_addmul_1( prodp + esize, up, esize, vp[esize] ); - prodp[esize + esize] = cy_limb; - cy_limb = mpihelp_addmul_1( prodp + esize, vp, size, up[esize] ); - prodp[esize + size] = cy_limb; - } - else { - /* Anatolij Alekseevich Karatsuba's divide-and-conquer algorithm. - * - * Split U in two pieces, U1 and U0, such that - * U = U0 + U1*(B**n), - * and V in V1 and V0, such that - * V = V0 + V1*(B**n). - * - * UV is then computed recursively using the identity - * - * 2n n n n - * UV = (B + B )U V + B (U -U )(V -V ) + (B + 1)U V - * 1 1 1 0 0 1 0 0 - * - * Where B = 2**BITS_PER_MP_LIMB. - */ - mpi_size_t hsize = size >> 1; - mpi_limb_t cy; - int negflg; - - /* Product H. ________________ ________________ - * |_____U1 x V1____||____U0 x V0_____| - * Put result in upper part of PROD and pass low part of TSPACE - * as new TSPACE. - */ - MPN_MUL_N_RECURSE(prodp + size, up + hsize, vp + hsize, hsize, tspace); - - /* Product M. ________________ - * |_(U1-U0)(V0-V1)_| - */ - if( mpihelp_cmp(up + hsize, up, hsize) >= 0 ) { - mpihelp_sub_n(prodp, up + hsize, up, hsize); - negflg = 0; - } - else { - mpihelp_sub_n(prodp, up, up + hsize, hsize); - negflg = 1; - } - if( mpihelp_cmp(vp + hsize, vp, hsize) >= 0 ) { - mpihelp_sub_n(prodp + hsize, vp + hsize, vp, hsize); - negflg ^= 1; - } - else { - mpihelp_sub_n(prodp + hsize, vp, vp + hsize, hsize); - /* No change of NEGFLG. */ - } - /* Read temporary operands from low part of PROD. - * Put result in low part of TSPACE using upper part of TSPACE - * as new TSPACE. - */ - MPN_MUL_N_RECURSE(tspace, prodp, prodp + hsize, hsize, tspace + size); - - /* Add/copy product H. */ - MPN_COPY (prodp + hsize, prodp + size, hsize); - cy = mpihelp_add_n( prodp + size, prodp + size, - prodp + size + hsize, hsize); - - /* Add product M (if NEGFLG M is a negative number) */ - if(negflg) - cy -= mpihelp_sub_n(prodp + hsize, prodp + hsize, tspace, size); - else - cy += mpihelp_add_n(prodp + hsize, prodp + hsize, tspace, size); - - /* Product L. ________________ ________________ - * |________________||____U0 x V0_____| - * Read temporary operands from low part of PROD. - * Put result in low part of TSPACE using upper part of TSPACE - * as new TSPACE. - */ - MPN_MUL_N_RECURSE(tspace, up, vp, hsize, tspace + size); - - /* Add/copy Product L (twice) */ - - cy += mpihelp_add_n(prodp + hsize, prodp + hsize, tspace, size); - if( cy ) - mpihelp_add_1(prodp + hsize + size, prodp + hsize + size, hsize, cy); - - MPN_COPY(prodp, tspace, hsize); - cy = mpihelp_add_n(prodp + hsize, prodp + hsize, tspace + hsize, hsize); - if( cy ) - mpihelp_add_1(prodp + size, prodp + size, size, 1); - } -} - - -void -mpih_sqr_n_basecase( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t size ) -{ - mpi_size_t i; - mpi_limb_t cy_limb; - mpi_limb_t v_limb; - - /* Multiply by the first limb in V separately, as the result can be - * stored (not added) to PROD. We also avoid a loop for zeroing. */ - v_limb = up[0]; - if( v_limb <= 1 ) { - if( v_limb == 1 ) - MPN_COPY( prodp, up, size ); - else - MPN_ZERO(prodp, size); - cy_limb = 0; - } - else - cy_limb = mpihelp_mul_1( prodp, up, size, v_limb ); - - prodp[size] = cy_limb; - prodp++; - - /* For each iteration in the outer loop, multiply one limb from - * U with one limb from V, and add it to PROD. */ - for( i=1; i < size; i++) { - v_limb = up[i]; - if( v_limb <= 1 ) { - cy_limb = 0; - if( v_limb == 1 ) - cy_limb = mpihelp_add_n(prodp, prodp, up, size); - } - else - cy_limb = mpihelp_addmul_1(prodp, up, size, v_limb); - - prodp[size] = cy_limb; - prodp++; - } -} - - -void -mpih_sqr_n( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t size, mpi_ptr_t tspace) -{ - if( size & 1 ) { - /* The size is odd, and the code below doesn't handle that. - * Multiply the least significant (size - 1) limbs with a recursive - * call, and handle the most significant limb of S1 and S2 - * separately. - * A slightly faster way to do this would be to make the Karatsuba - * code below behave as if the size were even, and let it check for - * odd size in the end. I.e., in essence move this code to the end. - * Doing so would save us a recursive call, and potentially make the - * stack grow a lot less. - */ - mpi_size_t esize = size - 1; /* even size */ - mpi_limb_t cy_limb; - - MPN_SQR_N_RECURSE( prodp, up, esize, tspace ); - cy_limb = mpihelp_addmul_1( prodp + esize, up, esize, up[esize] ); - prodp[esize + esize] = cy_limb; - cy_limb = mpihelp_addmul_1( prodp + esize, up, size, up[esize] ); - - prodp[esize + size] = cy_limb; - } - else { - mpi_size_t hsize = size >> 1; - mpi_limb_t cy; - - /* Product H. ________________ ________________ - * |_____U1 x U1____||____U0 x U0_____| - * Put result in upper part of PROD and pass low part of TSPACE - * as new TSPACE. - */ - MPN_SQR_N_RECURSE(prodp + size, up + hsize, hsize, tspace); - - /* Product M. ________________ - * |_(U1-U0)(U0-U1)_| - */ - if( mpihelp_cmp( up + hsize, up, hsize) >= 0 ) - mpihelp_sub_n( prodp, up + hsize, up, hsize); - else - mpihelp_sub_n (prodp, up, up + hsize, hsize); - - /* Read temporary operands from low part of PROD. - * Put result in low part of TSPACE using upper part of TSPACE - * as new TSPACE. */ - MPN_SQR_N_RECURSE(tspace, prodp, hsize, tspace + size); - - /* Add/copy product H */ - MPN_COPY(prodp + hsize, prodp + size, hsize); - cy = mpihelp_add_n(prodp + size, prodp + size, - prodp + size + hsize, hsize); - - /* Add product M (if NEGFLG M is a negative number). */ - cy -= mpihelp_sub_n (prodp + hsize, prodp + hsize, tspace, size); - - /* Product L. ________________ ________________ - * |________________||____U0 x U0_____| - * Read temporary operands from low part of PROD. - * Put result in low part of TSPACE using upper part of TSPACE - * as new TSPACE. */ - MPN_SQR_N_RECURSE (tspace, up, hsize, tspace + size); - - /* Add/copy Product L (twice). */ - cy += mpihelp_add_n (prodp + hsize, prodp + hsize, tspace, size); - if( cy ) - mpihelp_add_1(prodp + hsize + size, prodp + hsize + size, - hsize, cy); - - MPN_COPY(prodp, tspace, hsize); - cy = mpihelp_add_n (prodp + hsize, prodp + hsize, tspace + hsize, hsize); - if( cy ) - mpihelp_add_1 (prodp + size, prodp + size, size, 1); - } -} - - -/* This should be made into an inline function in gmp.h. */ -void -mpihelp_mul_n( mpi_ptr_t prodp, mpi_ptr_t up, mpi_ptr_t vp, mpi_size_t size) -{ - int secure; - - if( up == vp ) { - if( size < KARATSUBA_THRESHOLD ) - mpih_sqr_n_basecase( prodp, up, size ); - else { - mpi_ptr_t tspace; - secure = m_is_secure( up ); - tspace = mpi_alloc_limb_space( 2 * size, secure ); - mpih_sqr_n( prodp, up, size, tspace ); - mpi_free_limb_space( tspace ); - } - } - else { - if( size < KARATSUBA_THRESHOLD ) - mul_n_basecase( prodp, up, vp, size ); - else { - mpi_ptr_t tspace; - secure = m_is_secure( up ) || m_is_secure( vp ); - tspace = mpi_alloc_limb_space( 2 * size, secure ); - mul_n (prodp, up, vp, size, tspace); - mpi_free_limb_space( tspace ); - } - } -} - - - -void -mpihelp_mul_karatsuba_case( mpi_ptr_t prodp, - mpi_ptr_t up, mpi_size_t usize, - mpi_ptr_t vp, mpi_size_t vsize, - struct karatsuba_ctx *ctx ) -{ - mpi_limb_t cy; - - if( !ctx->tspace || ctx->tspace_size < vsize ) { - if( ctx->tspace ) - mpi_free_limb_space( ctx->tspace ); - ctx->tspace = mpi_alloc_limb_space( 2 * vsize, - m_is_secure( up ) || m_is_secure( vp ) ); - ctx->tspace_size = vsize; - } - - MPN_MUL_N_RECURSE( prodp, up, vp, vsize, ctx->tspace ); - - prodp += vsize; - up += vsize; - usize -= vsize; - if( usize >= vsize ) { - if( !ctx->tp || ctx->tp_size < vsize ) { - if( ctx->tp ) - mpi_free_limb_space( ctx->tp ); - ctx->tp = mpi_alloc_limb_space( 2 * vsize, m_is_secure( up ) - || m_is_secure( vp ) ); - ctx->tp_size = vsize; - } - - do { - MPN_MUL_N_RECURSE( ctx->tp, up, vp, vsize, ctx->tspace ); - cy = mpihelp_add_n( prodp, prodp, ctx->tp, vsize ); - mpihelp_add_1( prodp + vsize, ctx->tp + vsize, vsize, cy ); - prodp += vsize; - up += vsize; - usize -= vsize; - } while( usize >= vsize ); - } - - if( usize ) { - if( usize < KARATSUBA_THRESHOLD ) { - mpihelp_mul( ctx->tspace, vp, vsize, up, usize ); - } - else { - if( !ctx->next ) { - ctx->next = 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 -#include -#include -#include -#include - -#include "mpi.h" -#include "mpi-internal.h" -#include "memory.h" -#include "util.h" - - -#ifdef M_DEBUG - #undef mpi_alloc - #undef mpi_alloc_secure - #undef mpi_free -#endif - -/**************** - * Note: It was a bad idea to use the number of limbs to allocate - * because on a alpha the limbs are large but we normally need - * integers of n bits - So we should chnage this to bits (or bytes). - * - * But mpi_alloc is used in a lot of places :-) - */ -MPI -#ifdef M_DEBUG -mpi_debug_alloc( unsigned nlimbs, const char *info ) -#else -mpi_alloc( unsigned nlimbs ) -#endif -{ - MPI a; - - if( DBG_MEMORY ) - log_debug("mpi_alloc(%u)\n", nlimbs*BITS_PER_MPI_LIMB ); - #ifdef M_DEBUG - a = m_debug_alloc( sizeof *a, info ); - a->d = nlimbs? mpi_debug_alloc_limb_space( nlimbs, 0, info ) : NULL; - #else - a = 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 -# -# 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 , 2001. -# Jordi Mallach , 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 \n" -"Language-Team: Catalan \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 .\n" -msgstr "Per favor informeu sobre els errors a .\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" -" = key expires in n days\n" -" w = key expires in n weeks\n" -" m = key expires in n months\n" -" y = key expires in n years\n" -msgstr "" -"Especifiqueu el temps de validesa de la clau.\n" -" 0 = no caduca\n" -" = caduca als n dies\n" -" w = caduca a les n setmanes\n" -" m = caduca als n mesos\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" -" = signature expires in n days\n" -" w = signature expires in n weeks\n" -" m = signature expires in n months\n" -" y = signature expires in n years\n" -msgstr "" -"Especifiqueu el temps de validesa de la clau.\n" -" 0 = no caduca\n" -" = caduca als n dies\n" -" w = caduca a les n setmanes\n" -" m = caduca als n mesos\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) \"\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) \"\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á , Roman Pavlik 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 \n" -"Language-Team: Czech \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 .\n" -msgstr "" -"Chyby oznamte, prosím, na adresu .\n" -"Pøipomínky k pøekladu .\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" -" = key expires in n days\n" -" w = key expires in n weeks\n" -" m = key expires in n months\n" -" y = key expires in n years\n" -msgstr "" -"Prosím urèete, jak dlouho by klíè mìl platit.\n" -" 0 = doba platnosti klíèe není omezena\n" -" = doba platnosti klíèe skonèí za n dní\n" -" w = doba platnosti klíèe skonèí za n týdnù\n" -" m = doba platnosti klíèe skonèí za n mìsícù\n" -" y = doba platnosti klíèe skonèí za n let\n" - -#: g10/keygen.c:1126 -msgid "" -"Please specify how long the signature should be valid.\n" -" 0 = signature does not expire\n" -" = signature expires in n days\n" -" w = signature expires in n weeks\n" -" m = signature expires in n months\n" -" y = signature expires in n years\n" -msgstr "" -"Prosím urèete, jak dlouho by mìl podpis platit.\n" -" 0 = doba platnosti podpisu není omezena\n" -" = doba platnosti podpisu skonèí za n dní\n" -" w = doba platnosti podpisu skonèí za n týdnù\n" -" m = doba platnosti podpisu skonèí za n mìsícù\n" -" y = doba platnosti podpisu skonèí za n let\n" - -#: g10/keygen.c: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) \"\n" -"\n" -msgstr "" -"\n" -"Aby bylo mo¾né rozpoznat Vá¹ klíè, musíte znát identifikátor u¾ivatele;\n" -"program jej slo¾í z Va¹eho jména a pøíjmení, komentáøe a e-mailu\n" -"v tomto tvaru:\n" -" \"Magda Prochazkova (student) \"\n" -"\n" - -#: g10/keygen.c: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 , 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 \n" -"Language-Team: Danish \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 .\n" -msgstr "Rapportér venligst fejl til .\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" -" = key expires in n days\n" -" w = key expires in n weeks\n" -" m = key expires in n months\n" -" y = key expires in n years\n" -msgstr "" - -#: g10/keygen.c:1126 -msgid "" -"Please specify how long the signature should be valid.\n" -" 0 = signature does not expire\n" -" = signature expires in n days\n" -" w = signature expires in n weeks\n" -" m = signature expires in n months\n" -" y = signature expires in n years\n" -msgstr "" - -#: g10/keygen.c: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) \"\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 , 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 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 behandeln, 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 ist angemessen, manchmal: 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 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: anderen zeigen -revocation Widerruf <*>Rückruf -revocation certificate *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, 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-Schnittstelle -username Username, *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 , 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 \n" -"Language-Team: German \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-1\n" -"Content-Transfer-Encoding: 8bit\n" - -#: util/secmem.c: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 .\n" -msgstr "" -"Berichte über Programmfehler bitte in englisch an .\n" -"Sinn- oder Schreibfehler in den deutschen Texten bitte an .\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" -" = key expires in n days\n" -" w = key expires in n weeks\n" -" m = key expires in n months\n" -" y = key expires in n years\n" -msgstr "" -"Bitte wählen Sie, wie lange der Schlüssel gültig bleiben soll.\n" -" 0 = Schlüssel verfällt nie\n" -" = Schlüssel verfällt nach n Tagen\n" -" w = Schlüssel verfällt nach n Wochen\n" -" m = Schlüssel verfällt nach n Monaten\n" -" y = Schlüssel verfällt nach n Jahren\n" - -#: g10/keygen.c:1126 -msgid "" -"Please specify how long the signature should be valid.\n" -" 0 = signature does not expire\n" -" = signature expires in n days\n" -" w = signature expires in n weeks\n" -" m = signature expires in n months\n" -" y = signature expires in n years\n" -msgstr "" -"Bitte wählen Sie, wie lange die Beglaubigung gültig bleiben soll.\n" -" 0 = Schlüssel verfällt nie\n" -" = Schlüssel verfällt nach n Tagen\n" -" w = Schlüssel verfällt nach n Wochen\n" -" m = Schlüssel verfällt nach n Monaten\n" -" y = Schlüssel verfällt nach n Jahren\n" - -#: g10/keygen.c: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) \"\n" -"\n" -msgstr "" -"\n" -"Sie benötigen eine User-ID, um Ihren Schlüssel eindeutig zu machen; das\n" -"Programm baut diese User-ID aus Ihrem echten Namen, einem Kommentar und\n" -"Ihrer E-Mail-Adresse in dieser Form auf:\n" -" \"Heinrich Heine (Der Dichter) \"\n" -"\n" - -#: g10/keygen.c: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 , 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 \n" -"Language-Team: Greek \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 .\n" -msgstr "ÁíáöÝñåôå ôá ðñïâëÞìáôá óôï \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" -" = key expires in n days\n" -" w = key expires in n weeks\n" -" m = key expires in n months\n" -" y = key expires in n years\n" -msgstr "" -"Ðáñáêáëþ ïñßóôå ãéá ðüóï êáéñü ôï êëåéäß èá åßíáé Ýãêõñï.\n" -" 0 = ôï êëåéäß äåí ëÞãåé ðïôÝ\n" -" = ôï êëåéäß ëÞãåé óå n ìÝñåò\n" -" w = ôï êëåéäß ëÞãåé óå n åâäïìÜäåò\n" -" m = ôï êëåéäß ëÞãåé óå n ìÞíåò\n" -" y = ôï êëåéäß ëÞãåé óå n Ýôç\n" - -#: g10/keygen.c:1126 -msgid "" -"Please specify how long the signature should be valid.\n" -" 0 = signature does not expire\n" -" = signature expires in n days\n" -" w = signature expires in n weeks\n" -" m = signature expires in n months\n" -" y = signature expires in n years\n" -msgstr "" -"Ðáñáêáëþ ïñßóôå ãéá ðüóï êáéñü ôï êëåéäß èá åßíáé Ýãêõñï.\n" -" 0 = ôï êëåéäß äåí ëÞãåé ðïôÝ\n" -" = ôï êëåéäß ëÞãåé óå n ìÝñåò\n" -" w = ôï êëåéäß ëÞãåé óå n åâäïìÜäåò\n" -" m = ôï êëåéäß ëÞãåé óå n ìÞíåò\n" -" y = ôï êëåéäß ëÞãåé óå n Ýôç\n" - -#: g10/keygen.c: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) \"\n" -"\n" -msgstr "" -"\n" -"×ñåéÜæåóôå Ýíá User-ID ãéá íá áíáãíùñßóåôå Ýíá êëåéäß. Ôï ëïãéóìéêü " -"êáôáóêåõÜæåé\n" -"ôï user-id áðü ôï Áëçèéíü ¼íïìá, Ó÷üëéï êáé Äéåýèõíóç Email êÜðùò Ýôóé:\n" -" \"Nikolaoy Nikos (toy Ioanni) \"\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 , 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 \n" -"Language-Team: Esperanto \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 .\n" -msgstr "Bonvolu raporti cimojn al .\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" -" = key expires in n days\n" -" w = key expires in n weeks\n" -" m = key expires in n months\n" -" y = key expires in n years\n" -msgstr "" -"Bonvolu specifi, kiom longe la þlosilo validu.\n" -" 0 = þlosilo neniam eksvalidiøos\n" -" = þlosilo eksvalidiøos post n tagoj\n" -" w = þlosilo eksvalidiøos post n semajnoj\n" -" m = þlosilo eksvalidiøos post n monatoj\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" -" = signature expires in n days\n" -" w = signature expires in n weeks\n" -" m = signature expires in n months\n" -" y = signature expires in n years\n" -msgstr "" -"Bonvolu specifi, kiom longe la þlosilo validu.\n" -" 0 = þlosilo neniam eksvalidiøos\n" -" = þlosilo eksvalidiøos post n tagoj\n" -" w = þlosilo eksvalidiøos post n semajnoj\n" -" m = þlosilo eksvalidiøos post n monatoj\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) \"\n" -"\n" -msgstr "" -"\n" -"Vi bezonas uzantidentigilon por identigi vian þlosilon; la programo\n" -"konstruas la uzantidentigilon el Vera Nomo, Komento kaj Retadreso, jene:\n" -" \"Heinrich Heine (la poeto) \"\n" -"\n" - -#: g10/keygen.c: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 , 1998, 1999. -# I've tried to mantain the terminology used by Armando Ramos -# in his PGP 2.3.6i translation. -# I also got inspiration from it.po by Marco d'Itri -# Jaime Suárez , 2001, 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 \n" -"Language-Team: Spanish \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 .\n" -msgstr "Por favor, informe de posibles \"bugs\" a .\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" -" = key expires in n days\n" -" w = key expires in n weeks\n" -" m = key expires in n months\n" -" y = key expires in n years\n" -msgstr "" -"Por favor, especifique el período de validez de la clave.\n" -" 0 = la clave nunca caduca\n" -" = la clave caduca en n días\n" -" w = la clave caduca en n semanas\n" -" m = la clave caduca en n meses\n" -" y = la clave caduca en n años\n" - -#: g10/keygen.c:1126 -msgid "" -"Please specify how long the signature should be valid.\n" -" 0 = signature does not expire\n" -" = signature expires in n days\n" -" w = signature expires in n weeks\n" -" m = signature expires in n months\n" -" y = signature expires in n years\n" -msgstr "" -"Por favor, especifique el período de validez de la clave.\n" -" 0 = la clave nunca caduca\n" -" = la clave caduca en n días\n" -" w = la clave caduca en n semanas\n" -" m = la clave caduca en n meses\n" -" y = la clave caduca en n años\n" - -#: g10/keygen.c: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) \"\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) \"\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 , 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 \n" -"Language-Team: Estonian \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 .\n" -msgstr "Palun saatke veateated aadressil .\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" -" = key expires in n days\n" -" w = key expires in n weeks\n" -" m = key expires in n months\n" -" y = key expires in n years\n" -msgstr "" -"Palun määrake, kui kaua on võti kehtiv.\n" -" 0 = võti ei aegu\n" -" = võti aegub n päevaga\n" -" w = võti aegub n nädalaga\n" -" m = võti aegub n kuuga\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" -" = signature expires in n days\n" -" w = signature expires in n weeks\n" -" m = signature expires in n months\n" -" y = signature expires in n years\n" -msgstr "" -"Palun määrake, kui kaua allkiri kehtib.\n" -" 0 = allkiri ei aegu\n" -" = allkiri aegub n päevaga\n" -" w = allkiri aegub n nädalaga\n" -" m = allkiri aegub n kuuga\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) \"\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) \"\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 , 1998. -# -# Thanks to Rémi Guyomarch and -# 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 \n" -"Language-Team: French \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=ISO-8859-1\n" -"Content-Transfer-Encoding: 8-bit\n" - -#: util/secmem.c: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 .\n" -msgstr "" -"Signaler toutes anomalies à (en anglais)\n" -"et tout problème de traduction à .\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" -" = key expires in n days\n" -" w = key expires in n weeks\n" -" m = key expires in n months\n" -" y = key expires in n years\n" -msgstr "" -"Spécifiez combien de temps cette clé devrait être valide.\n" -" 0 = la clé n'expire pas\n" -" = la clé expire dans n jours\n" -" w = la clé expire dans n semaines\n" -" m = la clé expire dans n mois\n" -" y = la clé expire dans n années\n" - -#: g10/keygen.c:1126 -msgid "" -"Please specify how long the signature should be valid.\n" -" 0 = signature does not expire\n" -" = signature expires in n days\n" -" w = signature expires in n weeks\n" -" m = signature expires in n months\n" -" y = signature expires in n years\n" -msgstr "" -"Spécifiez combien de temps la signature devrait être valide.\n" -" 0 = la signature n'expire pas\n" -" = la signature expire dans n jours\n" -" w = la signature expire dans n semaines\n" -" m = la signature expire dans n mois\n" -" y = la signature expire dans n 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) \"\n" -"\n" -msgstr "" -"\n" -"Vous avez besoin d'un nom d'utilisateur pour identifier votre clé; le\n" -"programme le construit à partir du nom réel, d'un commentaire et d'une\n" -"adresse e-mail de cette manière:\n" -" « Heinrich Heine (Der Dichter) »\n" -"\n" - -#: g10/keygen.c: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 , 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 \n" -"Language-Team: Galician \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 .\n" -msgstr "" -"Por favor, informe dos erros no programa a ,\n" -"e dos erros na traducción a .\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" -" = key expires in n days\n" -" w = key expires in n weeks\n" -" m = key expires in n months\n" -" y = key expires in n years\n" -msgstr "" -"Por favor, indique canto tempo debería ser válida a chave.\n" -" 0 = a chave non caduca\n" -" = a chave caduca en n días\n" -" w = a chave caduca en n semanas\n" -" m = a chave caduca en n meses\n" -" y = a chave caduca en n anos\n" - -#: g10/keygen.c:1126 -msgid "" -"Please specify how long the signature should be valid.\n" -" 0 = signature does not expire\n" -" = signature expires in n days\n" -" w = signature expires in n weeks\n" -" m = signature expires in n months\n" -" y = signature expires in n years\n" -msgstr "" -"Por favor, indique canto tempo debería ser válida a sinatura.\n" -" 0 = a sinatura non caduca\n" -" = a sinatura caduca en n días\n" -" w = a sinatura caduca en n semanas\n" -" m = a sinatura caduca en n meses\n" -" y = a sinatura caduca en n anos\n" - -#: g10/keygen.c: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) \"\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) \"\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 , 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 \n" -"Language-Team: Indonesian \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 .\n" -msgstr "Silakan laporkan kesalahan ke .\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" -" = key expires in n days\n" -" w = key expires in n weeks\n" -" m = key expires in n months\n" -" y = key expires in n years\n" -msgstr "" -"Silakan spesifikasikan lama kunci tetap valid.\n" -" 0 = kunci tidak pernah berakhir\n" -" = kunci berakhir dalam n hari\n" -" w = kunci berakhir dalam n minggu\n" -" m = kunci berakhir dalam n bulan\n" -" y = kunci berakhir dalam n tahun\n" - -#: g10/keygen.c:1126 -msgid "" -"Please specify how long the signature should be valid.\n" -" 0 = signature does not expire\n" -" = signature expires in n days\n" -" w = signature expires in n weeks\n" -" m = signature expires in n months\n" -" y = signature expires in n years\n" -msgstr "" -"Silakan spesifikasikan lama signature tetap valid.\n" -" 0 = signature tidak pernah berakhir\n" -" = signature berakhir dalam n hari\n" -" w = signature berakhir dalam n minggu\n" -" m = signature berakhir dalam n bulan\n" -" y = signature berakhir dalam n tahun\n" - -#: g10/keygen.c: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) \"\n" -"\n" -msgstr "" -"\n" -"Anda perlu sebuah User-ID untuk mengidentifikasi kunci anda; software " -"membuat \n" -"user-id dari Nama sebenarnya, Komentar dan Alamat email dalam bentuk:\n" -" \"Heinrich Heine (Der Dichter) \"\n" - -#: g10/keygen.c: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 , 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 \n" -"Language-Team: Italian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-1\n" -"Content-Transfer-Encoding: 8bit\n" - -#: util/secmem.c: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 .\n" -msgstr "Per favore segnala i bug a .\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" -" = key expires in n days\n" -" w = key expires in n weeks\n" -" m = key expires in n months\n" -" y = key expires in n years\n" -msgstr "" -"Per favore specifica per quanto tempo la chiave sarà valida.\n" -" 0 = la chiave non scadrà\n" -" = la chiave scadrà dopo n giorni\n" -" w = la chiave scadrà dopo n settimane\n" -" m = la chiave scadrà dopo n mesi\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" -" = signature expires in n days\n" -" w = signature expires in n weeks\n" -" m = signature expires in n months\n" -" y = signature expires in n years\n" -msgstr "" -"Per favore specifica per quanto tempo la firma sarà valida.\n" -" 0 = la chiave non scadrà\n" -" = la chiave scadrà dopo n giorni\n" -" w = la chiave scadrà dopo n settimane\n" -" m = la chiave scadrà dopo n mesi\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) \"\n" -"\n" -msgstr "" -"\n" -"Ti serve un User ID per identificare la tua chiave; il software costruisce " -"l'user id a partire da Nome e Cognome, Commento e Indirizzo di Email " -"indicati in questa forma:\n" -" \"Heinrich Heine (Der Dichter) \"\n" -"\n" - -#: g10/keygen.c: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 , 1999, 2000, 2002. -# Yoshihiro Kajiki , 1999. -# This file is distributed under the same license as the GnuPG package. -# Special thanks to "Takashi P.KATOH". -# -msgid "" -msgstr "" -"Project-Id-Version: gnupg 1.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 \n" -"Language-Team: Japanese \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 .\n" -msgstr "¥Ð¥°¤ò¸«¤Ä¤±¤¿¤é ¤Þ¤Ç¤´Êó¹ð¤¯¤À¤µ¤¤¡£\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" -" = key expires in n days\n" -" w = key expires in n weeks\n" -" m = key expires in n months\n" -" y = key expires in n years\n" -msgstr "" -"¸°¤Î´ü¸Â¤ò·è¤á¤Æ¤¯¤À¤µ¤¤¡£\n" -" 0 = ̵´ü¸Â\n" -" = Í­¸ú´ü¸Â n Æü´Ö\n" -" w = Í­¸ú´ü¸Â n ½µ´Ö\n" -" m = Í­¸ú´ü¸Â n ¤«·î´Ö\n" -" y = Í­¸ú´ü¸Â n ǯ´Ö\n" - -#: g10/keygen.c:1126 -msgid "" -"Please specify how long the signature should be valid.\n" -" 0 = signature does not expire\n" -" = signature expires in n days\n" -" w = signature expires in n weeks\n" -" m = signature expires in n months\n" -" y = signature expires in n years\n" -msgstr "" -"½ð̾¤Î´ü¸Â¤ò·è¤á¤Æ¤¯¤À¤µ¤¤¡£\n" -" 0 = ̵´ü¸Â\n" -" = Í­¸ú´ü¸Â n Æü´Ö\n" -" w = Í­¸ú´ü¸Â n ½µ´Ö\n" -" m = Í­¸ú´ü¸Â n ¤«·î´Ö\n" -" y = Í­¸ú´ü¸Â n ǯ´Ö\n" - -#: g10/keygen.c: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) \"\n" -"\n" -msgstr "" -"\n" -"¤¢¤Ê¤¿¤Î¸°¤òƱÄꤹ¤ë¤¿¤á¤Ë¥æ¡¼¥¶¡¼ID¤¬É¬ÍפǤ¹¡£\n" -"¤³¤Î¥½¥Õ¥È¤ÏËÜ̾¡¢¥³¥á¥ó¥È¡¢ÅŻҥ᡼¥ë¡¦¥¢¥É¥ì¥¹¤«¤é\n" -"¼¡¤Î½ñ¼°¤Ç¥æ¡¼¥¶¡¼ID¤ò¹½À®¤·¤Þ¤¹:\n" -" \"Heinrich Heine (Der Dichter) \"\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 , 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 \n" -"Language-Team: Dutch \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 .\n" -msgstr "" -"Meld fouten in het programma a.u.b. aan ;\n" -"fouten in de vertaling aan .\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" -" = key expires in n days\n" -" w = key expires in n weeks\n" -" m = key expires in n months\n" -" y = key expires in n years\n" -msgstr "" -"Geef aub aan hoe lang de sleutel geldig mag blijven.\n" -" 0 = sleutel verloopt nooit\n" -" = sleutel verloopt over n dagen\n" -" w = sleutel verloopt over n weken\n" -" m = sleutel verloopt over n maanden\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" -" = signature expires in n days\n" -" w = signature expires in n weeks\n" -" m = signature expires in n months\n" -" y = signature expires in n years\n" -msgstr "" -"Geef aub aan hoe lang de sleutel geldig mag blijven.\n" -" 0 = sleutel verloopt nooit\n" -" = sleutel verloopt over n dagen\n" -" w = sleutel verloopt over n weken\n" -" m = sleutel verloopt over n maanden\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) \"\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) \"\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 , 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 \n" -"Language-Team: Polish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=ISO-8859-2\n" -"Content-Transfer-Encoding: 8bit\n" -"Xgettext-Options: --default-domain=gnupg --directory=.. --add-comments --" -"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 .\n" -msgstr "B³êdy prosimy zg³aszaæ na adres .\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" -" = key expires in n days\n" -" w = key expires in n weeks\n" -" m = key expires in n months\n" -" y = key expires in n years\n" -msgstr "" -"Okres wa¿no¶æi klucza.\n" -" 0 = klucz nie ma okre¶lonego terminu wa¿no¶ci\n" -" = termin wa¿no¶ci klucza up³ywa za n dni\n" -" w = termin wa¿no¶ci klucza up³ywa za n tygodni\n" -" m = termin wa¿no¶ci klucza up³ywa za n miesiêcy\n" -" y = termin wa¿no¶ci klucza up³ywa za n lat\n" - -#: g10/keygen.c:1126 -msgid "" -"Please specify how long the signature should be valid.\n" -" 0 = signature does not expire\n" -" = signature expires in n days\n" -" w = signature expires in n weeks\n" -" m = signature expires in n months\n" -" y = signature expires in n years\n" -msgstr "" -"Okres wa¿no¶æi podpisu.\n" -" 0 = klucz nie ma okre¶lonego terminu wa¿no¶ci\n" -" = termin wa¿no¶ci podpisu up³ywa za n dni\n" -" w = termin wa¿no¶ci podpisu up³ywa za n tygodni\n" -" m = termin wa¿no¶ci podpisu up³ywa za n miesiêcy\n" -" y = termin wa¿no¶ci podpisu up³ywa za n lat\n" - -#: g10/keygen.c: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) \"\n" -"\n" -msgstr "" -"\n" -"Musisz okre¶liæ identyfikator u¿ytkownika aby mo¿na by³o rozpoznaæ twój\n" -"klucz; program z³o¿y go z twojego imienia i nazwiska, komentarza i adresu\n" -"poczty elektronicznej. Bêdzie on mia³ tak± postaæ:\n" -" \"Tadeusz ¯eleñski (Boy) \"\n" -"\n" - -#: g10/keygen.c: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 -# -# Based on pt_PT work done by: -# Thiago Jung Bauermann -# Rafael Caetano dos Santos -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 \n" -"Language-Team: pt \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 .\n" -msgstr "Por favor comunique bugs para .\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" -" = key expires in n days\n" -" w = key expires in n weeks\n" -" m = key expires in n months\n" -" y = key expires in n years\n" -msgstr "" -"Por favor especifique por quanto tempo a chave deve ser válida.\n" -" 0 = chave não expira\n" -" = chave expira em n dias\n" -" w = chave expira em n semanas\n" -" m = chave expira em n meses\n" -" y = chave expira em n anos\n" - -#: g10/keygen.c:1126 -msgid "" -"Please specify how long the signature should be valid.\n" -" 0 = signature does not expire\n" -" = signature expires in n days\n" -" w = signature expires in n weeks\n" -" m = signature expires in n months\n" -" y = signature expires in n years\n" -msgstr "" -"Por favor especifique por quanto tempo a assinatura deve ser válida.\n" -" 0 = assinatura não expira\n" -" = assinatura expira em n dias\n" -" w = assinatura expira em n semanas\n" -" m = assinatura expira em n meses\n" -" y = assinatura expira em n anos\n" - -#: g10/keygen.c: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) \"\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) \"\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 , 1999. -# Revised by Rafael Caetano dos Santos . -# I tried to make this one close to es_ES by Urko Lusa -# -# Rafael Caetano dos Santos used to be -# the last translator but he can't continue his work. -# -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 .\n" -msgstr "Por favor comunique bugs para .\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" -" = key expires in n days\n" -" w = key expires in n weeks\n" -" m = key expires in n months\n" -" y = key expires in n years\n" -msgstr "" -"Por favor especifique por quanto tempo a chave deve ser válida.\n" -" 0 = chave não expira\n" -" = chave expira em n dias\n" -" w = chave expira em n semanas\n" -" m = chave expira em n meses\n" -" y = chave expira em n anos\n" - -#: g10/keygen.c:1126 -#, fuzzy -msgid "" -"Please specify how long the signature should be valid.\n" -" 0 = signature does not expire\n" -" = signature expires in n days\n" -" w = signature expires in n weeks\n" -" m = signature expires in n months\n" -" y = signature expires in n years\n" -msgstr "" -"Por favor especifique por quanto tempo a chave deve ser válida.\n" -" 0 = chave não expira\n" -" = chave expira em n dias\n" -" w = chave expira em n semanas\n" -" m = chave expira em n meses\n" -" y = chave expira em n anos\n" - -#: g10/keygen.c: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) \"\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) \"\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 , 1999. -# -# Thanks to André Dahlqvist for -# many improvements -# -# Also many thanks to my wife Olivia 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 \n" -"Language-Team: Swedish \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 .\n" -msgstr "" -"Rapportera gärna fel till .\n" -"Rapportera gärna fel eller synpunkter på översättningen till .\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" -" = key expires in n days\n" -" w = key expires in n weeks\n" -" m = key expires in n months\n" -" y = key expires in n years\n" -msgstr "" -"Specificera hur länge nyckeln skall vara giltig.\n" -" 0 = nyckeln blir aldrig ogiltig\n" -" = nyckeln blir ogiltig efter n dagar\n" -" w = nyckeln blir ogiltig efter n veckor\n" -" m = nyckeln blir ogiltig efter n månader\n" -" y = nyckeln blir ogiltig efter n år\n" - -# borde kolla upp möjligheterna i källkoden att använda v m å istället för wmy -#: g10/keygen.c:1126 -#, fuzzy -msgid "" -"Please specify how long the signature should be valid.\n" -" 0 = signature does not expire\n" -" = signature expires in n days\n" -" w = signature expires in n weeks\n" -" m = signature expires in n months\n" -" y = signature expires in n years\n" -msgstr "" -"Specificera hur länge nyckeln skall vara giltig.\n" -" 0 = nyckeln blir aldrig ogiltig\n" -" = nyckeln blir ogiltig efter n dagar\n" -" w = nyckeln blir ogiltig efter n veckor\n" -" m = nyckeln blir ogiltig efter n månader\n" -" y = nyckeln blir ogiltig efter n år\n" - -#: 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) \"\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) \"\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 , 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 \n" -"Language-Team: Turkish \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 .\n" -msgstr "Yazýlým hatalarýný lütfen 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" -" = key expires in n days\n" -" w = key expires in n weeks\n" -" m = key expires in n months\n" -" y = key expires in n years\n" -msgstr "" -"Lütfen anahtarýn ne kadar süreyle geçerli olacaðýný belirtin.\n" -" 0 = anahtar süresiz geçerli\n" -" = anahtar n gün geçerli\n" -" w = anahtar n hafta geçerli\n" -" m = anahtar n ay geçerli\n" -" y = anahtar n yýl geçerli\n" - -#: g10/keygen.c:1126 -msgid "" -"Please specify how long the signature should be valid.\n" -" 0 = signature does not expire\n" -" = signature expires in n days\n" -" w = signature expires in n weeks\n" -" m = signature expires in n months\n" -" y = signature expires in n years\n" -msgstr "" -"Lütfen imzanýnn ne kadar süreyle geçerli olacaðýný belirtin.\n" -" 0 = imza süresiz geçerli\n" -" = imza n gün geçerli\n" -" w = imza n hafta geçerli\n" -" m = imza n ay geçerli\n" -" y = imza n yýl geçerli\n" - -#: g10/keygen.c: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) \"\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) \"\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 - - * scdaemon.c (main): New option --daemon so that the program is - not accidently started in the background. - -2002-08-16 Werner Koch - - * 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 - - * 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 - - 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 - - * card.c (find_simple_tlv, find_iccsn): New. - (card_get_serial_and_stamp): Improved serial number parser. - -2002-06-27 Werner Koch - - * scdaemon.c (main): Use GNUPG_DEFAULT_HOMEDIR constant. - -2002-06-15 Werner Koch - - * card-dinsig.c: Documented some stuff from the DIN norm. - -2002-04-15 Werner Koch - - * command.c (cmd_pksign, cmd_pkdecrypt): Use a copy of the key ID. - -2002-04-12 Werner Koch - - * 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 - - * card.c (card_open): Return immediately when no reader is available. - -2002-03-27 Werner Koch - - * card.c (card_open, card_close): Adjusted for changes in OpenSC. - -2002-03-10 Werner Koch - - * 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 - - * 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 -#include -#include -#include -#include -#include - -#include -#include - -#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 -#include -#include -#include -#include -#include - -#include -#include - -#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 -#include -#include -#include -#include -#include - -#include -#include - -#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 -#include -#include -#include -#include -#include -#include -#include - -#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 - - 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 - - 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 - - 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 - - */ -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 - - 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 - - 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 - - */ -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 - - */ -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 - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#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: :: */ - 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 -#include -#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 - - * autogen.sh: Allow env variables to override the auto* tool - names. Suggested by Simon Josefsson. - -2002-09-11 Werner Koch - - * distfiles: Include mk-w32-dist. - - * mk-w32-dist: Convert the character sets on a per language base. - -2002-09-02 Werner Koch - - * mk-w32-dist: Include more man pages and gpg split. Changed name - of ZIP file to better indicate that this is a command line version. - -2002-08-23 Werner Koch - - * autogen.sh : Don't run gettextize. - -2002-08-06 Stefan Bellon - - * conf-riscos/include/config.h: Changed #define FOO to - #define FOO 1. - * conf-riscos/include/g10defs.h: Likewise. - -2002-08-03 Stefan Bellon - - * conf-riscos/include/g10defs.h: Added GNUPG_LIBEXECDIR. - * conf-riscos/include/config.h: Changes due to dynload removal and - minor changes to avoid some warnings. - * conf-riscos/Makefile: Changes due to dynload removal. - * conf-riscos/cipher/*: Not needed anymore due to dynload removal. - -2002-07-25 David Shaw - - * gnupgbug: "Warning" -> "WARNING" - -2002-07-01 Werner Koch - - * mk-gpg-texi: New. - -2002-06-30 Werner Koch - - * mk-w32-dist (bindir): Fixes vor VPATH builds in a subdir, - include gpgv. - -2002-06-21 Stefan Bellon - - * conf-riscos/Makefile: Changes due to moving around RISC OS - specific stuff in the code. - -2002-06-07 Stefan Bellon - - * conf-riscos/include/config.h [__riscos__]: Fixed macro bug. - -2002-05-10 Stefan Bellon - - * conf-riscos/include/config.h [__riscos__]: Changes for later - Norcroft compilers. - - * conf-riscos/Makefile [__riscos__]: Updated. - -2002-04-22 Stefan Bellon - - * conf-riscos/include/config.h [__riscos__]: Development - versions automatically define DEBUG from now on. - - * conf-riscos/Makefile [__riscos__]: Updated for LDAP keyserver - code. - -2002-04-19 David Shaw - - * gnupg.spec.in: Removed pubring.asc and OPTIONS. Added - samplekeys.asc. - -2002-03-31 David Shaw - - * gnupg.spec.in: Added the gpgkeys_xxx keyserver helpers. Added a - * to catch variations on the basic gpg man page (gpg, gpgv). Mark - options.skel as a config file. Do not include the FAQ/faq.html - twice (in /doc/ and /share/). - -2002-01-02 Stefan Bellon - - * build-riscos [__riscos__]: Set filetype of Makefile correctly. - - * conf-riscos/include/g10defs.h [__riscos__]: Added GNU GPL - header and exec code defines. - - * conf-riscos/include/config.h [__riscos__]: Moved parts to - include/util.h where they really belong to. - - * conf-riscos/Makefile [__riscos__]: Updated for new keyserver, - exec and photo id code. - -2001-12-22 Werner Koch - - * autogen.sh: Fixed last change. - -2001-12-21 Werner Koch - - * distfiles: Removed those files which which automake installs by - default. - - * autogen.sh: Replaced $() by backticks for system without a posix - shell. Removed gawk specific quoting. By David Champion. - -2001-10-22 Werner Koch - - * autogen.sh (aclocal_vers): Require automalke 1.5. - -2001-08-21 Stefan Bellon - - * build-riscos [__riscos__]: New. - * conf-riscos [__riscos__]: Ditto. - -2001-08-13 Werner Koch - - * autogen.sh: Test on gettext 0.10.38. By Michael Engels. - -2001-08-07 Werner Koch - - * autogen.sh: Adjusted --build-w32 for autoconf 2.52 - -2001-07-09 Werner Koch - - * autogen.sh (autoconf_vers): Require autoconf 2.50 - -2001-05-06 Werner Koch - - * config.guess, config.sub: Add updates from subversions.gnu.org. - -2001-04-19 Werner Koch - - * autogen.sh: Add VPATH build support for option --build-w32. - -2001-03-12 Werner Koch - - * config.guess, config.sub: Replaced with the current GNU CVS ones. - -2001-01-18 Werner Koch - - * autogen.sh: New options --build-w32 - * build-w32: Does now call autogen.sh - -2000-11-24 Werner Koch - - * build-w32: New script to build the W32 version. - * distfiles: And put it into the distribution - -Thu Sep 14 17:45:11 CEST 2000 Werner Koch - - * gnupg.spec.in: Updated. - -Wed Sep 6 17:55:47 CEST 2000 Werner Koch - - * config.guess, config.sub: Replaced with the latest version from the - CVS archive. Hope that does not break too much. - -Fri May 12 14:01:20 CEST 2000 Werner Koch - - * gnupg.spec.in: New version from Fabio with some updated descriptions. - -Mon May 1 15:38:04 CEST 2000 Werner Koch - - * gnupg.spec.in: New version from Fabio. - -Fri Mar 17 16:26:05 CET 2000 Werner Koch - - * config.gues, config.sub: Support for s390-ibm-linux-gnu. Thanks - to Holger Smolinski. - -Thu Mar 2 15:37:46 CET 2000 Werner Koch - - * config.guess: Add support for QNX. By Sam Roberts. - * config.sub: Ditto. - -Thu Sep 23 09:49:25 1999 Werner Koch (wk@gnupg.org) - - * commit: Remove leading and trailing empty lines when copying - Changes to Changelog - -Wed Sep 15 16:22:17 CEST 1999 Werner Koch - - * gnupg.spec: Add Portuguese description - -Thu Sep 2 16:40:55 CEST 1999 Werner Koch - - * mkdiff: changed format of diff file name and made script more - general. - -Wed Aug 4 10:34:18 CEST 1999 Werner Koch - - * config.guess: Updated from gnu/common and applied my emx patch again. - * config.sub: Updated from gnu/common. - -Wed Jul 14 19:42:08 CEST 1999 Werner Koch - - * ltmain.sh, ltconfig.sh : Updated to libtool 1.3.3 - -Mon Jul 12 14:55:34 CEST 1999 Werner Koch - - * autogen.sh: Run libtoolize - -Sat May 22 22:47:26 CEST 1999 Werner Koch - - * autogen.sh: Fixed the error message for a missing libtool. - -Sat May 8 19:28:08 CEST 1999 Werner Koch - - * mkinstalldirs, install-sh: New from GNU repository - * config.sub, config.guess: Merged with rep version. - -Sun Mar 14 19:34:36 CET 1999 Werner Koch - - * autogen.sh: Add a check for libtool because some autoconf macros - are needed. - -Mon Feb 22 20:04:00 CET 1999 Werner Koch - - * autogen.sh: Enhanced the version testing code (Philippe Laliberte) - - * mkwebpage: Edits the buglist. - -Sat Feb 13 12:04:43 CET 1999 Werner Koch - - * autogen.sh: Now uses gettextize - -Wed Feb 10 17:15:39 CET 1999 Werner Koch - - * config.sub, config.guess: Support i386-emx-os2 - -Sun Jan 17 11:04:33 CET 1999 Werner Koch - - * autogen.sh: Now checks for installed gettext - -Sat Jan 16 09:27:30 CET 1999 Werner Koch - - * config.guess (m68k-atari-mint): New. - * config.sub: Add support for atarist-MiNT - -Wed Jan 13 12:49:36 CET 1999 Werner Koch - - * gnupg.spec.in: New - * gnupg.spec: Removed - -Wed Dec 23 13:18:14 CET 1998 Werner Koch - - * gnupg.spec: Updated version by Fabio Coatti - -Thu Dec 17 18:31:15 CET 1998 Werner Koch - - * gnupg.spec: New version by Reuben Sumner and did some more - changes. - -Fri Nov 27 12:39:29 CET 1998 Werner Koch - - - * commit: New - - -Fri Nov 20 12:01:57 1998 Werner Koch (wk@isil.d.shuttle.de) - - * mkdiff: signs the patch file - -Sat Oct 17 16:10:16 1998 Werner Koch (wk@isil.d.shuttle.de) - - * autogen.sh: New. - -Wed Oct 14 09:55:25 1998 Werner Koch (wk@isil.d.shuttle.de) - - * config.guess (FreeBSD): Changes from Jun Kuriyama to support ELF - * config.sub: (freebsd): Add to maybe_os - - - Copyright 1998, 1999, 2000, 2001, 2002 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 | 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 .conf-riscos.cipher.c.construct .^.cipher.c.construct ~cf~v -copy .conf-riscos.cipher.c.constructv .^.cipher.c.constructv ~cf~v -copy .conf-riscos.include.h.config .^.include.h.config ~cf~v -copy .conf-riscos.include.h.g10defs .^.include.h.g10defs ~cf~v -copy .conf-riscos.Makefile .^.Makefile ~cf~v -settype .^.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 .private.gnupgdev/zip then wipe .private.gnupgdev/zip ~CFR~V - rename distrib.gnupgdev/zip .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 .archives.gnupg/zip then wipe .archives.gnupg/zip ~CFR~V - ifthere .private.gnupgdev/zip then wipe .private.gnupgdev/zip ~CFR~V - ifthere .archives.gnupgidea/zip then wipe .archives.gnupgidea/zip ~CFR~V - ifthere .archives.gnupgpart/zip then wipe .archives.gnupgpart/zip ~CFR~V - ifthere .archives.gnupgsrc/zip then wipe .archives.gnupgsrc/zip ~CFR~V - ifthere .archives.gnupgintl/zip then wipe .archives.gnupgintl/zip ~CFR~V - ifthere .archives.gnupgldap/zip then wipe .archives.gnupgldap/zip ~CFR~V - ifthere .gnupg_history/txt then wipe .gnupg_history/txt ~CFR~V - ifthere .gnupg_news/txt then wipe .gnupg_news/txt ~CFR~V - rename distrib.gnupgdev/zip .private.gnupgdev/zip - rename distrib.gnupg/zip .archives.gnupg/zip - rename distrib.gnupgidea/zip .archives.gnupgidea/zip - rename distrib.gnupgpart/zip .archives.gnupgpart/zip - rename distrib.gnupgsrc/zip .archives.gnupgsrc/zip - rename distrib.gnupgintl/zip .archives.gnupgintl/zip - rename distrib.gnupgldap/zip .archives.gnupgldap/zip - copy distrib.resources.History .gnupg_history/txt ~CFR~V - copy distrib.resources.orig_docs.NEWS .gnupg_news/txt ~CFR~V - unset GnuPG$DevDefine - unset GnuPG$Version - updatesigs .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 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 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 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 . */ -#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 header file. */ -#undef HAVE_ARGZ_H - -/* Define if you have the header file. */ -#undef HAVE_DIRECT_H - -/* Define if you have the header file. */ -#undef HAVE_GDBM_H - -/* Define if you have the header file. */ -#undef HAVE_LANGINFO_H - -/* Define if you have the header file. */ -#define HAVE_LIMITS_H 1 - -/* Define if you have the header file. */ -#undef HAVE_LINUX_RANDOM_H - -/* Define if you have the header file. */ -#define HAVE_LOCALE_H 1 - -/* Define if you have the header file. */ -#define HAVE_MALLOC_H 1 - -/* Define if you have the header file. */ -#undef HAVE_NL_TYPES_H - -/* Define if you have the header file. */ -#define HAVE_STRING_H 1 - -/* Define if you have the header file. */ -#undef HAVE_SYS_CAPABILITY_H - -/* Define if you have the header file. */ -#undef HAVE_SYS_IPC_H - -/* Define if you have the header file. */ -#define HAVE_SYS_MMAN_H 1 - -/* Define if you have the header file. */ -#define HAVE_SYS_PARAM_H 1 - -/* Define if you have the header file. */ -#undef HAVE_SYS_SHM_H - -/* Define if you have the header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define if you have the header file. */ -#undef HAVE_TERMIO_H - -/* Define if you have the header file. */ -#define HAVE_UNISTD_H 1 - -/* Define if you have the 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 ".locale" -#define GNUPG_LIBDIR "" -#define GNUPG_LIBEXECDIR "" -#define GNUPG_DATADIR "" -#define GNUPG_HOMEDIR "" -#define LOCALE_ALIAS_PATH ".locale" -#define GNULOCALEDIR ".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 . -# Please send patches to . -# -# 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 ." - -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 <$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 /* 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 - - 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 - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD $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 - 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 < -#ifdef __cplusplus -#include /* 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' /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 - echo i586-unisys-sysv4 - exit 0 ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # 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 < -# include -#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 - 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 -# 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 < 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 . -# -# 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 ." - -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 -- Removed OPTIONS and pubring.asc - no longer used -- Added doc/samplekeys.asc -* Sun Mar 31 2002 David Shaw -- Added the gpgkeys_xxx keyserver helpers. -- Added a * to catch variations on the basic gpg man page (gpg, gpgv). -- Mark options.skel as a config file. -- Do not include the FAQ/faq.html twice (in /doc/ and /share/). - -* Wed Sep 06 2000 Fabio Coatti -- Added Polish description and summary (Kindly provided by - Lukasz Stelmach ) - -* Thu Jul 13 2000 Fabio Coatti -- Added a * to catch all formats for man pages (plain, gz, bz2...) - -* Mon May 01 2000 Fabio Coatti -- Some corrections in French description, thanks to Gaël Quéri - ; Some corrections to Italian descriptions. - -* Tue Apr 25 2000 Fabio Coatti -- Removed the no longer needed patch for man page by Keith Owens - -* Wed Mar 1 2000 Petr Kri¹tof -- Czech descriptions added; some fixes and updates. - -* Sat Jan 15 2000 Keith Owens -- Add missing man page as separate patch instead of updating the tar file. - -* Mon Dec 27 1999 Fabio Coatti -- Upgraded for 1.0.1 (added missing gpg.1 man page) - -* Sat May 29 1999 Fabio Coatti -- Some corrections in French description, thanks to Gaël Quéri - -* Mon May 17 1999 Fabio Coatti -- Added French description, provided by - Christophe Labouisse - -* Thu May 06 1999 Fabio Coatti -- Upgraded for 0.9.6 (removed gpgm) - -* Tue Jan 12 1999 Fabio Coatti -- LINGUAS variable is now unset in configure to ensure that all languages will be built. (Thanks to Luca Olivetti ) - -* Sat Jan 02 1999 Fabio Coatti -- Added pl language file. -- Included g10/pubring.asc in documentation files. - -* Sat Dec 19 1998 Fabio Coatti -- Modified the spec file provided by Caskey L. Dickson -- Now it can be built also by non-root. Installation has to be done as - root, gpg is suid. -- Added some changes by Ross Golder -- Updates for version 0.4.5 of GnuPG (.mo files) - -%description -GnuPG (GNU Privacy Guard) is a GNU utility for encrypting data and -creating digital signatures. GnuPG has advanced key management -capabilities and is compliant with the proposed OpenPGP Internet -standard described in 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 -# -# -# 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 -# -# hacked greatly by Greg A. Woods -# -# 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 = ; - close(FILE); - chop($line); - $line; -} - -sub read_logfile { - local(@text); - local($filename, $leader) = @_; - - open(FILE, "<$filename"); - while () { - 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 () { - 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 () { - chop; # Drop the newline - push(@text, $_); - } - - &mail_notification(@text); - - exit 0; -} - -# Iterate over the body of the message collecting information. -# -while () { - 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 () { - if( /^$changelog .*/ ) { - $okay = true; - push(@log_lines, $_); - } - elsif( $okay ) { - last if( /^[A-Z]+.*/ ); - push(@log_lines, $_); - } - } - while () { ; } - 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 () { - 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 <&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 < $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 -# 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 <$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 - } - /^$/ { - r $src/body-tag.html.inc - d - } - /@UPDATED@/c\\ -Updated: $updated \\ -
- /@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 <$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 - - * 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 - - * gpgsm.c (main): Disable the internal libgcrypt locking. - -2002-08-21 Werner Koch - - * 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 - - * 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 - - * 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 - - * 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 - - * 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 - - * 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 - - * 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 - - * certcheck.c (gpgsm_check_cert_sig): Implement proper cleanup. - (gpgsm_check_cms_signature): Ditto. - -2002-07-22 Werner Koch - - * 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 - - * 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 - - * 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 - - * 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 - - * server.c (cmd_recipient): Add more reason codes. - -2002-06-27 Werner Koch - - * 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 - - * import.c (gpgsm_import): Print an STATUS_IMPORTED. - - * gpgsm.c: --debug-no-path-validation does not take an argument. - -2002-06-25 Werner Koch - - * 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 - - * 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 - - * 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 - - * 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 - - * certreqgen.c (read_parameters): Improved error handling. - (gpgsm_genkey): Print error message. - -2002-06-13 Werner Koch - - * gpgsm.c (main): New option --log-file. - -2002-06-12 Werner Koch - - * 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 - - * 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 - - * 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 - - * gpgsm.c (main): Don't print the "go ahead" message for an - invalid command. - -2002-05-23 Werner Koch - - * import.c (gpgsm_import): Add error messages. - -2002-05-21 Werner Koch - - * 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 - - * 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 - - * 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 - - * 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 - - * call-agent.c (start_agent): Make copies of old locales and check - for setlocale. - -2002-04-25 Marcus Brinkmann - - * call-agent.c (start_agent): Fix error handling logic so the - locale is always correctly reset. - -2002-04-25 Marcus Brinkmann - - * 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 - - * 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 - - * certreqgen.c (gpgsm_genkey): Write status output on success. - -2002-04-15 Werner Koch - - * 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 - - * 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 - - * 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 - - * export.c: New. - * gpgsm.c: Add command --export. - * server.c (cmd_export): New. - -2002-03-13 Werner Koch - - * decrypt.c (gpgsm_decrypt): Allow multiple recipients. - -2002-03-12 Werner Koch - - * certpath.c (check_cert_policy): Print the policy list. - - * verify.c (gpgsm_verify): Detect certs-only message. - -2002-03-11 Werner Koch - - * 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 - - * 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 - - * 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 - - * call-dirmngr.c, call-agent.c: Add 2 more arguments to all uses - of assuan_transact. - -2002-02-25 Werner Koch - - * 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 - - * 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 - - * 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 - - * 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 - - * 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 - - * sign.c (gpgsm_sign): Do not release certificate twice. - -2002-01-29 Werner Koch - - * 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 - - * certreqgen.c (create_request): Store the email address in the req. - -2002-01-25 Werner Koch - - * 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 - - * 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 - - * 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 - - * 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 - - * server.c (option_handler): New. - (gpgsm_server): Register it with assuan. - -2002-01-19 Werner Koch - - * 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 - - * 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 - - * call-dirmngr.c (inq_certificate): Changed for new interface semantic. - * certlist.c (gpgsm_find_cert): New. - -2002-01-13 Werner Koch - - * fingerprint.c (gpgsm_get_certid): Print the serial and not the - hash after the dot. - -2002-01-11 Werner Koch - - * 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 - - * base64.c (gpgsm_create_writer): Allow to set the object name - -2002-01-08 Werner Koch - - * 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 - - * server.c (rc_to_assuan_status): Removed and changed all callers - to use map_to_assuan_status. - -2001-12-20 Werner Koch - - * 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 - - * call-agent.c (start_agent): Add new argument to assuan_pipe_connect. - -2001-12-18 Werner Koch - - * 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 - - * 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 - - * 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 - - * 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 - - * call-agent.c (LINELENGTH): Removed. - (gpgsm_agent_pksign): Use ASSUAN_LINELENGTH, not LINELENGTH. - (gpgsm_agent_pkdecrypt): Likewise. - -2001-12-13 Werner Koch - - * keylist.c (list_cert_colon): Print alternative names of subject - and a few other values. - -2001-12-12 Werner Koch - - * gpgsm.c (main): New options --assume-{armor,base64,binary}. - * base64.c (base64_reader_cb): Fixed non-autodetection mode. - -2001-12-04 Werner Koch - - * 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 - - * 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 - - * 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 -#include -#include -#include -#include -#include -#include -#include - -#include - -#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 -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef HAVE_LOCALE_H -#include -#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 -#include -#include -#include -#include -#include -#include -#include - -#include - -#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 -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#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 -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#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 -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#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 -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#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 - Print . - %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 - Do not write the certificate to the keyDB but to . - This must be given before the first - commit to take place, duplicate specification of the same filename - is ignored, the last filename before a commit is used. - The filename is used until a new filename is used (at commit points) - and all keys are written to that file. If a new filename is given, - this file is created (and overwrites an existing one). - Both control statements must be given. - o The order of the parameters does not matter except for "Key-Type" - which must be the first parameter. The parameters are only for the - generated keyblock and parameters from previous key generations are not - used. Some syntactically checks may be performed. - The currently defined parameters are: - Key-Type: - Starts a new parameter block by giving the type of the - primary key. The algorithm must be capable of signing. - This is a required parameter. For now the only supported - algorithm is "rsa". - Key-Length: - Length of the key in bits. Default is 1024. - Key-Usage: - Space or comma delimited list of key usage, allowed values are - "encrypt" 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: - The ist the email address - -Here is an example: -$ cat >foo < -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#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 -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#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 -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#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 -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#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 -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#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 -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#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 -#include -#include -#include -#include -#include -#include -#include - -#include -#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 -#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 -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#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 -#include -#include -#include -#include -#include -#include -#include -#include - -#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 -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#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 -#include -#include -#include -#include -#include -#include -#include - -#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 - - Set the recipient for the encryption. 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 - - Set the signer's keys for the signature creation. 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= - - 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= 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 -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#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 -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#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 - - * Makefile.am (inittests.stamp): Do not set LD_LIBRARY_PATH, but - rather prepend it. Be more robust and prefer printf over echo -n. - -2002-09-04 Marcus Brinkmann - - * asschk.c (start_server): Close the parent's file descriptors in - the child. - (read_assuan): Variable NREAD removed. Cut off the received line - currectly if more than one line was read. - -2002-09-03 Neal H. Walfield - - * Makefile.am (inittests.stamp): Construct an LD_LIBRARY_PATH from - LDFLAGS. - -2002-08-09 Werner Koch - - * asschk.c (cmd_getenv): New. - (expand_line): Allow / as variable name delimiter. - * sm-sign+verify, sm-verify: Use $srcdir so that a VPATH build works. - - * Makefile.am: Fixes for make dist. - * samplekets/Makefile.am: New. - -2002-08-08 Werner Koch - - * asschk.c: Added some new features. - * runtest, inittests: New. - * text-1.txt, text-2.txt, text-3.txt: New. - * text-1.osig.pem, text-1.dsig.pem, text-1.osig-bad.pem: New. - * text-2.osig.pem, text-2.osig-bad.pem: New. - * samplekeys : New directory - * sm-verify, sm-sign+verify: The first test scripts. - -2002-08-06 Werner Koch - - * Makefile.am, asschk.c: New. - - - Copyright 2002 Free Software Foundation, Inc. - - This file is free software; as a special exception the author gives - unlimited permission to copy and/or distribute it, with or without - modifications, as long as this notice is preserved. - - This file is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY, to the extent permitted by law; without even the - implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - - 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: - - [ =] [] - - 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 - Return VALUE. - - echo - Print VALUE. - - openfile - Open file FILENAME for read access and retrun the file descriptor. - - createfile - Create file FILENAME, open for write access and retrun the file - descriptor. - - pipeserver - Connect to the Assuan server PROGRAM. - - send - 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 - 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 - Terminate the process if CONDITION evaluates to true. - - fail-if - Terminate the process with an exit code of 1 if CONDITION - evaluates to true. - - cmpfiles - Returns true when the content of the files FIRST and SECOND match. - - getenv - Return the value of the environment variable NAME. - -*/ - -#include -#include -#include -#include -#include -#include -#include -#include - -#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[=]}"); - - - 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 < gpg-agent.conf < trustlist.txt < - - * Makefile.am: Link bftest with EGDLIBS (i.e. NETLIBS) as EGD uses - sockets. - -2002-05-07 Stefan Bellon - - * gpgsplit.c (create_filename): Use EXTSEP_S instead of ".". - -2002-04-23 David Shaw - - * Makefile.am: Do not list libraries in -lxxx format in a - dependency line. - -2002-01-02 Stefan Bellon - - * gpgsplit.c [__riscos__]: Added RISC OS specific file name - code. - - * gpgsplit.c (write_part): Introduced two explicit casts. - -2001-12-21 David Shaw - - * gpgsplit.c (pkttype_to_string): PKT_PHOTO_ID -> PKT_ATTRIBUTE - -2001-10-23 Werner Koch - - * Makefile.am (gpgsplit_LDADD): Add ZLIBS. - -2001-09-18 Werner Koch - - * gpgsplit.c: New option --uncompress. - (write_part): Handle old style uncompressing. - -2001-06-20 Werner Koch - - * gpgsplit.c: New. - * Makefile.am (bin_PROGRAMS): Install gpgsplit. - -2001-03-27 Werner Koch - - * mail-signed-keys: Add option --dry-run. - -2001-03-21 Werner Koch - - * shmtest.c: Add sys/types.h - -Fri Sep 15 18:40:36 CEST 2000 Werner Koch - - * ring-a-party: An array start at offset 1 no 0. Many thanks to Mike - for finding this bug. - -Thu Sep 14 14:20:38 CEST 2000 Werner Koch - - * ring-a-party: Flush the last key. - -Wed Jul 5 13:28:45 CEST 2000 Werner Koch - - * mail-signed-keys: New. - -Tue May 23 09:19:00 CEST 2000 Werner Koch - - * ring-a-party: New. - -Thu Jul 8 16:21:27 CEST 1999 Werner Koch - - * lspgpot: New - -Wed Jul 7 13:08:40 CEST 1999 Werner Koch - - * Makefile.am: Support for libtool. - -Tue Jun 8 13:36:25 CEST 1999 Werner Koch - - * mpicalc.c (main): hex digits may now be lowercase - (do_mulm): new. - -Thu Dec 10 20:15:36 CET 1998 Werner Koch - - * mpicalc.c (main): Moved initialization out of definition. - -Mon May 18 15:39:22 1998 Werner Koch (wk@isil.d.shuttle.de) - - * mk-tdata.c: New. - -Tue Apr 7 19:50:41 1998 Werner Koch (wk@isil.d.shuttle.de) - - * bftest.c: Now supports all availabe ciphers. - - - - Copyright 1998, 1999, 2000, 2001 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 -#include -#include -#include -#ifdef HAVE_DOSISH_SYSTEM - #include - #include -#endif - -#include "util.h" -#include "cipher.h" -#include "i18n.h" - -static void -my_usage(void) -{ - fprintf(stderr, "usage: bftest [-e][-d] algo key\n"); - exit(1); -} - -const char * -strusage( int level ) -{ - return default_strusage(level); -} - -static void -i18n_init(void) -{ - #ifdef ENABLE_NLS - #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 - -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 - -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 -#include -#include -#include -#include -#include -#include -#include -#ifdef HAVE_DOSISH_SYSTEM - #include /* for setmode() */ -#endif -#include -#ifdef __riscos__ -#include -#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 .\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 -#include -#include -#include - - -#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 -#include -#include -#include - -#include "util.h" -#include "mpi.h" -#include "i18n.h" - -#define STACKSIZE 100 -static MPI stack[STACKSIZE]; -static int stackidx; - - -const char * -strusage( int level ) -{ - const char *p; - switch( level ) { - case 10: - case 0: p = "mpicalc - v" VERSION "; " - "Copyright 1997 Werner Koch (dd9jn)" ; break; - case 13: p = "mpicalc"; break; - case 14: p = VERSION; break; - case 1: - case 11: p = "Usage: mpicalc (-h for help)"; - break; - case 2: - case 12: p = - "\nSyntax: mpicalc [options] [files]\n" - "MPI RPN calculator\n"; - break; - default: p = default_strusage(level); - } - return p; -} - - -static void -i18n_init(void) -{ - #ifdef ENABLE_NLS - #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 -#include -#include -#include -#include -#include -#include -#ifdef HAVE_SYS_IPC_H - #include - #include -#endif -#ifdef HAVE_SYS_SHM_H - #include -#endif -#include "util.h" -#include "ttyio.h" -#include "i18n.h" - -#ifdef HAVE_DOSISH_SYSTEM -int main( int argc, char **argv ) -{ - fprintf(stderr, "Sorry, not yet available for DOSish systems\n"); - exit(1); -} -#else - -static int serverpid = -1; - -static void -my_usage(void) -{ - fprintf(stderr, "usage: shmtest gpg-command-line\n"); - exit(1); -} - -const char * -strusage( int level ) -{ - return default_strusage(level); -} - -static void -i18n_init(void) -{ - #ifdef ENABLE_NLS - #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 - - * http.c (connect_server): Try all A records for names with - multiple addresses until one answers for both MINGW32 and not - MINGW32. - -2002-10-10 David Shaw - - * http.c (connect_server): Properly handle a single A record that - fails connect(). - -2002-10-03 David Shaw - - * logger.c (g10_log_warning, log_set_strict): Add new log_warning - logger command which can be switched between log_info and - log_error via log_set_strict. - -2002-09-24 David Shaw - - * http.c (connect_server): Try all A records for names with - multiple addresses until one answers (not MINGW32). - -2002-09-16 Werner Koch - - * w32reg.c (read_w32_registry_string): Fallback to HLM. - -2002-09-12 Stefan Bellon - - * fileutil.c (make_filename): Removed variable for RISC OS to - avoid compiler warning. - - * secmem.c: Removed static variable for RISC OS to avoid - compiler warning. - -2002-09-11 Werner Koch - - * simple-gettext.c: Disable charset mappings. We do it now when - installing the files. - -2002-09-09 Werner Koch - - * w32reg.c (read_w32_registry_string): Handle REG_EXPAND_SZ. - Suggested by Ryan Malayter. - - * strgutil.c (ascii_strcasecmp): Replaced by code from gnulib. - (ascii_strncasecmp): New. - -2002-09-02 Werner Koch - - * simple-gettext.c (set_gettext_file): Make sure that we only use - backslashes. - - * strgutil.c (set_native_charset): Allow NULL as argument to use - nl_langinfo for selection. Mapped latin-15 to latin-1. - -2002-08-30 Werner Koch - - * iobuf.c (block_filter): Removed the assert, so that one can pass - the first character of a message and use the block filter for - non partial length encoded packets. - -2002-08-06 Stefan Bellon - - * ttyio.c [__riscos__]: Moved low-level RISC OS stuff to riscos.c. - * riscos.c: Use new SWI calling mechanism of UnixLib. - -2002-08-03 Stefan Bellon - - * secmem.c (init_pool, secmem_term): Changed #if to #ifdef in - order to avoid warning with RISC OS' Norcroft C. - -2002-07-25 David Shaw - - * secmem.c: "Warning" -> "WARNING" - -2002-07-05 Werner Koch - - * argparse.c (initialize): We better exit after a read error so - that we don't run into an endless loop when reading a directory. - Noted by Andrew Suffield. - -2002-07-01 David Shaw - - * argparse.c (optfile_parse): Fix variable typo - 'p2' should be - 'p' :) - -2002-06-29 Werner Koch - - * argparse.c (optfile_parse): Renamed an auto I to P2 to avoid - shadowing warning. - -2002-06-21 Stefan Bellon - - * riscos.c (riscos_global_defaults): New. - -2002-06-20 Stefan Bellon - - * riscos.c (riscos_set_filetype_by_number, riscos_set_filetype): - New. Set RISC OS filetype according to MIME type. - -2002-06-14 David Shaw - - * strgutil.c (pop_strlist): New function to pop the head off of a - strlist. - -2002-06-05 Timo Schulz - - * fileutil.c (is_file_compressed): Corrected the magic values - for bzip2 and gzip. Noted by David. - -2002-05-22 Werner Koch - - * fileutil.c (compare_filenames): Replaced stricmp by strcasecmp. - * miscutil.c (answer_is_yes_no_quit,answer_is_yes_no_default): Ditto. - - * strgutil.c (strncasecmp): New. - (memicmp): Removed. - -2002-05-10 Stefan Bellon - - * memory.c (add_entry) [M_DEBUG]: Added some missing EXTRA_ALIGN. - (free_entry) [M_DEBUG]: Free secure memory via secmem_free. - (alloc_secure): Malloc at least 1 byte. - (realloc) [M_GUARD]: Added missing FNAMEARG to function call. - - * logger.c (g10_log_bug0) [__riscos__]: Make use of first - g10_log_bug0 function for later Norcroft compiler. - - * riscos.c: Added stdlib.h include. - -2002-05-04 Werner Koch - - * http.c (write_server) [__MINGW32__]: Replaced WriteFile by send - because sockets don't work with WriteFile under NT anymore. - -2002-05-03 David Shaw - - * argparse.c (optfile_parse): Remove quotes only if they totally - enclose the string, and do not occur within the string. This - makes specifying a program under Win32 easier when you need quotes - around part of a string, but not around the whole string. - -2002-05-02 Werner Koch - - * memory.c (alloc): Malloc at least 1 byte. Noted by Winona Brown. - -2002-04-23 David Shaw - - * miscutil.c: New function answer_is_yes_no_default() to give a - default answer. - -2002-04-22 Stefan Bellon - - * riscos.c (riscos_open, riscos_fopen, riscos_fstat, set_filetype): - Removed as they're not needed anymore. - - * iobuf.c (direct_open) [__riscos__]: Don't allow opening of - directories. - -2002-04-08 Werner Koch - - Fixed filename of last entry. - -2002-03-29 David Shaw - - * miscutil.c (print_string, utf8_to_native): If a delimiter is - used, then quote the backslash character as well. Problem noted - by Rainer Perske. - -2002-03-15 Werner Koch - - * argparse.c (optfile_parse): Fixed missing argument handling. - -2002-02-28 Timo Schulz - - * http.c (write_server): Convert integer to a HANDLE for W32. - -2002-01-27 David Shaw - - * iobuf.c (iobuf_fdopen, iobuf_sockopen): Do not cache fdopened - fds on close. - -2002-01-08 Werner Koch - - * secmem.c (print_warn): Print a pointer to the FAQ. - -2002-01-05 Werner Koch - - * argparse.c (default_strusage): Set default copyright date to 2002. - -2002-01-02 Stefan Bellon - - * iobuf.c [__riscos__]: Updated include file name. - - * fileutil.c [__riscos__]: Ditto. - - * ttyio.d [__riscos__]: Ditto. - - * riscos.c [__riscos__]: Ditto. Added debugging code and - unified error messages. - -2001-12-27 David Shaw - - * errors.c (g10_errstr): Added G10ERR_KEYSERVER - -2001-12-27 Werner Koch - - * simple-gettext.c [MINGW32]: Fixed last changed. - -2001-12-22 Stefan Bellon - - * memory.c (realloc): Fixed realloc not working when M_GUARD is - defined and first parameter is NULL. - -2001-12-22 Timo Schulz - - * fileutil.c (is_file_compressed): New. - -2001-12-19 Werner Koch - - * simple-gettext.c, w32reg.c [CYGWIN32]: Allow to use this file - -2001-10-11 Werner Koch - - * http.c (do_parse_uri): Changed initialization of the port number - so that it does also work with x-hkp. By David Shaw. - -2001-09-19 Werner Koch - - * w32reg.c (get_root_key): New. - (read_w32_registry_string): Use it here. - (write_w32_registry_string): New. Contributed by Timo. - - * iobuf.c (iobuf_ioctl): New command to disable fd - caching. Implemented no_cache flag where needed. - (iobuf_sockopen): Always set no_cache flag. - - * strgutil.c (utf8_to_native): Add a delim arg and changed all - callers. Make sure that quoting is done when translation is - disabled. - * miscutil.c (print_utf8_string2): New. - -2001-09-17 Werner Koch - - * miscutil.c (print_string): Use explicit ranges and not iscntrl(). - (make_printable_string): Ditto. - -2001-09-07 Werner Koch - - * strgutil.c (strsep): New, taken from glibc 2.2.1. - -2001-09-03 Werner Koch - - * miscutil.c (strtimestamp,asctimestamp): Avoid trigraphs. - -2001-08-21 Stefan Bellon - - * riscos.c [__riscos__] (close_fds): Fixed possible endless loop. - -2001-08-20 Werner Koch - - Applied patches from Stefan Bellon to support - RISC OS. Nearly all of these patches are identified by the - __riscos__ macro. - * secmem.c [__riscos__]: Disabled secure memory stuff. - * dotlock.c, ttyio.c [__riscos__]: Adapted for RISC OS - * fileutil.c, iobuf.c: Adapted for RISC OS; mainly replaced - hardcoded path separators with EXTSEP_S like macros. - * http.c (send_request): Use macros for the env-var name. - * logger.c [__riscos__]: Do an fflush at the end of each log - function. - * memory.c [__riscos__]: Minor patches - * riscos.c (set_filetype): New. - - * secmem.c (lock_pool): Under HPUX mlock is broken but we might - have plock, so we use this to lock the entire process. By Albert - Chin. - -2001-07-03 Werner Koch - - * strgutil.c (utf8_to_native): Fixed printing of invalid utf-8 - characters. Thomas Roessler reported that the escaping didn't work - correct. - -2001-06-12 Werner Koch - - * strgutil.c (ascii_memistr,ascii_isupper,ascii_islower, - ascii_toupper,ascii_tolower, ascii_strcasecmp, ascii_memcasecmp): New. - (set_native_charset): Use ascii_strcasecmp() - * fileutil.c (compare_filenames): Ditto - * miscutil.c (answer_is_yes): Ditto. - (answer_is_yes_no_quit): Ditto. - -2001-06-06 Werner Koch - - * strgutil.c (vasprintf) [__MINGW32__]: New. Taken from libiberty. - * ttyio.c (tty_printf) [__MINGW32__]: Replaced the sprintf with - the new vasprintf. - -2001-06-05 Werner Koch - - * dotlock.c (make_dotlock): Typo fixes. - -2001-05-25 Werner Koch - - * ttyio.c (do_get): Fixed a serious format string bug. Thanks to - fish stiqz. - -2001-05-23 Werner Koch - - * secmem.c (EPERM): Try to work around a Slackware problem. - -2001-05-05 Werner Koch - - * http.c (http_start_data): Flush before writing. - (http_wait_response): No need to flush here. - -2001-04-27 Werner Koch - - * memory.c (out_of_core): Print an explanation on reasons why - secret memory can get exhausted. - -2001-04-23 Werner Koch - - * http.c (http_wait_response): Implement new flag to inhibit the - TCP shutdown. - -2001-04-20 Werner Koch - - * http.c (http_start_data): Use write_server and not the iobuf - stuff. I wonder why we are at all using write_server - shouldn't - it be handled by iobuf? - - * strgutil.c (set_native_charset): Allow utf-8 by introducing the - new no_translation variable. - (native_to_utf8): Handle no_translation. - (utf8_to_native): Ditto. - -2001-04-19 Werner Koch - - * miscutil.c (asctimestamp): Handle negative times. We must do - this because Windoze segvs on negative times passed to gmtime(). - (strtimestamp): Ditto. - -2001-04-14 Werner Koch - - * strgutil.c (utf8_to_native): Fixed a segv. Thanks to Keith Clayton. - -2001-04-13 Werner Koch - - * iobuf.c (iobuf_fopen): Removed because it is not used and - furthermore mode is ignored for an fname of "-". Suggested by - Florian Weimer. - -2001-04-02 Werner Koch - - * iobuf.c (translate_file_handle): New. Use this function - everywhere in this file. - (iobuf_translate_file_handle): Always use the osfhandle stuff here - because callers don't know the implementation details of iobuf and - they expect that the handles are translated. - -2001-03-29 Werner Koch - - * miscutil.c (answer_is_yes): An empty string does now return no. - (answer_is_yes_no_quit): Likewise. - - * iobuf.c (iobuf_close): Burn the buffers. - -2001-03-26 Werner Koch - - * ttyio.c: Define TERMDEVICE depending on OS. - - * http.c (http_start_data): send a CRLF and not just a LF. - Pointed out by Steven Murdoch. - -2001-03-13 Werner Koch - - * iobuf.c (iobuf_sockopen): New. - (sock_filter) [__MINGW32__]: New. - (iobuf_ioctl): New. - (file_filter): Implemented keep_open mode. - * http.c (http_open, http_wait_response): Replaced iobuf_fdopen by - iobuf_sockopen and use an iobuf_ioctl to avoid the dup(). - (deinit_sockets, init_sockets) [__MINGW32__]: New. - (connect_server, write_server): Add code to work with W32 sockets. - -2001-03-12 Werner Koch - - * strgutil.c (check_trailing_chars,check_trailing_ws): New. - -2001-03-08 Werner Koch - - * argparse.c (default_strusage): Changed year of printed copyright - to 2001. - - * iobuf.c (fd_cache_invalidate, fd_cache_close, fd_cache_open): New. - (direct_open): Invalidate the fd_cache for read access. - (file_filter): Cache the close here. - (iobuf_open): Use new my_fopen_ro macro to try the cache first. - -2001-03-07 Werner Koch - - * iobuf.c: Made the old stdio file handling cpp conditional - controlled by FILE_FILTER_USES_STDIO and added a new - open/read/close based one. We don't need the stdio buffering - becuase we are doing our own buffering anyway. And it is a - prerequesite to allow the use of ReadFile et al for W32 which in - turn is needed to make the http stuff work there. The new W32 - stuff has also been implemented. Minor changes to all open functions. - (direct_open): New. - (file_filter): Core of the new read/write handling. - (iobuf_get_filelength): Use W32 API function here. But it is - currently limited to 2GB files. - (iobuf_seek): Ditto. - -2001-03-01 Werner Koch - - * errors.c (g10_errstr): New codes UNU_SECKEY and UNU_PUBKEY. - -2000-12-28 Werner Koch - - * dotlock.c: Made all_lockfiles volatile. - (remove_lockfiles): Made public. - -2000-11-30 Werner Koch - - * iobuf.c (iobuf_translate_file_handle): New. - (iobuf_open, iobuf_create): Use it for special filenames - -2000-11-11 Paul Eggert - - * iobuf.c (iobuf_get_filelength): Now returns off_t, not u32. - Remove kludges to worry about large files; the callers check - for files that are too large, and they should already be doing - the right thing in an implementation-independent way. - (fopen, fstat): Remove macros. - - * iobuf.c (iobuf_set_limit, iobuf_tell, iobuf_seek): - Use off_t, not ulong, for file offsets. - (): Include if needed. - (LONG_MAX, LONG_MIN): Define a substitute if needed. - (fseeko): Define a substitute if needed. - - * iobuf.c (iobuf_seek): Do not use %lu to report file - -2000-11-09 Werner Koch - - * iobuf.c (iobuf_enable_special_filenames): New. - (check_special_filename): New. - (iobuf_open): check for special filenames. - (iobuf_create): Ditto. - -2000-10-23 Werner Koch - - * secmem.c (lock_pool): Don't print warning for Windows. - -2000-10-16 Werner Koch - - * secmem.c (lock_pool): Fixed error checking for Linux. - By James Troup. - -Thu Sep 14 14:20:38 CEST 2000 Werner Koch - - * miscutil.c (answer_is_yes_no_quit): Swapped order of yes/no test - so that no is returned for an empty input. By David Champion. - -Wed Sep 6 17:55:47 CEST 2000 Werner Koch - - * iobuf.c: Use fopen64 insead of fopen when available. - (iobuf_get_filelength): Use fstat64 when available but return - 2^32-1 if the file is larger than this value. - -Wed Sep 6 14:59:09 CEST 2000 Werner Koch - - * secmem.c (secmem_realloc): check for failed secmem_malloc. By - Matt Kraai. - - * strgutil.c (utf8_to_native): Fixed null ptr problem. By - Giampaolo Tomassoni. - -Thu Jul 27 10:02:38 CEST 2000 Werner Koch - - * iobuf.c: Use setmode() at several places to set stdin and stdout - to binary mode for MSDOS based systems - - * iobuf.c (underflow): Initialize dummy_len to keep memory checker happy. - -Fri Jun 9 10:09:52 CEST 2000 Werner Koch - - * ttyio.c: Simulate termios with termios. By Dave Dykstra. - -Thu Jun 8 20:22:00 CEST 2000 Werner Koch - - * secmem.c (lock_pool,secmem_init): Additional check for dropped privs. - -Tue May 30 16:37:55 CEST 2000 Werner Koch - - * iobuf.c (iobuf_cancel): Fix for MSDOS. - -Fri Apr 14 19:37:08 CEST 2000 Werner Koch - - * dotlock.c (disable_dotlock): New. Implmented this in the module. - -2000-03-09 14:04:22 Werner Koch (wk@habibti.openit.de) - - * argparse.c (default_strusage): Changed year of default copyright. - -Tue Mar 7 18:45:31 CET 2000 Werner Koch - - * secmem.c (lock_pool): No more warning for QNX. By Sam Roberts. - -2000-03-02 15:51:04 Werner Koch (wk@habibti.gnupg.de) - - * ttyio.c (tty_print_utf8_string): Oops. - -Thu Mar 2 15:37:46 CET 2000 Werner Koch - - * ttyio.c (tty_print_utf8_string2): New to allow a max output size. - -Wed Feb 23 10:07:57 CET 2000 Werner Koch - - * miscutil.c (asctimestamp): Fix for possible buffer overflow by - large system returned date format string. - -Fri Dec 31 14:08:15 CET 1999 Werner Koch - - * logger.c (log_inc_errorcount): New. - -Sat Dec 4 12:30:28 CET 1999 Werner Koch - - * iobuf.c (iobuf_cancel): Broadcast the new Cancel mesaage to all - filters. - -Mon Nov 22 11:14:53 CET 1999 Werner Koch - - * strgutil.c (strcasecmp): New. - - * secmem.c (pool_is_mmapped): Made volatile. - -Sat Oct 9 20:34:41 CEST 1999 Werner Koch - - * Makefile.am: Removed libtool. - -Fri Oct 8 20:32:01 CEST 1999 Werner Koch - - * w32reg.c: New. - * simple-gettext.c: Use the Registry to locate the mo file. - - * http.c (send_request): Add support for proxys; suggested by - Walter Hofmann. - (http_open_document): Pass flags to http_open. - -Fri Sep 17 12:56:42 CEST 1999 Werner Koch - - - * secmem.c (lock_pool): Check for ENOSYS return my mlock() on - old SCOs. - - * ttyio.c (do_get): Replaced #if __MINGW32__ by #ifdef becuase - gcc 2.95.1 assigns a floating point value (0.2) to this macro, - which in turn can't be used in an expression. - -Wed Sep 15 16:22:17 CEST 1999 Werner Koch - - - * simple-gettext.c: New. - -Wed Sep 1 15:30:44 CEST 1999 Werner Koch - - - * argparse.c (arg_parse): Add standard options to the dump-options - output. - -Tue Aug 31 17:20:44 CEST 1999 Werner Koch - - - * strgutil (utf8_to_native): Implemented. - (check_utf8_string): Removed. - - * miscutil.c (make_printable_string): Fixed possible buffer overflow. - (print_utf8_string): New. - - * ttyio.c (tty_print_utf8_string): New. - -Mon Aug 30 20:38:33 CEST 1999 Werner Koch - - - * secmem.c (pool_okay): declared volatile. - - * miscutil.c (answer_is_yes): Always check for plain "yes". - (answer_is_yes_no_quit): Likewise. - - * dotlock.c (create_dotlock): Fixed segv during cleanup. - -Mon Jul 12 14:55:34 CEST 1999 Werner Koch - - - * argparse.c (initialize): Init ret_xxx. - (optfile_parse): Remove quotes from arguments. - -Wed Jul 7 13:08:40 CEST 1999 Werner Koch - - - * memory.c (membug): Use if either M_DEBUG or M_GUARD is used. - - * miscutil.c (scan_isodatestr): New. - - * logger.c (g10_log_mpidump): Moved to ../mpi/mpicoder.c - (g10_log_print_prefix): Renamed from print_prefix and made global. - - * Makefile.am: Support for libtool. - -Thu Jul 1 12:47:31 CEST 1999 Werner Koch - - - * miscutil.c (make_printable_string): New. - - * strgutil.c (add_to_strlist2,append_to_strlist2): New. - -Tue Jun 29 21:44:25 CEST 1999 Werner Koch - - - * secmem.c (USE_CAPABILITIES): Capabilities support (Remi). - -Sat Jun 26 12:15:59 CEST 1999 Werner Koch - - - * dotlock.c (create_dotlock): s/uts/utsbuf/ cause there an Amdahl - system with the name UTS (Dave Dykstra). - - * secmem.c (DEFAULT_POOLSIZE): Doubled the size. - -Fri Jun 18 00:18:02 CEST 1999 Michael Roth - - * iobuf.c: file_filter() Detection of EOF on terminals - improved/fixed (see Bug #21). - -Mon Jun 14 21:18:54 CEST 1999 Michael Roth - - * ttyio.c: tty_no_terminal() new. - -Sat Jun 5 15:30:33 CEST 1999 Werner Koch - - * strgutil.c (set_native_charset): Support Latin-2 - -Tue Jun 1 16:01:46 CEST 1999 Werner Koch - - * iobuf.c (iobuf_get_real_fname): Made global and now keep a - copy of the name in the iobuf struct. - -Mon May 31 19:41:10 CEST 1999 Werner Koch - - * iobuf.c (file_filter,block_filter): Speed patches (Rémi). - -Thu May 27 09:40:55 CEST 1999 Werner Koch - - * miscutil.c (answer_is_yes_no_quit): New. - -Sun May 23 14:20:22 CEST 1999 Werner Koch - - * dotlock.c: Tweaked to make it compile under mingw32 - * http.c: Disabled for mingw32. - -Sat May 22 22:47:26 CEST 1999 Werner Koch - - * logger.c (log_set_logfile): New. - -Thu May 20 14:04:08 CEST 1999 Werner Koch - - * memory.c (membug): Nanu, there was a const instead of a static. - - * strgutil.c (trim_trailing_chars): New. - -Mon May 17 21:54:43 CEST 1999 Werner Koch - - * logger.c (g10_log_hexdump): Made 2nd arg a const. - -Wed Apr 28 13:03:03 CEST 1999 Werner Koch - - * miscutil.c (asctimestamp): Use nl_langinfo (Gaël Quéri). - -Sun Apr 18 10:11:28 CEST 1999 Werner Koch - - * argparse.c (store_alias): Disabled becuase it is not used. - - * ttyio.c (tty_batchmode): New - -Sat Mar 20 11:44:21 CET 1999 Werner Koch - - * http.c: Swapped to includes. - -Tue Mar 2 16:44:57 CET 1999 Werner Koch - - * strgutil.c (get_native_charset): New. - -Fri Feb 26 17:55:41 CET 1999 Werner Koch - - * secmem.c (memblock_struct): Force align (Rémi Guyomarch) - -Wed Feb 24 11:07:27 CET 1999 Werner Koch - - * iobuf.c (block_filter): Fixed the oscillating partial packet chunks. - -Fri Feb 19 15:49:15 CET 1999 Werner Koch - - * iobuf.c (iobuf_push_filter2): New to allow transer of context - ownership to the iobuf. Released the context where needed. - -Tue Feb 16 14:10:02 CET 1999 Werner Koch - - * strgutil.c (add_to_strglist): Clear the new flags field - (append_to_strglist): Ditto. - - * dotlock.c (read_lockfile): terminate pidstr (Michael). - -Wed Feb 10 17:15:39 CET 1999 Werner Koch - - * dotlock.c (remove_lockfiles): Add cleanup function. - (make_dotlock): Add deadlock check. - - * secmem.c (secmem_malloc): Changed error message. - -Wed Jan 20 21:40:21 CET 1999 Werner Koch - - * http.c (http_wait_response): Moved the shutdown behind the dup - -Wed Jan 20 18:59:49 CET 1999 Werner Koch - - * http.c (send_request): Removed double LF - -Tue Jan 19 19:34:58 CET 1999 Werner Koch - - * * iobuf.c (iobuf_push_filter): Allow filters for temp streams - - (iobuf_write_temp): Ditto. - (iobuf_flush_temp): New. - (iobuf_unget_and_close_temp): Removed. - - * http.c (close_http_document): Renamed to http_close(). - (open_http_document): Renamed to http_open_document(). - (http_open): New. - (http_start_data): New. - (http_wait_response): New. - - -Sun Jan 17 11:04:33 CET 1999 Werner Koch - - * strgutil.c (trim_trailing_ws): New. - -Sat Jan 16 12:03:27 CET 1999 Werner Koch - - * http.c (connect_server): Fixed stupid bug. - -Sat Jan 16 09:27:30 CET 1999 Werner Koch - - * http.c: New - - -Wed Jan 13 14:10:15 CET 1999 Werner Koch - - * iobuf.c (iobuf_fdopen): New. - -Sat Jan 9 16:02:23 CET 1999 Werner Koch - - * secmem.c (lock_pool): add another check that setuid() worked. - (secmem_init): Ditto. - -Thu Jan 7 18:00:58 CET 1999 Werner Koch - - * iobuf.c (iobuf_clear_eof): Removed. - (underflow): Changed the eof handling. - (iobuf_pop_filter): Made static and renamed to pop_filter. - - * iobuf.c (iobuf_read_line): New. - -Sun Jan 3 15:28:44 CET 1999 Werner Koch - - * dotlock.c (make_dotlock): print another informal message. - - (make_dotlock): Removed the cpp checks. - - -Tue Dec 29 14:41:47 CET 1998 Werner Koch - - * secmem.c: Moved unistd.h out of the #ifdef - - * dotlock.c (make_dotlock): Sun has no SYS_NMLN - - * iobuf.c (iobuf_unget_and_close_temp): Reset .start - -Sat Dec 12 18:40:32 CET 1998 Werner Koch - - * argparse.c (arg_pars): fixed opts[i] with negative index. - -Fri Nov 27 21:37:41 CET 1998 Werner Koch - - * dotlock.c: Implemented - -Wed Nov 25 11:30:07 1998 Werner Koch (wk@isil.d.shuttle.de) - - * iobuf.c (iobuf_pop_filter): Fixed sigsegv after error. - -Thu Nov 19 07:09:55 1998 Werner Koch - - * miscutil.c (strtimevalue): New. - -Tue Nov 10 10:01:53 1998 Werner Koch (wk@isil.d.shuttle.de) - - * strgutil.c (set_native_charset): New. - (native_to_utf8): Now handles koi8-r. - -Tue Nov 3 16:17:56 1998 Werner Koch (wk@isil.d.shuttle.de) - - * strgutil.c (native_to_utf8): New. - (utf8_to_native): New, but only as a stub. - - * argparse.c (optfile_parse): Trimmed spaces from args. - - -Wed Oct 28 08:01:49 1998 me,,, (wk@tobold) - - * argparse.c (find_long_option): New. - (arg_parse): option=value is now allowed. Add a new internal - option "--dump-options". - -Thu Oct 22 16:25:49 1998 Michael Roth (mroth@nessie.de) - - * fileutil.c (make_basename): New. - (make_dirname): New. - -Wed Oct 21 12:20:29 1998 Werner Koch (wk@isil.d.shuttle.de) - - * util.c (iobuf_flush): autoincreasing of a temp. iobuf - (iobuf_temp_with_content): New. - -Tue Oct 13 12:40:13 1998 Werner Koch (wk@isil.d.shuttle.de) - - * util.c (.nofast): set this variable - -Wed Oct 7 19:27:50 1998 Werner Koch (wk@isil.d.shuttle.de) - - * memory.c (m_print_stats): New. - -Tue Oct 6 09:53:56 1998 Werner Koch (wk@isil.d.shuttle.de) - - * strgutil.c (memicmp): Add HAVE_MEMICMP. - -Mon Sep 21 19:45:01 1998 Werner Koch (wk@(none)) - - * secmem.c: New flags to allow suspend/resume of warnings. - -Fri Sep 18 16:25:47 1998 Werner Koch (wk@(none)) - - * secmem.c (lock_pool): Kludge for broken mlock on HPUX 10.20 - -Tue Sep 15 17:52:21 1998 Werner Koch (wk@(none)) - - * miscutil.c (asctimestamp): New. - -Mon Sep 14 09:38:18 1998 Werner Koch (wk@(none)) - - * secmem.c (init_pool): Now mmaps /dev/zero if we do not have MAP_ANON. - -Wed Sep 9 13:52:28 1998 Werner Koch (wk@(none)) - - * ttyio.c (do_get): Ctrl-D is now a valid but special character - -Mon Sep 7 13:52:41 1998 Werner Koch (wk@(none)) - - * iobuf.c (get_real_fname): New and changed file_filter datastructures - and their initialization. - -Tue Aug 11 15:12:35 1998 Werner Koch (wk@(none)) - - * miscutil.c (answer_is_yes): i18ned - -Sat Aug 8 18:35:00 1998 Werner Koch (wk@(none)) - - * ttyio.c (cleanup): New. - -Mon Aug 3 17:06:00 1998 Werner Koch (wk@(none)) - - * secmem.c (MAP_ANON): Add a macro test - -Wed Jul 29 14:53:34 1998 Werner Koch (wk@(none)) - - * ttyio.c (tty_get_answer_is_yes): New. - -Tue Jul 21 10:35:48 1998 Werner Koch (wk@(none)) - - * argparse.c: New option flag to distinguish options and commands. - -Sat Jul 18 19:49:30 1998 Werner Koch (wk@(none)) - - * argparse.c (arg_parse): Added -? as alias for -h - -Thu Jul 9 14:47:20 1998 Werner Koch (wk@isil.d.shuttle.de) - - * secmem.c (secmem_init): Drops setuid if called with 0. - -Tue Jul 7 11:49:25 1998 Werner Koch (wk@isil.d.shuttle.de) - - * logger.c (log_set_filename): New. - -Mon Jul 6 09:03:49 1998 Werner Koch (wk@isil.d.shuttle.de) - - * strgutil.c (append_to_strlist): New. - -Thu Jul 2 15:55:44 1998 Werner Koch (wk@isil.d.shuttle.de) - - * iobuf.c (block_filter): Add writing of OP partial length headers. - -Fri Jun 26 10:38:35 1998 Werner Koch (wk@isil.d.shuttle.de) - - * ttyio.c (do_get): all iso8859-1 characters are now allowed. - -Thu Jun 25 15:57:21 1998 Werner Koch (wk@isil.d.shuttle.de) - - * secmem.c (lock_pool): Removed left over test code. - -Wed Jun 10 07:39:41 1998 Werner Koch,mobil,,, (wk@tobold) - - * fileutil.c (compare_filenames): New. - - * argparse.c (arg_parse): New flag bit 6 to ignore --version - -Thu May 14 16:45:13 1998 Werner Koch (wk@isil.d.shuttle.de) - - * argparse.c (show_help): Add some formatting stuff - -Fri May 8 17:06:49 1998 Werner Koch (wk@isil.d.shuttle.de) - - * errors.c (strerror): New if !HAVE_STRERROR - -Mon May 4 19:48:03 1998 Werner Koch (wk@isil.d.shuttle.de) - - * iobuf.c (iobuf_read): Code is now faster. - * (iobuf_write): ditto. - -Mon Apr 27 11:01:32 1998 Werner Koch (wk@isil.d.shuttle.de) - - * strgutil.c (memicmp): New. - -Thu Mar 19 11:29:03 1998 Werner Koch (wk@isil.d.shuttle.de) - - * strgutil.c (memistr): Add const to return and first arg. - -Sat Mar 7 11:54:35 1998 Werner Koch (wk@isil.d.shuttle.de) - - * miscutil.c (print_string): New arg delim; changed all callers. - -Thu Mar 5 12:19:30 1998 Werner Koch (wk@isil.d.shuttle.de) - - * errors.c: New strings. - -Thu Mar 5 12:06:31 1998 Werner Koch (wk@isil.d.shuttle.de) - - * iobuf.c (iobuf_open): A name of "-" now opens stdin. - * fileutil.c (print_fname_stdout, print_fname_stdin): New. - -Fri Feb 27 10:20:03 1998 Werner Koch (wk@isil.d.shuttle.de) - - * memory.c (m_is_secure): Removed. - * secmem.c (m_is_secure): Moved to here. - - * secmem.c (secmem_realloc): New. - * memory.c (M_GUARD,EXTRA_ALIGN): New (all functions). - -Thu Feb 26 14:36:51 1998 Werner Koch (wk@isil.d.shuttle.de) - - * secmem.c (lock_pool): No error if EAGAIN is returned instead - of EPERM. - -Fri Feb 20 17:43:05 1998 Werner Koch (wk@isil.d.shuttle.de) - - * ttyio.c [MINGW32]: Add support for mingw32. - -Tue Feb 17 19:43:44 1998 Werner Koch (wk@isil.d.shuttle.de) - - * memory.c (dump_table_at_exit): New. - -Mon Feb 16 10:07:28 1998 Werner Koch (wk@isil.d.shuttle.de) - - * argparse.c (show_version, show_help, default_strusage): Changed - according to GNU standards. - -Mon Feb 16 08:58:25 1998 Werner Koch (wk@isil.d.shuttle.de) - - * iobuf.c (iobuf_peek): New - -Fri Feb 13 19:34:59 1998 Werner Koch (wk@isil.d.shuttle.de) - - * iobuf.c (iobuf_seek): Set counters to new offset. - -Fri Feb 13 17:13:04 1998 Werner Koch (wk@isil.d.shuttle.de) - - * logger.c (log_set_name, log_get_name): New. - (print_prefix, pgm_name): New, changed all function to make use it. - (log_mpidump): Removed the "DBG" prefix. - (log_hexdump): Ditto. - - * logger.c (printstr): Removed. - -Fri Feb 13 15:14:13 1998 Werner Koch (wk@isil.d.shuttle.de) - - * argparse.c (show_help): New '\v' kludge. - - - - 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 -#include -#include -#include -#include - -#include "util.h" -#include "i18n.h" - - -/********************************* - * @Summary arg_parse - * #include - * - * typedef struct { - * char *argc; pointer to argc (value subject to change) - * char ***argv; pointer to argv (value subject to change) - * unsigned flags; Global flags (DO NOT CHANGE) - * int err; print error about last option - * 1 = warning, 2 = abort - * int r_opt; return option - * int r_type; type of return value (0 = no argument found) - * union { - * int ret_int; - * long ret_long - * ulong ret_ulong; - * char *ret_str; - * } r; Return values - * struct { - * int idx; - * const char *last; - * void *aliases; - * } internal; DO NOT CHANGE - * } ARGPARSE_ARGS; - * - * typedef struct { - * int short_opt; - * const char *long_opt; - * unsigned flags; - * } ARGPARSE_OPTS; - * - * int arg_parse( ARGPARSE_ARGS *arg, ARGPARSE_OPTS *opts ); - * - * @Description - * This is my replacement for getopt(). See the example for a typical usage. - * Global flags are: - * Bit 0 : Do not remove options form argv - * Bit 1 : Do not stop at last option but return other args - * with r_opt set to -1. - * Bit 2 : Assume options and real args are mixed. - * Bit 3 : Do not use -- to stop option processing. - * Bit 4 : Do not skip the first arg. - * Bit 5 : allow usage of long option with only one dash - * Bit 6 : ignore --version and --help - * all other bits must be set to zero, this value is modified by the - * function, so assume this is write only. - * Local flags (for each option): - * Bit 2-0 : 0 = does not take an argument - * 1 = takes int argument - * 2 = takes string argument - * 3 = takes long argument - * 4 = takes ulong argument - * Bit 3 : argument is optional (r_type will the be set to 0) - * Bit 4 : allow 0x etc. prefixed values. - * Bit 7 : this is a command and not an option - * You stop the option processing by setting opts to NULL, the function will - * then return 0. - * @Return Value - * Returns the args.r_opt or 0 if ready - * r_opt may be -2/-7 to indicate an unknown option/command. - * @See Also - * ArgExpand - * @Notes - * You do not need to process the options 'h', '--help' or '--version' - * because this function includes standard help processing; but if you - * specify '-h', '--help' or '--version' you have to do it yourself. - * The option '--' stops argument processing; if bit 1 is set the function - * continues to return normal arguments. - * To process float args or unsigned args you must use a string args and do - * the conversion yourself. - * @Example - * - * ARGPARSE_OPTS opts[] = { - * { 'v', "verbose", 0 }, - * { 'd', "debug", 0 }, - * { 'o', "output", 2 }, - * { 'c', "cross-ref", 2|8 }, - * { 'm', "my-option", 1|8 }, - * { 500, "have-no-short-option-for-this-long-option", 0 }, - * {0} }; - * ARGPARSE_ARGS pargs = { &argc, &argv, 0 } - * - * while( ArgParse( &pargs, &opts) ) { - * switch( pargs.r_opt ) { - * case 'v': opt.verbose++; break; - * case 'd': opt.debug++; break; - * case 'o': opt.outfile = pargs.r.ret_str; break; - * case 'c': opt.crf = pargs.r_type? pargs.r.ret_str:"a.crf"; break; - * case 'm': opt.myopt = pargs.r_type? pargs.r.ret_int : 1; break; - * case 500: opt.a_long_one++; break - * default : pargs.err = 1; break; -- force warning output -- - * } - * } - * if( argc > 1 ) - * log_fatal( "Too many args"); - * - */ - -typedef struct alias_def_s *ALIAS_DEF; -struct alias_def_s { - ALIAS_DEF next; - char *name; /* malloced buffer with name, \0, value */ - const char *value; /* ptr into name */ -}; - -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 -#include -#include -#include -#include -#include -#include -#if !defined (HAVE_DOSISH_SYSTEM) -#include -#endif -#include -#include -#include -#include -#include -#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..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 -#include -#include -#include - -#include "errors.h" -#include "i18n.h" - -#ifndef HAVE_STRERROR -char * -strerror( int n ) -{ - extern char *sys_errlist[]; - extern int sys_nerr; - static char buf[15]; - - if( n >= 0 && n < sys_nerr ) - return sys_errlist[n]; - strcpy( buf, "Unknown error" ); - return buf; -} -#endif /* !HAVE_STRERROR */ - -const char * -g10_errstr( int err ) -{ - static char buf[50]; - const char *p; - - #define X(n,s) case G10ERR_##n : p = s; break; - switch( err ) { - case -1: p = "eof"; break; - case 0: p = "okay"; break; - X(GENERAL, N_("general error")) - X(UNKNOWN_PACKET, N_("unknown packet type")) - X(UNKNOWN_VERSION,N_("unknown version")) - X(PUBKEY_ALGO ,N_("unknown pubkey algorithm")) - X(DIGEST_ALGO ,N_("unknown digest algorithm")) - X(BAD_PUBKEY ,N_("bad public key")) - X(BAD_SECKEY ,N_("bad secret key")) - X(BAD_SIGN ,N_("bad signature")) - X(CHECKSUM , N_("checksum error")) - X(BAD_PASS , N_("bad passphrase")) - X(NO_PUBKEY ,N_("public key not found")) - X(CIPHER_ALGO ,N_("unknown cipher algorithm")) - X(KEYRING_OPEN ,N_("can't open the keyring")) - X(INVALID_PACKET ,N_("invalid packet")) - X(INVALID_ARMOR ,N_("invalid armor")) - X(NO_USER_ID ,N_("no such user id")) - X(NO_SECKEY ,N_("secret key not available")) - X(WRONG_SECKEY ,N_("wrong secret key used")) - X(UNSUPPORTED ,N_("not supported")) - X(BAD_KEY ,N_("bad key")) - X(READ_FILE ,N_("file read error")) - X(WRITE_FILE ,N_("file write error")) - X(COMPR_ALGO ,N_("unknown compress algorithm")) - X(OPEN_FILE ,N_("file open error")) - X(CREATE_FILE ,N_("file create error")) - X(PASSPHRASE ,N_("invalid passphrase")) - X(NI_PUBKEY ,N_("unimplemented pubkey algorithm")) - X(NI_CIPHER ,N_("unimplemented cipher algorithm")) - X(SIG_CLASS ,N_("unknown signature class")) - X(TRUSTDB ,N_("trust database error")) - X(BAD_MPI ,N_("bad MPI")) - X(RESOURCE_LIMIT ,N_("resource limit")) - X(INV_KEYRING ,N_("invalid keyring")) - X(BAD_CERT ,N_("bad certificate")) - X(INV_USER_ID ,N_("malformed user id")) - X(CLOSE_FILE ,N_("file close error")) - X(RENAME_FILE ,N_("file rename error")) - X(DELETE_FILE ,N_("file delete error")) - X(UNEXPECTED ,N_("unexpected data")) - X(TIME_CONFLICT ,N_("timestamp conflict")) - X(WR_PUBKEY_ALGO ,N_("unusable pubkey algorithm")) - X(FILE_EXISTS ,N_("file exists")) - X(WEAK_KEY ,N_("weak key")) - X(INV_ARG ,N_("invalid argument")) - X(BAD_URI ,N_("bad URI")) - X(INVALID_URI ,N_("unsupported URI")) - X(NETWORK ,N_("network error")) - X(SELFTEST_FAILED,"selftest failed") - X(NOT_ENCRYPTED ,N_("not encrypted")) - X(NOT_PROCESSED ,N_("not processed")) - /* the key cannot be used for a specific usage */ - X(UNU_PUBKEY ,N_("unusable public key")) - X(UNU_SECKEY ,N_("unusable secret key")) - X(KEYSERVER ,N_("keyserver error")) - 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 -#include -#include -#include -#include -#include -#include -#ifdef __riscos__ -#include -#include -#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 -#include -#include -#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 -#include -#include -#include -#include -#include -#include - -#ifdef __MINGW32__ - #include -#else - #include - #include - #include - #include - #include - #include - #include - #include -#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 "" -#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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef HAVE_DOSISH_SYSTEM - #include -#endif -#ifdef __riscos__ -#include -#include -#endif /* __riscos__ */ - -#include "memory.h" -#include "util.h" -#include "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 -#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 -#include -#include -#include -#include -#include - -#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 -#include -#include -#include -#include - -#include "types.h" -#include "memory.h" -#include "util.h" - - -#define MAGIC_NOR_BYTE 0x55 -#define MAGIC_SEC_BYTE 0xcc -#define MAGIC_END_BYTE 0xaa - -/* This is a very crude alignment check which does not work on all CPUs - * IIRC, I once introduced it for testing on an Alpha. We should better - * replace this guard stuff with one provided by a modern malloc library - */ -#if SIZEOF_UNSIGNED_LONG == 8 - #define EXTRA_ALIGN 4 -#else - #define EXTRA_ALIGN 0 -#endif - -#if defined(M_DEBUG) || defined(M_GUARD) - static void membug( const char *fmt, ... ); -#endif - -#ifdef M_DEBUG - - #ifndef M_GUARD - #define M_GUARD 1 - #endif - #undef 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 -#include -#include -#include -#include -#include -#ifdef HAVE_LANGINFO_H - #include -#endif -#include "types.h" -#include "util.h" -#include "i18n.h" - -/**************** - * I know that the OpenPGP protocol has a Y2106 problem ;-) - */ -u32 -make_timestamp() -{ - return time(NULL); -} - -/**************** - * Scan a date string and return a timestamp. - * The only supported format is "yyyy-mm-dd" - * Returns 0 for an invalid date. - */ -u32 -scan_isodatestr( const char *string ) -{ - int year, month, day; - struct tm tmbuf; - time_t stamp; - int i; - - if( strlen(string) != 10 || string[4] != '-' || string[7] != '-' ) - return 0; - for( i=0; i < 4; i++ ) - if( !isdigit(string[i]) ) - return 0; - if( !isdigit(string[5]) || !isdigit(string[6]) ) - return 0; - if( !isdigit(string[8]) || !isdigit(string[9]) ) - return 0; - year = atoi(string); - month = atoi(string+5); - day = atoi(string+8); - /* some basic checks */ - if( year < 1970 || month < 1 || month > 12 || day < 1 || day > 31 ) - return 0; - memset( &tmbuf, 0, sizeof tmbuf ); - tmbuf.tm_mday = day; - tmbuf.tm_mon = month-1; - tmbuf.tm_year = year - 1900; - tmbuf.tm_isdst = -1; - stamp = mktime( &tmbuf ); - if( stamp == (time_t)-1 ) - return 0; - return stamp; -} - - -u32 -add_days_to_timestamp( u32 stamp, u16 days ) -{ - return stamp + days*86400L; -} - - -/**************** - * Return a string with a time value in the form: x Y, n D, n H - */ - -const char * -strtimevalue( u32 value ) -{ - static char buffer[30]; - unsigned int years, days, hours, minutes; - - value /= 60; - minutes = value % 60; - value /= 60; - hours = value % 24; - value /= 24; - days = value % 365; - value /= 365; - years = value; - - sprintf(buffer,"%uy%ud%uh%um", years, days, hours, minutes ); - if( years ) - return buffer; - if( days ) - return strchr( buffer, 'y' ) + 1; - return strchr( buffer, 'd' ) + 1; -} - - -/**************** - * Note: this function returns GMT - */ -const char * -strtimestamp( u32 stamp ) -{ - static char buffer[11+5]; - struct tm *tp; - time_t atime = stamp; - - 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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "util.h" -#include "memory.h" - -#define __UNIXLIB_INTERNALS -#include -#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 -#include -#include -#include -#include -#include -#include -#if defined(HAVE_MLOCK) || defined(HAVE_MMAP) - #include - #include - #include - #ifdef USE_CAPABILITIES - #include - #endif - #ifdef HAVE_PLOCK - #include - #endif -#endif - -#include "types.h" -#include "memory.h" -#include "util.h" -#include "i18n.h" - -#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 -#ifdef USE_SIMPLE_GETTEXT -#if !defined (__MINGW32__) && !defined (__CYGWIN32__) -#error This file can only be used with MingW32 or Cygwin32 -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#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 -#include -#include -#include -#ifdef HAVE_LANGINFO_CODESET -#include -#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 -#include -#include -#include -#include -#include -#ifdef HAVE_TCGETATTR - #include -#else - #ifdef HAVE_TERMIO_H - /* simulate termios with termio */ - #include - #define termios termio - #define tcsetattr ioctl - #define TCSAFLUSH TCSETAF - #define tcgetattr(A,B) ioctl(A,TCGETA,B) - #define HAVE_TCGETATTR - #endif -#endif -#ifdef __MINGW32__ /* use the odd Win32 functions */ - #include - #ifdef HAVE_TCGETATTR - #error mingw32 and termios - #endif -#endif -#include -#include -#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 -#if defined (__MINGW32__) || defined (__CYGWIN32__) - /* This module is only used in this environment */ - -#include -#include -#include -#include -#include -#include "util.h" -#include "memory.h" - -static HKEY -get_root_key(const char *root) -{ - HKEY root_key; - - if( !root ) - root_key = HKEY_CURRENT_USER; - else if( !strcmp( root, "HKEY_CLASSES_ROOT" ) ) - root_key = HKEY_CLASSES_ROOT; - else if( !strcmp( root, "HKEY_CURRENT_USER" ) ) - root_key = HKEY_CURRENT_USER; - else if( !strcmp( root, "HKEY_LOCAL_MACHINE" ) ) - root_key = HKEY_LOCAL_MACHINE; - else if( !strcmp( root, "HKEY_USERS" ) ) - root_key = HKEY_USERS; - else if( !strcmp( root, "HKEY_PERFORMANCE_DATA" ) ) - root_key = HKEY_PERFORMANCE_DATA; - else if( !strcmp( root, "HKEY_CURRENT_CONFIG" ) ) - root_key = HKEY_CURRENT_CONFIG; - else - return NULL; - - return root_key; -} - - -/**************** - * Return a string from the Win32 Registry or NULL in case of - * error. Caller must release the return value. A NULL for root - * is an alias for HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE in turn. - * NOTE: The value is allocated with a plain malloc() - use free() and not - * the usual 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, ®_key ) - != ERROR_SUCCESS ) - return -1; - - if ( RegSetValueEx( reg_key, name, 0, REG_SZ, (BYTE *)value, - strlen( value ) ) != ERROR_SUCCESS ) { - if ( RegCreateKey( root_key, name, ®_key ) != ERROR_SUCCESS ) { - RegCloseKey(reg_key); - return -1; - } - if ( RegSetValueEx( reg_key, name, 0, REG_SZ, (BYTE *)value, - strlen( value ) ) != ERROR_SUCCESS ) { - RegCloseKey(reg_key); - return -1; - } - } - - RegCloseKey( reg_key ); - - return 0; -} - -#endif /* __MINGW32__ || __CYGWIN32__ */ 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 - - Merged changes from zlib 1.1.4. - -Sat Feb 13 12:04:43 CET 1999 Werner Koch - - * Makefile.am: Removed -Wall - -Wed Jan 20 21:40:21 CET 1999 Werner Koch - - * Makefile.am: Corrected the list of sources - -Wed Jan 13 14:10:15 CET 1999 Werner Koch - - Merged version 1.1.3 with the previousy used 1.0.4 - -Thu Feb 12 12:20:45 1998 Werner Koch (wk@frodo) - - Removed a couple of files, as this is only used if zlib is - missing on a system. Added automake stuff - - - ChangeLog file for zlib - - -Changes in 1.1.4 (11 March 2002) -- ZFREE was repeated on same allocation on some error conditions. - This creates a security problem described in - http://www.zlib.org/advisory-2002-03-11.txt -- Returned incorrect error (Z_MEM_ERROR) on some invalid data -- Avoid accesses before window for invalid distances with inflate window - less than 32K. -- force windowBits > 8 to avoid a bug in the encoder for a window size - of 256 bytes. (A complete fix will be available in 1.1.5). - -Changes in 1.1.3 (9 July 1998) -- fix "an inflate input buffer bug that shows up on rare but persistent - occasions" (Mark) -- fix gzread and gztell for concatenated .gz files (Didier Le Botlan) -- fix gzseek(..., SEEK_SET) in write mode -- fix crc check after a gzeek (Frank Faubert) -- fix miniunzip when the last entry in a zip file is itself a zip file - (J Lillge) -- add contrib/asm586 and contrib/asm686 (Brian Raiter) - See http://www.muppetlabs.com/~breadbox/software/assembly.html -- add support for Delphi 3 in contrib/delphi (Bob Dellaca) -- add support for C++Builder 3 and Delphi 3 in contrib/delphi2 (Davide Moretti) -- do not exit prematurely in untgz if 0 at start of block (Magnus Holmgren) -- use macro EXTERN instead of extern to support DLL for BeOS (Sander Stoks) -- added a FAQ file - -- Support gzdopen on Mac with Metrowerks (Jason Linhart) -- Do not redefine Byte on Mac (Brad Pettit & Jason Linhart) -- define SEEK_END too if SEEK_SET is not defined (Albert Chin-A-Young) -- avoid some warnings with Borland C (Tom Tanner) -- fix a problem in contrib/minizip/zip.c for 16-bit MSDOS (Gilles Vollant) -- emulate utime() for WIN32 in contrib/untgz (Gilles Vollant) -- allow several arguments to configure (Tim Mooney, Frodo Looijaard) -- use libdir and includedir in Makefile.in (Tim Mooney) -- support shared libraries on OSF1 V4 (Tim Mooney) -- remove so_locations in "make clean" (Tim Mooney) -- fix maketree.c compilation error (Glenn, Mark) -- Python interface to zlib now in Python 1.5 (Jeremy Hylton) -- new Makefile.riscos (Rich Walker) -- initialize static descriptors in trees.c for embedded targets (Nick Smith) -- use "foo-gz" in example.c for RISCOS and VMS (Nick Smith) -- add the OS/2 files in Makefile.in too (Andrew Zabolotny) -- fix fdopen and halloc macros for Microsoft C 6.0 (Tom Lane) -- fix maketree.c to allow clean compilation of inffixed.h (Mark) -- fix parameter check in deflateCopy (Gunther Nikl) -- cleanup trees.c, use compressed_len only in debug mode (Christian Spieler) -- Many portability patches by Christian Spieler: - . zutil.c, zutil.h: added "const" for zmem* - . Make_vms.com: fixed some typos - . Make_vms.com: msdos/Makefile.*: removed zutil.h from some dependency lists - . msdos/Makefile.msc: remove "default rtl link library" info from obj files - . msdos/Makefile.*: use model-dependent name for the built zlib library - . msdos/Makefile.emx, nt/Makefile.emx, nt/Makefile.gcc: - new makefiles, for emx (DOS/OS2), emx&rsxnt and mingw32 (Windows 9x / NT) -- use define instead of typedef for Bytef also for MSC small/medium (Tom Lane) -- replace __far with _far for better portability (Christian Spieler, Tom Lane) -- fix test for errno.h in configure (Tim Newsham) - -Changes in 1.1.2 (19 March 98) -- added contrib/minzip, mini zip and unzip based on zlib (Gilles Vollant) - See http://www.winimage.com/zLibDll/unzip.html -- preinitialize the inflate tables for fixed codes, to make the code - completely thread safe (Mark) -- some simplifications and slight speed-up to the inflate code (Mark) -- fix gzeof on non-compressed files (Allan Schrum) -- add -std1 option in configure for OSF1 to fix gzprintf (Martin Mokrejs) -- use default value of 4K for Z_BUFSIZE for 16-bit MSDOS (Tim Wegner + Glenn) -- added os2/Makefile.def and os2/zlib.def (Andrew Zabolotny) -- add shared lib support for UNIX_SV4.2MP (MATSUURA Takanori) -- do not wrap extern "C" around system includes (Tom Lane) -- mention zlib binding for TCL in README (Andreas Kupries) -- added amiga/Makefile.pup for Amiga powerUP SAS/C PPC (Andreas Kleinert) -- allow "make install prefix=..." even after configure (Glenn Randers-Pehrson) -- allow "configure --prefix $HOME" (Tim Mooney) -- remove warnings in example.c and gzio.c (Glenn Randers-Pehrson) -- move Makefile.sas to amiga/Makefile.sas - -Changes in 1.1.1 (27 Feb 98) -- fix macros _tr_tally_* in deflate.h for debug mode (Glenn Randers-Pehrson) -- remove block truncation heuristic which had very marginal effect for zlib - (smaller lit_bufsize than in gzip 1.2.4) and degraded a little the - compression ratio on some files. This also allows inlining _tr_tally for - matches in deflate_slow. -- added msdos/Makefile.w32 for WIN32 Microsoft Visual C++ (Bob Frazier) - -Changes in 1.1.0 (24 Feb 98) -- do not return STREAM_END prematurely in inflate (John Bowler) -- revert to the zlib 1.0.8 inflate to avoid the gcc 2.8.0 bug (Jeremy Buhler) -- compile with -DFASTEST to get compression code optimized for speed only -- in minigzip, try mmap'ing the input file first (Miguel Albrecht) -- increase size of I/O buffers in minigzip.c and gzio.c (not a big gain - on Sun but significant on HP) - -- add a pointer to experimental unzip library in README (Gilles Vollant) -- initialize variable gcc in configure (Chris Herborth) - -Changes in 1.0.9 (17 Feb 1998) -- added gzputs and gzgets functions -- do not clear eof flag in gzseek (Mark Diekhans) -- fix gzseek for files in transparent mode (Mark Diekhans) -- do not assume that vsprintf returns the number of bytes written (Jens Krinke) -- replace EXPORT with ZEXPORT to avoid conflict with other programs -- added compress2 in zconf.h, zlib.def, zlib.dnt -- new asm code from Gilles Vollant in contrib/asm386 -- simplify the inflate code (Mark): - . Replace ZALLOC's in huft_build() with single ZALLOC in inflate_blocks_new() - . ZALLOC the length list in inflate_trees_fixed() instead of using stack - . ZALLOC the value area for huft_build() instead of using stack - . Simplify Z_FINISH check in inflate() - -- Avoid gcc 2.8.0 comparison bug a little differently than zlib 1.0.8 -- in inftrees.c, avoid cc -O bug on HP (Farshid Elahi) -- in zconf.h move the ZLIB_DLL stuff earlier to avoid problems with - the declaration of FAR (Gilles VOllant) -- install libz.so* with mode 755 (executable) instead of 644 (Marc Lehmann) -- read_buf buf parameter of type Bytef* instead of charf* -- zmemcpy parameters are of type Bytef*, not charf* (Joseph Strout) -- do not redeclare unlink in minigzip.c for WIN32 (John Bowler) -- fix check for presence of directories in "make install" (Ian Willis) - -Changes in 1.0.8 (27 Jan 1998) -- fixed offsets in contrib/asm386/gvmat32.asm (Gilles Vollant) -- fix gzgetc and gzputc for big endian systems (Markus Oberhumer) -- added compress2() to allow setting the compression level -- include sys/types.h to get off_t on some systems (Marc Lehmann & QingLong) -- use constant arrays for the static trees in trees.c instead of computing - them at run time (thanks to Ken Raeburn for this suggestion). To create - trees.h, compile with GEN_TREES_H and run "make test". -- check return code of example in "make test" and display result -- pass minigzip command line options to file_compress -- simplifying code of inflateSync to avoid gcc 2.8 bug - -- support CC="gcc -Wall" in configure -s (QingLong) -- avoid a flush caused by ftell in gzopen for write mode (Ken Raeburn) -- fix test for shared library support to avoid compiler warnings -- zlib.lib -> zlib.dll in msdos/zlib.rc (Gilles Vollant) -- check for TARGET_OS_MAC in addition to MACOS (Brad Pettit) -- do not use fdopen for Metrowerks on Mac (Brad Pettit)) -- add checks for gzputc and gzputc in example.c -- avoid warnings in gzio.c and deflate.c (Andreas Kleinert) -- use const for the CRC table (Ken Raeburn) -- fixed "make uninstall" for shared libraries -- use Tracev instead of Trace in infblock.c -- in example.c use correct compressed length for test_sync -- suppress +vnocompatwarnings in configure for HPUX (not always supported) - -Changes in 1.0.7 (20 Jan 1998) -- fix gzseek which was broken in write mode -- return error for gzseek to negative absolute position -- fix configure for Linux (Chun-Chung Chen) -- increase stack space for MSC (Tim Wegner) -- get_crc_table and inflateSyncPoint are EXPORTed (Gilles Vollant) -- define EXPORTVA for gzprintf (Gilles Vollant) -- added man page zlib.3 (Rick Rodgers) -- for contrib/untgz, fix makedir() and improve Makefile - -- check gzseek in write mode in example.c -- allocate extra buffer for seeks only if gzseek is actually called -- avoid signed/unsigned comparisons (Tim Wegner, Gilles Vollant) -- add inflateSyncPoint in zconf.h -- fix list of exported functions in nt/zlib.dnt and mdsos/zlib.def - -Changes in 1.0.6 (19 Jan 1998) -- add functions gzprintf, gzputc, gzgetc, gztell, gzeof, gzseek, gzrewind and - gzsetparams (thanks to Roland Giersig and Kevin Ruland for some of this code) -- Fix a deflate bug occuring only with compression level 0 (thanks to - Andy Buckler for finding this one). -- In minigzip, pass transparently also the first byte for .Z files. -- return Z_BUF_ERROR instead of Z_OK if output buffer full in uncompress() -- check Z_FINISH in inflate (thanks to Marc Schluper) -- Implement deflateCopy (thanks to Adam Costello) -- make static libraries by default in configure, add --shared option. -- move MSDOS or Windows specific files to directory msdos -- suppress the notion of partial flush to simplify the interface - (but the symbol Z_PARTIAL_FLUSH is kept for compatibility with 1.0.4) -- suppress history buffer provided by application to simplify the interface - (this feature was not implemented anyway in 1.0.4) -- next_in and avail_in must be initialized before calling inflateInit or - inflateInit2 -- add EXPORT in all exported functions (for Windows DLL) -- added Makefile.nt (thanks to Stephen Williams) -- added the unsupported "contrib" directory: - contrib/asm386/ by Gilles Vollant - 386 asm code replacing longest_match(). - contrib/iostream/ by Kevin Ruland - A C++ I/O streams interface to the zlib gz* functions - contrib/iostream2/ by Tyge Løvset - Another C++ I/O streams interface - contrib/untgz/ by "Pedro A. Aranda Guti\irrez" - A very simple tar.gz file extractor using zlib - contrib/visual-basic.txt by Carlos Rios - How to use compress(), uncompress() and the gz* functions from VB. -- pass params -f (filtered data), -h (huffman only), -1 to -9 (compression - level) in minigzip (thanks to Tom Lane) - -- use const for rommable constants in deflate -- added test for gzseek and gztell in example.c -- add undocumented function inflateSyncPoint() (hack for Paul Mackerras) -- add undocumented function zError to convert error code to string - (for Tim Smithers) -- Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code. -- Use default memcpy for Symantec MSDOS compiler. -- Add EXPORT keyword for check_func (needed for Windows DLL) -- add current directory to LD_LIBRARY_PATH for "make test" -- create also a link for libz.so.1 -- added support for FUJITSU UXP/DS (thanks to Toshiaki Nomura) -- use $(SHAREDLIB) instead of libz.so in Makefile.in (for HPUX) -- added -soname for Linux in configure (Chun-Chung Chen, -- assign numbers to the exported functions in zlib.def (for Windows DLL) -- add advice in zlib.h for best usage of deflateSetDictionary -- work around compiler bug on Atari (cast Z_NULL in call of s->checkfn) -- allow compilation with ANSI keywords only enabled for TurboC in large model -- avoid "versionString"[0] (Borland bug) -- add NEED_DUMMY_RETURN for Borland -- use variable z_verbose for tracing in debug mode (L. Peter Deutsch). -- allow compilation with CC -- defined STDC for OS/2 (David Charlap) -- limit external names to 8 chars for MVS (Thomas Lund) -- in minigzip.c, use static buffers only for 16-bit systems -- fix suffix check for "minigzip -d foo.gz" -- do not return an error for the 2nd of two consecutive gzflush() (Felix Lee) -- use _fdopen instead of fdopen for MSC >= 6.0 (Thomas Fanslau) -- added makelcc.bat for lcc-win32 (Tom St Denis) -- in Makefile.dj2, use copy and del instead of install and rm (Frank Donahoe) -- Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion. -- check for unistd.h in configure (for off_t) -- remove useless check parameter in inflate_blocks_free -- avoid useless assignment of s->check to itself in inflate_blocks_new -- do not flush twice in gzclose (thanks to Ken Raeburn) -- rename FOPEN as F_OPEN to avoid clash with /usr/include/sys/file.h -- use NO_ERRNO_H instead of enumeration of operating systems with errno.h -- work around buggy fclose on pipes for HP/UX -- support zlib DLL with BORLAND C++ 5.0 (thanks to Glenn Randers-Pehrson) -- fix configure if CC is already equal to gcc - -Changes in 1.0.5 (3 Jan 98) -- Fix inflate to terminate gracefully when fed corrupted or invalid data -- Use const for rommable constants in inflate -- Eliminate memory leaks on error conditions in inflate -- Removed some vestigial code in inflate -- Update web address in README - -Changes in 1.0.4 (24 Jul 96) -- In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF - bit, so the decompressor could decompress all the correct data but went - on to attempt decompressing extra garbage data. This affected minigzip too. -- zlibVersion and gzerror return const char* (needed for DLL) -- port to RISCOS (no fdopen, no multiple dots, no unlink, no fileno) -- use z_error only for DEBUG (avoid problem with DLLs) - -Changes in 1.0.3 (2 Jul 96) -- use z_streamp instead of z_stream *, which is now a far pointer in MSDOS - small and medium models; this makes the library incompatible with previous - versions for these models. (No effect in large model or on other systems.) -- return OK instead of BUF_ERROR if previous deflate call returned with - avail_out as zero but there is nothing to do -- added memcmp for non STDC compilers -- define NO_DUMMY_DECL for more Mac compilers (.h files merged incorrectly) -- define __32BIT__ if __386__ or i386 is defined (pb. with Watcom and SCO) -- better check for 16-bit mode MSC (avoids problem with Symantec) - -Changes in 1.0.2 (23 May 96) -- added Windows DLL support -- added a function zlibVersion (for the DLL support) -- fixed declarations using Bytef in infutil.c (pb with MSDOS medium model) -- Bytef is define's instead of typedef'd only for Borland C -- avoid reading uninitialized memory in example.c -- mention in README that the zlib format is now RFC1950 -- updated Makefile.dj2 -- added algorithm.doc - -Changes in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion] -- fix array overlay in deflate.c which sometimes caused bad compressed data -- fix inflate bug with empty stored block -- fix MSDOS medium model which was broken in 0.99 -- fix deflateParams() which could generated bad compressed data. -- Bytef is define'd instead of typedef'ed (work around Borland bug) -- added an INDEX file -- new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32), - Watcom (Makefile.wat), Amiga SAS/C (Makefile.sas) -- speed up adler32 for modern machines without auto-increment -- added -ansi for IRIX in configure -- static_init_done in trees.c is an int -- define unlink as delete for VMS -- fix configure for QNX -- add configure branch for SCO and HPUX -- avoid many warnings (unused variables, dead assignments, etc...) -- no fdopen for BeOS -- fix the Watcom fix for 32 bit mode (define FAR as empty) -- removed redefinition of Byte for MKWERKS -- work around an MWKERKS bug (incorrect merge of all .h files) - -Changes in 0.99 (27 Jan 96) -- allow preset dictionary shared between compressor and decompressor -- allow compression level 0 (no compression) -- add deflateParams in zlib.h: allow dynamic change of compression level - and compression strategy. -- test large buffers and deflateParams in example.c -- add optional "configure" to build zlib as a shared library -- suppress Makefile.qnx, use configure instead -- fixed deflate for 64-bit systems (detected on Cray) -- fixed inflate_blocks for 64-bit systems (detected on Alpha) -- declare Z_DEFLATED in zlib.h (possible parameter for deflateInit2) -- always return Z_BUF_ERROR when deflate() has nothing to do -- deflateInit and inflateInit are now macros to allow version checking -- prefix all global functions and types with z_ with -DZ_PREFIX -- make falloc completely reentrant (inftrees.c) -- fixed very unlikely race condition in ct_static_init -- free in reverse order of allocation to help memory manager -- use zlib-1.0/* instead of zlib/* inside the tar.gz -- make zlib warning-free with "gcc -O3 -Wall -Wwrite-strings -Wpointer-arith - -Wconversion -Wstrict-prototypes -Wmissing-prototypes" -- allow gzread on concatenated .gz files -- deflateEnd now returns Z_DATA_ERROR if it was premature -- deflate is finally (?) fully deterministic (no matches beyond end of input) -- Document Z_SYNC_FLUSH -- add uninstall in Makefile -- Check for __cpluplus in zlib.h -- Better test in ct_align for partial flush -- avoid harmless warnings for Borland C++ -- initialize hash_head in deflate.c -- avoid warning on fdopen (gzio.c) for HP cc -Aa -- include stdlib.h for STDC compilers -- include errno.h for Cray -- ignore error if ranlib doesn't exist -- call ranlib twice for NeXTSTEP -- use exec_prefix instead of prefix for libz.a -- renamed ct_* as _tr_* to avoid conflict with applications -- clear z->msg in inflateInit2 before any error return -- initialize opaque in example.c, gzio.c, deflate.c and inflate.c -- fixed typo in zconf.h (_GNUC__ => __GNUC__) -- check for WIN32 in zconf.h and zutil.c (avoid farmalloc in 32-bit mode) -- fix typo in Make_vms.com (f$trnlnm -> f$getsyi) -- in fcalloc, normalize pointer if size > 65520 bytes -- don't use special fcalloc for 32 bit Borland C++ -- use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc... -- use Z_BINARY instead of BINARY -- document that gzclose after gzdopen will close the file -- allow "a" as mode in gzopen. -- fix error checking in gzread -- allow skipping .gz extra-field on pipes -- added reference to Perl interface in README -- put the crc table in FAR data (I dislike more and more the medium model :) -- added get_crc_table -- added a dimension to all arrays (Borland C can't count). -- workaround Borland C bug in declaration of inflate_codes_new & inflate_fast -- guard against multiple inclusion of *.h (for precompiled header on Mac) -- Watcom C pretends to be Microsoft C small model even in 32 bit mode. -- don't use unsized arrays to avoid silly warnings by Visual C++: - warning C4746: 'inflate_mask' : unsized array treated as '__far' - (what's wrong with far data in far model?). -- define enum out of inflate_blocks_state to allow compilation with C++ - -Changes in 0.95 (16 Aug 95) -- fix MSDOS small and medium model (now easier to adapt to any compiler) -- inlined send_bits -- fix the final (:-) bug for deflate with flush (output was correct but - not completely flushed in rare occasions). -- default window size is same for compression and decompression - (it's now sufficient to set MAX_WBITS in zconf.h). -- voidp -> voidpf and voidnp -> voidp (for consistency with other - typedefs and because voidnp was not near in large model). - -Changes in 0.94 (13 Aug 95) -- support MSDOS medium model -- fix deflate with flush (could sometimes generate bad output) -- fix deflateReset (zlib header was incorrectly suppressed) -- added support for VMS -- allow a compression level in gzopen() -- gzflush now calls fflush -- For deflate with flush, flush even if no more input is provided. -- rename libgz.a as libz.a -- avoid complex expression in infcodes.c triggering Turbo C bug -- work around a problem with gcc on Alpha (in INSERT_STRING) -- don't use inline functions (problem with some gcc versions) -- allow renaming of Byte, uInt, etc... with #define. -- avoid warning about (unused) pointer before start of array in deflate.c -- avoid various warnings in gzio.c, example.c, infblock.c, adler32.c, zutil.c -- avoid reserved word 'new' in trees.c - -Changes in 0.93 (25 June 95) -- temporarily disable inline functions -- make deflate deterministic -- give enough lookahead for PARTIAL_FLUSH -- Set binary mode for stdin/stdout in minigzip.c for OS/2 -- don't even use signed char in inflate (not portable enough) -- fix inflate memory leak for segmented architectures - -Changes in 0.92 (3 May 95) -- don't assume that char is signed (problem on SGI) -- Clear bit buffer when starting a stored block -- no memcpy on Pyramid -- suppressed inftest.c -- optimized fill_window, put longest_match inline for gcc -- optimized inflate on stored blocks. -- untabify all sources to simplify patches - -Changes in 0.91 (2 May 95) -- Default MEM_LEVEL is 8 (not 9 for Unix) as documented in zlib.h -- Document the memory requirements in zconf.h -- added "make install" -- fix sync search logic in inflateSync -- deflate(Z_FULL_FLUSH) now works even if output buffer too short -- after inflateSync, don't scare people with just "lo world" -- added support for DJGPP - -Changes in 0.9 (1 May 95) -- don't assume that zalloc clears the allocated memory (the TurboC bug - was Mark's bug after all :) -- let again gzread copy uncompressed data unchanged (was working in 0.71) -- deflate(Z_FULL_FLUSH), inflateReset and inflateSync are now fully implemented -- added a test of inflateSync in example.c -- moved MAX_WBITS to zconf.h because users might want to change that. -- document explicitly that zalloc(64K) on MSDOS must return a normalized - pointer (zero offset) -- added Makefiles for Microsoft C, Turbo C, Borland C++ -- faster crc32() - -Changes in 0.8 (29 April 95) -- added fast inflate (inffast.c) -- deflate(Z_FINISH) now returns Z_STREAM_END when done. Warning: this - is incompatible with previous versions of zlib which returned Z_OK. -- work around a TurboC compiler bug (bad code for b << 0, see infutil.h) - (actually that was not a compiler bug, see 0.81 above) -- gzread no longer reads one extra byte in certain cases -- In gzio destroy(), don't reference a freed structure -- avoid many warnings for MSDOS -- avoid the ERROR symbol which is used by MS Windows - -Changes in 0.71 (14 April 95) -- Fixed more MSDOS compilation problems :( There is still a bug with - TurboC large model. - -Changes in 0.7 (14 April 95) -- Added full inflate support. -- Simplified the crc32() interface. The pre- and post-conditioning - (one's complement) is now done inside crc32(). WARNING: this is - incompatible with previous versions; see zlib.h for the new usage. - -Changes in 0.61 (12 April 95) -- workaround for a bug in TurboC. example and minigzip now work on MSDOS. - -Changes in 0.6 (11 April 95) -- added minigzip.c -- added gzdopen to reopen a file descriptor as gzFile -- added transparent reading of non-gziped files in gzread. -- fixed bug in gzread (don't read crc as data) -- fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose). -- don't allocate big arrays in the stack (for MSDOS) -- fix some MSDOS compilation problems - -Changes in 0.5: -- do real compression in deflate.c. Z_PARTIAL_FLUSH is supported but - not yet Z_FULL_FLUSH. -- support decompression but only in a single step (forced Z_FINISH) -- added opaque object for zalloc and zfree. -- added deflateReset and inflateReset -- added a variable zlib_version for consistency checking. -- renamed the 'filter' parameter of deflateInit2 as 'strategy'. - Added Z_FILTERED and Z_HUFFMAN_ONLY constants. - -Changes in 0.4: -- avoid "zip" everywhere, use zlib instead of ziplib. -- suppress Z_BLOCK_FLUSH, interpret Z_PARTIAL_FLUSH as block flush - if compression method == 8. -- added adler32 and crc32 -- renamed deflateOptions as deflateInit2, call one or the other but not both -- added the method parameter for deflateInit2. -- added inflateInit2 -- simplied considerably deflateInit and inflateInit by not supporting - user-provided history buffer. This is supported only in deflateInit2 - and inflateInit2. - -Changes in 0.3: -- prefix all macro names with Z_ -- use Z_FINISH instead of deflateEnd to finish compression. -- added Z_HUFFMAN_ONLY -- added gzerror() - - 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 , or to -Gilles Vollant for the Windows DLL version. -The zlib home page is http://www.cdrom.com/pub/infozip/zlib/ -The official zlib ftp site is ftp://ftp.cdrom.com/pub/infozip/zlib/ -Before reporting a problem, please check those sites to verify that -you have the latest version of zlib; otherwise get the latest version and -check whether the problem still exists or not. - -Mark Nelson wrote an article about zlib for the Jan. 1997 -issue of Dr. Dobb's Journal; a copy of the article is available in -http://web2.airmail.net/markn/articles/zlibtool/zlibtool.htm - -The changes made in version 1.1.3 are documented in the file ChangeLog. -The main changes since 1.1.2 are: - -- fix "an inflate input buffer bug that shows up on rare but persistent - occasions" (Mark) -- fix gzread and gztell for concatenated .gz files (Didier Le Botlan) -- fix gzseek(..., SEEK_SET) in write mode -- fix crc check after a gzeek (Frank Faubert) -- fix miniunzip when the last entry in a zip file is itself a zip file - (J Lillge) -- add contrib/asm586 and contrib/asm686 (Brian Raiter) - See http://www.muppetlabs.com/~breadbox/software/assembly.html -- add support for Delphi 3 in contrib/delphi (Bob Dellaca) -- add support for C++Builder 3 and Delphi 3 in contrib/delphi2 (Davide Moretti) -- do not exit prematurely in untgz if 0 at start of block (Magnus Holmgren) -- use macro EXTERN instead of extern to support DLL for BeOS (Sander Stoks) -- added a FAQ file - -plus many changes for portability. - -Unsupported third party contributions are provided in directory "contrib". - -A Java implementation of zlib is available in the Java Development Kit 1.1 -http://www.javasoft.com/products/JDK/1.1/docs/api/Package-java.util.zip.html -See the zlib home page http://www.cdrom.com/pub/infozip/zlib/ for details. - -A Perl interface to zlib written by Paul Marquess -is in the CPAN (Comprehensive Perl Archive Network) sites, such as: -ftp://ftp.cis.ufl.edu/pub/perl/CPAN/modules/by-module/Compress/Compress-Zlib* - -A Python interface to zlib written by A.M. Kuchling -is available in Python 1.5 and later versions, see -http://www.python.org/doc/lib/module-zlib.html - -A zlib binding for TCL written by Andreas Kupries -is availlable at http://www.westend.com/~kupries/doc/trf/man/man.html - -An experimental package to read and write files in .zip format, -written on top of zlib by Gilles Vollant , is -available at http://www.winimage.com/zLibDll/unzip.html -and also in the contrib/minizip directory of zlib. - - -Notes for some targets: - -- To build a Windows DLL version, include in a DLL project zlib.def, zlib.rc - and all .c files except example.c and minigzip.c; compile with -DZLIB_DLL - The zlib DLL support was initially done by Alessandro Iacopetti and is - now maintained by Gilles Vollant . Check the zlib DLL - home page at http://www.winimage.com/zLibDll - - From Visual Basic, you can call the DLL functions which do not take - a structure as argument: compress, uncompress and all gz* functions. - See contrib/visual-basic.txt for more information, or get - http://www.tcfb.com/dowseware/cmp-z-it.zip - -- For 64-bit Irix, deflate.c must be compiled without any optimization. - With -O, one libpng test fails. The test works in 32 bit mode (with - the -n32 compiler flag). The compiler bug has been reported to SGI. - -- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 - it works when compiled with cc. - -- on Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 - is necessary to get gzprintf working correctly. This is done by configure. - -- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works - with other compilers. Use "make test" to check your compiler. - -- gzdopen is not supported on RISCOS, BEOS and by some Mac compilers. - -- For Turbo C the small model is supported only with reduced performance to - avoid any far allocation; it was tested with -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3 - -- For PalmOs, see http://www.cs.uit.no/~perm/PASTA/pilot/software.html - Per Harald Myrvang - - -Acknowledgments: - - The deflate format used by zlib was defined by Phil Katz. The deflate - and zlib specifications were written by L. Peter Deutsch. Thanks to all the - people who reported problems and suggested various improvements in zlib; - they are too numerous to cite here. - -Copyright notice: - - (C) 1995-1998 Jean-loup Gailly and Mark Adler - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Jean-loup Gailly Mark Adler - jloup@gzip.org madler@alumni.caltech.edu - -If you use the zlib library in a product, we would appreciate *not* -receiving lengthy legal documents to sign. The sources are provided -for free but without warranty of any kind. The library has been -entirely written by Jean-loup Gailly and Mark Adler; it does not -include third-party code. - -If you redistribute modified sources, we would appreciate that you include -in the file ChangeLog history information documenting your changes. 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)<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 -#include "zlib.h" - -#ifdef STDC -# include -# include -#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)<avail_in-n;c=(k>>3)>3:c;n+=c;p-=c;k-=c<<3;} - -/* Called with number of bytes left to write in window at least 258 - (the maximum string length) and number of input bytes available - at least ten. The ten bytes are six bytes for the longest length/ - distance pair plus four bytes for overloading the bit buffer. */ - -int inflate_fast(bl, bd, tl, td, s, z) -uInt bl, bd; -inflate_huft *tl; -inflate_huft *td; /* need separate declaration for Borland C++ */ -inflate_blocks_statef *s; -z_streamp z; -{ - inflate_huft *t; /* temporary pointer */ - uInt e; /* extra bits or operation */ - uLong b; /* bit buffer */ - uInt k; /* bits in bit buffer */ - Bytef *p; /* input data pointer */ - uInt n; /* bytes available there */ - Bytef *q; /* output window write pointer */ - uInt m; /* bytes to end of window or read pointer */ - uInt ml; /* mask for literal/length tree */ - uInt md; /* mask for distance tree */ - uInt c; /* bytes to copy */ - uInt d; /* distance back to copy from */ - Bytef *r; /* copy source pointer */ - - /* load input, output, bit values */ - LOAD - - /* initialize masks */ - ml = inflate_mask[bl]; - md = inflate_mask[bd]; - - /* do until not enough input or output space for fast loop */ - do { /* assume called with m >= 258 && n >= 10 */ - /* get literal/length code */ - GRABBITS(20) /* max bits for literal/length code */ - if ((e = (t = tl + ((uInt)b & ml))->exop) == 0) - { - DUMPBITS(t->bits) - Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ? - "inflate: * literal '%c'\n" : - "inflate: * literal 0x%02x\n", t->base)); - *q++ = (Byte)t->base; - m--; - continue; - } - do { - DUMPBITS(t->bits) - if (e & 16) - { - /* get extra bits for length */ - e &= 15; - c = t->base + ((uInt)b & inflate_mask[e]); - DUMPBITS(e) - Tracevv((stderr, "inflate: * length %u\n", c)); - - /* decode distance base of block to copy */ - GRABBITS(15); /* max bits for distance code */ - e = (t = td + ((uInt)b & md))->exop; - do { - DUMPBITS(t->bits) - if (e & 16) - { - /* get extra bits to add to distance base */ - e &= 15; - GRABBITS(e) /* get extra bits (up to 13) */ - d = t->base + ((uInt)b & inflate_mask[e]); - DUMPBITS(e) - Tracevv((stderr, "inflate: * distance %u\n", d)); - - /* do the copy */ - m -= c; - r = q - d; - if (r < s->window) /* wrap if needed */ - { - do { - r += s->end - s->window; /* force pointer in window */ - } while (r < s->window); /* covers invalid distances */ - e = s->end - r; - if (c > e) - { - c -= e; /* wrapped copy */ - do { - *q++ = *r++; - } while (--e); - r = s->window; - do { - *q++ = *r++; - } while (--c); - } - else /* normal copy */ - { - *q++ = *r++; c--; - *q++ = *r++; c--; - do { - *q++ = *r++; - } while (--c); - } - } - else /* normal copy */ - { - *q++ = *r++; c--; - *q++ = *r++; c--; - do { - *q++ = *r++; - } while (--c); - } - break; - } - else if ((e & 64) == 0) - { - t += t->base; - e = (t += ((uInt)b & inflate_mask[e]))->exop; - } - else - { - z->msg = (char*)"invalid distance code"; - UNGRAB - UPDATE - return Z_DATA_ERROR; - } - } while (1); - break; - } - if ((e & 64) == 0) - { - t += t->base; - if ((e = (t += ((uInt)b & inflate_mask[e]))->exop) == 0) - { - DUMPBITS(t->bits) - Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ? - "inflate: * literal '%c'\n" : - "inflate: * literal 0x%02x\n", t->base)); - *q++ = (Byte)t->base; - m--; - break; - } - } - else if (e & 32) - { - Tracevv((stderr, "inflate: * end of block\n")); - UNGRAB - UPDATE - return Z_STREAM_END; - } - else - { - z->msg = (char*)"invalid literal/length code"; - UNGRAB - UPDATE - return Z_DATA_ERROR; - } - } while (1); - } while (m >= 258 && n >= 10); - - /* not enough input or output--restore pointers and return */ - UNGRAB - UPDATE - return Z_OK; -} 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<state->wbits)) - { - length = (1<state->wbits)-1; - dictionary += dictLength - length; - } - inflate_set_dictionary(z->state->blocks, dictionary, length); - z->state->mode = BLOCKS; - return Z_OK; -} - - -int ZEXPORT inflateSync(z) -z_streamp z; -{ - uInt n; /* number of bytes to look at */ - Bytef *p; /* pointer to bytes */ - uInt m; /* number of marker bytes found in a row */ - uLong r, w; /* temporaries to save total_in and total_out */ - - /* set up */ - if (z == Z_NULL || z->state == Z_NULL) - return Z_STREAM_ERROR; - if (z->state->mode != BAD) - { - z->state->mode = BAD; - z->state->sub.marker = 0; - } - if ((n = z->avail_in) == 0) - return Z_BUF_ERROR; - p = z->next_in; - m = z->state->sub.marker; - - /* search */ - while (n && m < 4) - { - static const Byte mark[4] = {0, 0, 0xff, 0xff}; - if (*p == mark[m]) - m++; - else if (*p) - m = 0; - else - m = 4 - m; - p++, n--; - } - - /* restore */ - z->total_in += p - z->next_in; - z->next_in = p; - z->avail_in = n; - z->state->sub.marker = m; - - /* return no joy or set up to restart on a new block */ - if (m != 4) - return Z_DATA_ERROR; - r = z->total_in; w = z->total_out; - inflateReset(z); - z->total_in = r; z->total_out = w; - z->state->mode = BLOCKS; - return Z_OK; -} - - -/* Returns true if inflate is currently at the end of a block generated - * by Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP - * implementation to provide an additional safety check. PPP uses Z_SYNC_FLUSH - * but removes the length bytes of the resulting empty stored block. When - * decompressing, PPP checks that at the end of input packet, inflate is - * waiting for these length bytes. - */ -int ZEXPORT inflateSyncPoint(z) -z_streamp z; -{ - if (z == Z_NULL || z->state == Z_NULL || z->state->blocks == Z_NULL) - return Z_STREAM_ERROR; - return inflate_blocks_sync_point(z->state->blocks); -} 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)<>=(j);k-=(j);} -/* output bytes */ -#define WAVAIL (uInt)(qread?s->read-q-1:s->end-q) -#define LOADOUT {q=s->write;m=(uInt)WAVAIL;} -#define WRAP {if(q==s->end&&s->read!=s->window){q=s->window;m=(uInt)WAVAIL;}} -#define FLUSH {UPDOUT r=inflate_flush(s,z,r); LOADOUT} -#define NEEDOUT {if(m==0){WRAP if(m==0){FLUSH WRAP if(m==0) LEAVE}}r=Z_OK;} -#define OUTBYTE(a) {*q++=(Byte)(a);m--;} -/* load local pointers */ -#define LOAD {LOADIN LOADOUT} - -/* masks for lower bits (size given to avoid silly warnings with Visual C++) */ -extern uInt inflate_mask[17]; - -/* copy as much as possible from the sliding window to the output area */ -extern int inflate_flush OF(( - inflate_blocks_statef *, - z_streamp , - int)); - -struct internal_state {int dummy;}; /* for buggy compilers */ - -#endif 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 -#endif - -/* =========================================================================== - * Constants - */ - -#define MAX_BL_BITS 7 -/* Bit length codes must not exceed MAX_BL_BITS bits */ - -#define END_BLOCK 256 -/* end of block literal code */ - -#define REP_3_6 16 -/* repeat previous bit length 3-6 times (2 bits of repeat count) */ - -#define REPZ_3_10 17 -/* repeat a zero length 3-10 times (3 bits of repeat count) */ - -#define REPZ_11_138 18 -/* repeat a zero length 11-138 times (7 bits of repeat count) */ - -local const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */ - = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0}; - -local const int extra_dbits[D_CODES] /* extra bits for each distance code */ - = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; - -local const int extra_blbits[BL_CODES]/* extra bits for each bit length code */ - = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7}; - -local const uch bl_order[BL_CODES] - = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15}; -/* The lengths of the bit length codes are sent in order of decreasing - * probability, to avoid transmitting the lengths for unused bit length codes. - */ - -#define Buf_size (8 * 2*sizeof(char)) -/* Number of bits used within bi_buf. (bi_buf might be implemented on - * more than 16 bits on some systems.) - */ - -/* =========================================================================== - * Local data. These are initialized only once. - */ - -#define DIST_CODE_LEN 512 /* see definition of array dist_code below */ - -#if defined(GEN_TREES_H) || !defined(STDC) -/* non ANSI compilers may not accept trees.h */ - -local ct_data static_ltree[L_CODES+2]; -/* The static literal tree. Since the bit lengths are imposed, there is no - * need for the L_CODES extra codes used during heap construction. However - * The codes 286 and 287 are needed to build a canonical tree (see _tr_init - * below). - */ - -local ct_data static_dtree[D_CODES]; -/* The static distance tree. (Actually a trivial tree since all codes use - * 5 bits.) - */ - -uch _dist_code[DIST_CODE_LEN]; -/* Distance codes. The first 256 values correspond to the distances - * 3 .. 258, the last 256 values correspond to the top 8 bits of - * the 15 bit distances. - */ - -uch _length_code[MAX_MATCH-MIN_MATCH+1]; -/* length code for each normalized match length (0 == MIN_MATCH) */ - -local int base_length[LENGTH_CODES]; -/* First normalized length for each code (0 = MIN_MATCH) */ - -local int base_dist[D_CODES]; -/* First normalized distance for each code (0 = distance of 1) */ - -#else -# include "trees.h" -#endif /* GEN_TREES_H */ - -struct static_tree_desc_s { - const ct_data *static_tree; /* static tree or NULL */ - const intf *extra_bits; /* extra bits for each code or NULL */ - int extra_base; /* base index for extra_bits */ - int elems; /* max number of elements in the tree */ - int max_length; /* max bit length for the codes */ -}; - -local static_tree_desc static_l_desc = -{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS}; - -local static_tree_desc static_d_desc = -{static_dtree, extra_dbits, 0, D_CODES, MAX_BITS}; - -local static_tree_desc static_bl_desc = -{(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS}; - -/* =========================================================================== - * Local (static) routines in this file. - */ - -local void tr_static_init OF((void)); -local void init_block OF((deflate_state *s)); -local void pqdownheap OF((deflate_state *s, ct_data *tree, int k)); -local void gen_bitlen OF((deflate_state *s, tree_desc *desc)); -local void gen_codes OF((ct_data *tree, int max_code, ushf *bl_count)); -local void build_tree OF((deflate_state *s, tree_desc *desc)); -local void scan_tree OF((deflate_state *s, ct_data *tree, int max_code)); -local void send_tree OF((deflate_state *s, ct_data *tree, int max_code)); -local int build_bl_tree OF((deflate_state *s)); -local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes, - int blcodes)); -local void compress_block OF((deflate_state *s, ct_data *ltree, - ct_data *dtree)); -local void set_data_type OF((deflate_state *s)); -local unsigned bi_reverse OF((unsigned value, int length)); -local void bi_windup OF((deflate_state *s)); -local void bi_flush OF((deflate_state *s)); -local void copy_block OF((deflate_state *s, charf *buf, unsigned len, - int header)); - -#ifdef GEN_TREES_H -local void gen_trees_header OF((void)); -#endif - -#ifndef DEBUG -# define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len) - /* Send a code of the given tree. c and tree must not have side effects */ - -#else /* DEBUG */ -# define send_code(s, c, tree) \ - { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \ - send_bits(s, tree[c].Code, tree[c].Len); } -#endif - -/* =========================================================================== - * Output a short LSB first on the stream. - * IN assertion: there is enough room in pendingBuf. - */ -#define put_short(s, w) { \ - put_byte(s, (uch)((w) & 0xff)); \ - put_byte(s, (uch)((ush)(w) >> 8)); \ -} - -/* =========================================================================== - * Send a value on a given number of bits. - * IN assertion: length <= 16 and value fits in length bits. - */ -#ifdef DEBUG -local void send_bits OF((deflate_state *s, int value, int length)); - -local void send_bits(s, value, length) - deflate_state *s; - int value; /* value to send */ - int length; /* number of bits */ -{ - Tracevv((stderr," l %2d v %4x ", length, value)); - Assert(length > 0 && length <= 15, "invalid length"); - s->bits_sent += (ulg)length; - - /* If not enough room in bi_buf, use (valid) bits from bi_buf and - * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid)) - * unused bits in value. - */ - if (s->bi_valid > (int)Buf_size - length) { - s->bi_buf |= (value << s->bi_valid); - put_short(s, s->bi_buf); - s->bi_buf = (ush)value >> (Buf_size - s->bi_valid); - s->bi_valid += length - Buf_size; - } else { - s->bi_buf |= value << s->bi_valid; - s->bi_valid += length; - } -} -#else /* !DEBUG */ - -#define send_bits(s, value, length) \ -{ int len = length;\ - if (s->bi_valid > (int)Buf_size - len) {\ - int val = value;\ - s->bi_buf |= (val << s->bi_valid);\ - put_short(s, s->bi_buf);\ - s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\ - s->bi_valid += len - Buf_size;\ - } else {\ - s->bi_buf |= (value) << s->bi_valid;\ - s->bi_valid += len;\ - }\ -} -#endif /* DEBUG */ - - -#define MAX(a,b) (a >= b ? a : b) -/* the arguments must not have side effects */ - -/* =========================================================================== - * Initialize the various 'constant' tables. - */ -local void tr_static_init() -{ -#if defined(GEN_TREES_H) || !defined(STDC) - static int static_init_done = 0; - int n; /* iterates over tree elements */ - int bits; /* bit counter */ - int length; /* length value */ - int code; /* code value */ - int dist; /* distance index */ - ush bl_count[MAX_BITS+1]; - /* number of codes at each bit length for an optimal tree */ - - if (static_init_done) return; - - /* For some embedded targets, global variables are not initialized: */ - static_l_desc.static_tree = static_ltree; - static_l_desc.extra_bits = extra_lbits; - static_d_desc.static_tree = static_dtree; - static_d_desc.extra_bits = extra_dbits; - static_bl_desc.extra_bits = extra_blbits; - - /* Initialize the mapping length (0..255) -> length code (0..28) */ - length = 0; - for (code = 0; code < LENGTH_CODES-1; code++) { - base_length[code] = length; - for (n = 0; n < (1< dist code (0..29) */ - dist = 0; - for (code = 0 ; code < 16; code++) { - base_dist[code] = dist; - for (n = 0; n < (1<>= 7; /* from now on, all distances are divided by 128 */ - for ( ; code < D_CODES; code++) { - base_dist[code] = dist << 7; - for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) { - _dist_code[256 + dist++] = (uch)code; - } - } - Assert (dist == 256, "tr_static_init: 256+dist != 512"); - - /* Construct the codes of the static literal tree */ - for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0; - n = 0; - while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++; - while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++; - while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++; - while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++; - /* Codes 286 and 287 do not exist, but we must include them in the - * tree construction to get a canonical Huffman tree (longest code - * all ones) - */ - gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count); - - /* The static distance tree is trivial: */ - for (n = 0; n < D_CODES; n++) { - static_dtree[n].Len = 5; - static_dtree[n].Code = bi_reverse((unsigned)n, 5); - } - static_init_done = 1; - -# ifdef GEN_TREES_H - gen_trees_header(); -# endif -#endif /* defined(GEN_TREES_H) || !defined(STDC) */ -} - -/* =========================================================================== - * Genererate the file trees.h describing the static trees. - */ -#ifdef GEN_TREES_H -# ifndef DEBUG -# include -# endif - -# define SEPARATOR(i, last, width) \ - ((i) == (last)? "\n};\n\n" : \ - ((i) % (width) == (width)-1 ? ",\n" : ", ")) - -void gen_trees_header() -{ - FILE *header = fopen("trees.h", "w"); - int i; - - Assert (header != NULL, "Can't open trees.h"); - fprintf(header, - "/* header created automatically with -DGEN_TREES_H */\n\n"); - - fprintf(header, "local const ct_data static_ltree[L_CODES+2] = {\n"); - for (i = 0; i < L_CODES+2; i++) { - fprintf(header, "{{%3u},{%3u}}%s", static_ltree[i].Code, - static_ltree[i].Len, SEPARATOR(i, L_CODES+1, 5)); - } - - fprintf(header, "local const ct_data static_dtree[D_CODES] = {\n"); - for (i = 0; i < D_CODES; i++) { - fprintf(header, "{{%2u},{%2u}}%s", static_dtree[i].Code, - static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5)); - } - - fprintf(header, "const uch _dist_code[DIST_CODE_LEN] = {\n"); - for (i = 0; i < DIST_CODE_LEN; i++) { - fprintf(header, "%2u%s", _dist_code[i], - SEPARATOR(i, DIST_CODE_LEN-1, 20)); - } - - fprintf(header, "const uch _length_code[MAX_MATCH-MIN_MATCH+1]= {\n"); - for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) { - fprintf(header, "%2u%s", _length_code[i], - SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20)); - } - - fprintf(header, "local const int base_length[LENGTH_CODES] = {\n"); - for (i = 0; i < LENGTH_CODES; i++) { - fprintf(header, "%1u%s", base_length[i], - SEPARATOR(i, LENGTH_CODES-1, 20)); - } - - fprintf(header, "local const int base_dist[D_CODES] = {\n"); - for (i = 0; i < D_CODES; i++) { - fprintf(header, "%5u%s", base_dist[i], - SEPARATOR(i, D_CODES-1, 10)); - } - - fclose(header); -} -#endif /* GEN_TREES_H */ - -/* =========================================================================== - * Initialize the tree data structures for a new zlib stream. - */ -void _tr_init(s) - deflate_state *s; -{ - tr_static_init(); - - s->l_desc.dyn_tree = s->dyn_ltree; - s->l_desc.stat_desc = &static_l_desc; - - s->d_desc.dyn_tree = s->dyn_dtree; - s->d_desc.stat_desc = &static_d_desc; - - s->bl_desc.dyn_tree = s->bl_tree; - s->bl_desc.stat_desc = &static_bl_desc; - - s->bi_buf = 0; - s->bi_valid = 0; - s->last_eob_len = 8; /* enough lookahead for inflate */ -#ifdef DEBUG - s->compressed_len = 0L; - s->bits_sent = 0L; -#endif - - /* Initialize the first block of the first file: */ - init_block(s); -} - -/* =========================================================================== - * Initialize a new block. - */ -local void init_block(s) - deflate_state *s; -{ - int n; /* iterates over tree elements */ - - /* Initialize the trees. */ - for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0; - for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0; - for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0; - - s->dyn_ltree[END_BLOCK].Freq = 1; - s->opt_len = s->static_len = 0L; - s->last_lit = s->matches = 0; -} - -#define SMALLEST 1 -/* Index within the heap array of least frequent node in the Huffman tree */ - - -/* =========================================================================== - * Remove the smallest element from the heap and recreate the heap with - * one less element. Updates heap and heap_len. - */ -#define pqremove(s, tree, top) \ -{\ - top = s->heap[SMALLEST]; \ - s->heap[SMALLEST] = s->heap[s->heap_len--]; \ - pqdownheap(s, tree, SMALLEST); \ -} - -/* =========================================================================== - * Compares to subtrees, using the tree depth as tie breaker when - * the subtrees have equal frequency. This minimizes the worst case length. - */ -#define smaller(tree, n, m, depth) \ - (tree[n].Freq < tree[m].Freq || \ - (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m])) - -/* =========================================================================== - * Restore the heap property by moving down the tree starting at node k, - * exchanging a node with the smallest of its two sons if necessary, stopping - * when the heap property is re-established (each father smaller than its - * two sons). - */ -local void pqdownheap(s, tree, k) - deflate_state *s; - ct_data *tree; /* the tree to restore */ - int k; /* node to move down */ -{ - int v = s->heap[k]; - int j = k << 1; /* left son of k */ - while (j <= s->heap_len) { - /* Set j to the smallest of the two sons: */ - if (j < s->heap_len && - smaller(tree, s->heap[j+1], s->heap[j], s->depth)) { - j++; - } - /* Exit if v is smaller than both sons */ - if (smaller(tree, v, s->heap[j], s->depth)) break; - - /* Exchange v with the smallest son */ - s->heap[k] = s->heap[j]; k = j; - - /* And continue down the tree, setting j to the left son of k */ - j <<= 1; - } - s->heap[k] = v; -} - -/* =========================================================================== - * Compute the optimal bit lengths for a tree and update the total bit length - * for the current block. - * IN assertion: the fields freq and dad are set, heap[heap_max] and - * above are the tree nodes sorted by increasing frequency. - * OUT assertions: the field len is set to the optimal bit length, the - * array bl_count contains the frequencies for each bit length. - * The length opt_len is updated; static_len is also updated if stree is - * not null. - */ -local void gen_bitlen(s, desc) - deflate_state *s; - tree_desc *desc; /* the tree descriptor */ -{ - ct_data *tree = desc->dyn_tree; - int max_code = desc->max_code; - const ct_data *stree = desc->stat_desc->static_tree; - const intf *extra = desc->stat_desc->extra_bits; - int base = desc->stat_desc->extra_base; - int max_length = desc->stat_desc->max_length; - int h; /* heap index */ - int n, m; /* iterate over the tree elements */ - int bits; /* bit length */ - int xbits; /* extra bits */ - ush f; /* frequency */ - int overflow = 0; /* number of elements with bit length too large */ - - for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0; - - /* In a first pass, compute the optimal bit lengths (which may - * overflow in the case of the bit length tree). - */ - tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */ - - for (h = s->heap_max+1; h < HEAP_SIZE; h++) { - n = s->heap[h]; - bits = tree[tree[n].Dad].Len + 1; - if (bits > max_length) bits = max_length, overflow++; - tree[n].Len = (ush)bits; - /* We overwrite tree[n].Dad which is no longer needed */ - - if (n > max_code) continue; /* not a leaf node */ - - s->bl_count[bits]++; - xbits = 0; - if (n >= base) xbits = extra[n-base]; - f = tree[n].Freq; - s->opt_len += (ulg)f * (bits + xbits); - if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits); - } - if (overflow == 0) return; - - Trace((stderr,"\nbit length overflow\n")); - /* This happens for example on obj2 and pic of the Calgary corpus */ - - /* Find the first bit length which could increase: */ - do { - bits = max_length-1; - while (s->bl_count[bits] == 0) bits--; - s->bl_count[bits]--; /* move one leaf down the tree */ - s->bl_count[bits+1] += 2; /* move one overflow item as its brother */ - s->bl_count[max_length]--; - /* The brother of the overflow item also moves one step up, - * but this does not affect bl_count[max_length] - */ - overflow -= 2; - } while (overflow > 0); - - /* Now recompute all bit lengths, scanning in increasing frequency. - * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all - * lengths instead of fixing only the wrong ones. This idea is taken - * from 'ar' written by Haruhiko Okumura.) - */ - for (bits = max_length; bits != 0; bits--) { - n = s->bl_count[bits]; - while (n != 0) { - m = s->heap[--h]; - if (m > max_code) continue; - if (tree[m].Len != (unsigned) bits) { - Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); - s->opt_len += ((long)bits - (long)tree[m].Len) - *(long)tree[m].Freq; - tree[m].Len = (ush)bits; - } - n--; - } - } -} - -/* =========================================================================== - * Generate the codes for a given tree and bit counts (which need not be - * optimal). - * IN assertion: the array bl_count contains the bit length statistics for - * the given tree and the field len is set for all tree elements. - * OUT assertion: the field code is set for all tree elements of non - * zero code length. - */ -local void gen_codes (tree, max_code, bl_count) - ct_data *tree; /* the tree to decorate */ - int max_code; /* largest code with non zero frequency */ - ushf *bl_count; /* number of codes at each bit length */ -{ - ush next_code[MAX_BITS+1]; /* next code value for each bit length */ - ush code = 0; /* running code value */ - int bits; /* bit index */ - int n; /* code index */ - - /* The distribution counts are first used to generate the code values - * without bit reversal. - */ - for (bits = 1; bits <= MAX_BITS; bits++) { - next_code[bits] = code = (code + bl_count[bits-1]) << 1; - } - /* Check that the bit counts in bl_count are consistent. The last code - * must be all ones. - */ - Assert (code + bl_count[MAX_BITS]-1 == (1<dyn_tree; - const ct_data *stree = desc->stat_desc->static_tree; - int elems = desc->stat_desc->elems; - int n, m; /* iterate over heap elements */ - int max_code = -1; /* largest code with non zero frequency */ - int node; /* new node being created */ - - /* Construct the initial heap, with least frequent element in - * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. - * heap[0] is not used. - */ - s->heap_len = 0, s->heap_max = HEAP_SIZE; - - for (n = 0; n < elems; n++) { - if (tree[n].Freq != 0) { - s->heap[++(s->heap_len)] = max_code = n; - s->depth[n] = 0; - } else { - tree[n].Len = 0; - } - } - - /* The pkzip format requires that at least one distance code exists, - * and that at least one bit should be sent even if there is only one - * possible code. So to avoid special checks later on we force at least - * two codes of non zero frequency. - */ - while (s->heap_len < 2) { - node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0); - tree[node].Freq = 1; - s->depth[node] = 0; - s->opt_len--; if (stree) s->static_len -= stree[node].Len; - /* node is 0 or 1 so it does not have extra bits */ - } - desc->max_code = max_code; - - /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, - * establish sub-heaps of increasing lengths: - */ - for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n); - - /* Construct the Huffman tree by repeatedly combining the least two - * frequent nodes. - */ - node = elems; /* next internal node of the tree */ - do { - pqremove(s, tree, n); /* n = node of least frequency */ - m = s->heap[SMALLEST]; /* m = node of next least frequency */ - - s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */ - s->heap[--(s->heap_max)] = m; - - /* Create a new node father of n and m */ - tree[node].Freq = tree[n].Freq + tree[m].Freq; - s->depth[node] = (uch) (MAX(s->depth[n], s->depth[m]) + 1); - tree[n].Dad = tree[m].Dad = (ush)node; -#ifdef DUMP_BL_TREE - if (tree == s->bl_tree) { - fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)", - node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq); - } -#endif - /* and insert the new node in the heap */ - s->heap[SMALLEST] = node++; - pqdownheap(s, tree, SMALLEST); - - } while (s->heap_len >= 2); - - s->heap[--(s->heap_max)] = s->heap[SMALLEST]; - - /* At this point, the fields freq and dad are set. We can now - * generate the bit lengths. - */ - gen_bitlen(s, (tree_desc *)desc); - - /* The field len is now set, we can generate the bit codes */ - gen_codes ((ct_data *)tree, max_code, s->bl_count); -} - -/* =========================================================================== - * Scan a literal or distance tree to determine the frequencies of the codes - * in the bit length tree. - */ -local void scan_tree (s, tree, max_code) - deflate_state *s; - ct_data *tree; /* the tree to be scanned */ - int max_code; /* and its largest code of non zero frequency */ -{ - int n; /* iterates over all tree elements */ - int prevlen = -1; /* last emitted length */ - int curlen; /* length of current code */ - int nextlen = tree[0].Len; /* length of next code */ - int count = 0; /* repeat count of the current code */ - int max_count = 7; /* max repeat count */ - int min_count = 4; /* min repeat count */ - - if (nextlen == 0) max_count = 138, min_count = 3; - tree[max_code+1].Len = (ush)0xffff; /* guard */ - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; nextlen = tree[n+1].Len; - if (++count < max_count && curlen == nextlen) { - continue; - } else if (count < min_count) { - s->bl_tree[curlen].Freq += count; - } else if (curlen != 0) { - if (curlen != prevlen) s->bl_tree[curlen].Freq++; - s->bl_tree[REP_3_6].Freq++; - } else if (count <= 10) { - s->bl_tree[REPZ_3_10].Freq++; - } else { - s->bl_tree[REPZ_11_138].Freq++; - } - count = 0; prevlen = curlen; - if (nextlen == 0) { - max_count = 138, min_count = 3; - } else if (curlen == nextlen) { - max_count = 6, min_count = 3; - } else { - max_count = 7, min_count = 4; - } - } -} - -/* =========================================================================== - * Send a literal or distance tree in compressed form, using the codes in - * bl_tree. - */ -local void send_tree (s, tree, max_code) - deflate_state *s; - ct_data *tree; /* the tree to be scanned */ - int max_code; /* and its largest code of non zero frequency */ -{ - int n; /* iterates over all tree elements */ - int prevlen = -1; /* last emitted length */ - int curlen; /* length of current code */ - int nextlen = tree[0].Len; /* length of next code */ - int count = 0; /* repeat count of the current code */ - int max_count = 7; /* max repeat count */ - int min_count = 4; /* min repeat count */ - - /* tree[max_code+1].Len = -1; */ /* guard already set */ - if (nextlen == 0) max_count = 138, min_count = 3; - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; nextlen = tree[n+1].Len; - if (++count < max_count && curlen == nextlen) { - continue; - } else if (count < min_count) { - do { send_code(s, curlen, s->bl_tree); } while (--count != 0); - - } else if (curlen != 0) { - if (curlen != prevlen) { - send_code(s, curlen, s->bl_tree); count--; - } - Assert(count >= 3 && count <= 6, " 3_6?"); - send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2); - - } else if (count <= 10) { - send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3); - - } else { - send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7); - } - count = 0; prevlen = curlen; - if (nextlen == 0) { - max_count = 138, min_count = 3; - } else if (curlen == nextlen) { - max_count = 6, min_count = 3; - } else { - max_count = 7, min_count = 4; - } - } -} - -/* =========================================================================== - * Construct the Huffman tree for the bit lengths and return the index in - * bl_order of the last bit length code to send. - */ -local int build_bl_tree(s) - deflate_state *s; -{ - int max_blindex; /* index of last bit length code of non zero freq */ - - /* Determine the bit length frequencies for literal and distance trees */ - scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code); - scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code); - - /* Build the bit length tree: */ - build_tree(s, (tree_desc *)(&(s->bl_desc))); - /* opt_len now includes the length of the tree representations, except - * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. - */ - - /* Determine the number of bit length codes to send. The pkzip format - * requires that at least 4 bit length codes be sent. (appnote.txt says - * 3 but the actual value used is 4.) - */ - for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) { - if (s->bl_tree[bl_order[max_blindex]].Len != 0) break; - } - /* Update opt_len to include the bit length tree and counts */ - s->opt_len += 3*(max_blindex+1) + 5+5+4; - Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", - s->opt_len, s->static_len)); - - return max_blindex; -} - -/* =========================================================================== - * Send the header for a block using dynamic Huffman trees: the counts, the - * lengths of the bit length codes, the literal tree and the distance tree. - * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. - */ -local void send_all_trees(s, lcodes, dcodes, blcodes) - deflate_state *s; - int lcodes, dcodes, blcodes; /* number of codes for each tree */ -{ - int rank; /* index in bl_order */ - - Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); - Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, - "too many codes"); - Tracev((stderr, "\nbl counts: ")); - send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */ - send_bits(s, dcodes-1, 5); - send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */ - for (rank = 0; rank < blcodes; rank++) { - Tracev((stderr, "\nbl code %2d ", bl_order[rank])); - send_bits(s, s->bl_tree[bl_order[rank]].Len, 3); - } - Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); - - send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */ - Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); - - send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */ - Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); -} - -/* =========================================================================== - * Send a stored block - */ -void _tr_stored_block(s, buf, stored_len, eof) - deflate_state *s; - charf *buf; /* input block */ - ulg stored_len; /* length of input block */ - int eof; /* true if this is the last block for a file */ -{ - send_bits(s, (STORED_BLOCK<<1)+eof, 3); /* send block type */ -#ifdef DEBUG - s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; - s->compressed_len += (stored_len + 4) << 3; -#endif - copy_block(s, buf, (unsigned)stored_len, 1); /* with header */ -} - -/* =========================================================================== - * Send one empty static block to give enough lookahead for inflate. - * This takes 10 bits, of which 7 may remain in the bit buffer. - * The current inflate code requires 9 bits of lookahead. If the - * last two codes for the previous block (real code plus EOB) were coded - * on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode - * the last real code. In this case we send two empty static blocks instead - * of one. (There are no problems if the previous block is stored or fixed.) - * To simplify the code, we assume the worst case of last real code encoded - * on one bit only. - */ -void _tr_align(s) - deflate_state *s; -{ - send_bits(s, STATIC_TREES<<1, 3); - send_code(s, END_BLOCK, static_ltree); -#ifdef DEBUG - s->compressed_len += 10L; /* 3 for block type, 7 for EOB */ -#endif - bi_flush(s); - /* Of the 10 bits for the empty block, we have already sent - * (10 - bi_valid) bits. The lookahead for the last real code (before - * the EOB of the previous block) was thus at least one plus the length - * of the EOB plus what we have just sent of the empty static block. - */ - if (1 + s->last_eob_len + 10 - s->bi_valid < 9) { - send_bits(s, STATIC_TREES<<1, 3); - send_code(s, END_BLOCK, static_ltree); -#ifdef DEBUG - s->compressed_len += 10L; -#endif - bi_flush(s); - } - s->last_eob_len = 7; -} - -/* =========================================================================== - * Determine the best encoding for the current block: dynamic trees, static - * trees or store, and output the encoded block to the zip file. - */ -void _tr_flush_block(s, buf, stored_len, eof) - deflate_state *s; - charf *buf; /* input block, or NULL if too old */ - ulg stored_len; /* length of input block */ - int eof; /* true if this is the last block for a file */ -{ - ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */ - int max_blindex = 0; /* index of last bit length code of non zero freq */ - - /* Build the Huffman trees unless a stored block is forced */ - if (s->level > 0) { - - /* Check if the file is ascii or binary */ - if (s->data_type == Z_UNKNOWN) set_data_type(s); - - /* Construct the literal and distance trees */ - build_tree(s, (tree_desc *)(&(s->l_desc))); - Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, - s->static_len)); - - build_tree(s, (tree_desc *)(&(s->d_desc))); - Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, - s->static_len)); - /* At this point, opt_len and static_len are the total bit lengths of - * the compressed block data, excluding the tree representations. - */ - - /* Build the bit length tree for the above two trees, and get the index - * in bl_order of the last bit length code to send. - */ - max_blindex = build_bl_tree(s); - - /* Determine the best encoding. Compute first the block length in bytes*/ - opt_lenb = (s->opt_len+3+7)>>3; - static_lenb = (s->static_len+3+7)>>3; - - Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", - opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, - s->last_lit)); - - if (static_lenb <= opt_lenb) opt_lenb = static_lenb; - - } else { - Assert(buf != (char*)0, "lost buf"); - opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ - } - -#ifdef FORCE_STORED - if (buf != (char*)0) { /* force stored block */ -#else - if (stored_len+4 <= opt_lenb && buf != (char*)0) { - /* 4: two words for the lengths */ -#endif - /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. - * Otherwise we can't have processed more than WSIZE input bytes since - * the last block flush, because compression would have been - * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to - * transform a block into a stored block. - */ - _tr_stored_block(s, buf, stored_len, eof); - -#ifdef FORCE_STATIC - } else if (static_lenb >= 0) { /* force static trees */ -#else - } else if (static_lenb == opt_lenb) { -#endif - send_bits(s, (STATIC_TREES<<1)+eof, 3); - compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree); -#ifdef DEBUG - s->compressed_len += 3 + s->static_len; -#endif - } else { - send_bits(s, (DYN_TREES<<1)+eof, 3); - send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1, - max_blindex+1); - compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree); -#ifdef DEBUG - s->compressed_len += 3 + s->opt_len; -#endif - } - Assert (s->compressed_len == s->bits_sent, "bad compressed size"); - /* The above check is made mod 2^32, for files larger than 512 MB - * and uLong implemented on 32 bits. - */ - init_block(s); - - if (eof) { - bi_windup(s); -#ifdef DEBUG - s->compressed_len += 7; /* align on byte boundary */ -#endif - } - Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, - s->compressed_len-7*eof)); -} - -/* =========================================================================== - * Save the match info and tally the frequency counts. Return true if - * the current block must be flushed. - */ -int _tr_tally (s, dist, lc) - deflate_state *s; - unsigned dist; /* distance of matched string */ - unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ -{ - s->d_buf[s->last_lit] = (ush)dist; - s->l_buf[s->last_lit++] = (uch)lc; - if (dist == 0) { - /* lc is the unmatched char */ - s->dyn_ltree[lc].Freq++; - } else { - s->matches++; - /* Here, lc is the match length - MIN_MATCH */ - dist--; /* dist = match distance - 1 */ - Assert((ush)dist < (ush)MAX_DIST(s) && - (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && - (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); - - s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++; - s->dyn_dtree[d_code(dist)].Freq++; - } - -#ifdef TRUNCATE_BLOCK - /* Try to guess if it is profitable to stop the current block here */ - if ((s->last_lit & 0x1fff) == 0 && s->level > 2) { - /* Compute an upper bound for the compressed length */ - ulg out_length = (ulg)s->last_lit*8L; - ulg in_length = (ulg)((long)s->strstart - s->block_start); - int dcode; - for (dcode = 0; dcode < D_CODES; dcode++) { - out_length += (ulg)s->dyn_dtree[dcode].Freq * - (5L+extra_dbits[dcode]); - } - out_length >>= 3; - Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", - s->last_lit, in_length, out_length, - 100L - out_length*100L/in_length)); - if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1; - } -#endif - return (s->last_lit == s->lit_bufsize-1); - /* We avoid equality with lit_bufsize because of wraparound at 64K - * on 16 bit machines and because stored blocks are restricted to - * 64K-1 bytes. - */ -} - -/* =========================================================================== - * Send the block data compressed using the given Huffman trees - */ -local void compress_block(s, ltree, dtree) - deflate_state *s; - ct_data *ltree; /* literal tree */ - ct_data *dtree; /* distance tree */ -{ - unsigned dist; /* distance of matched string */ - int lc; /* match length or unmatched char (if dist == 0) */ - unsigned lx = 0; /* running index in l_buf */ - unsigned code; /* the code to send */ - int extra; /* number of extra bits to send */ - - if (s->last_lit != 0) do { - dist = s->d_buf[lx]; - lc = s->l_buf[lx++]; - if (dist == 0) { - send_code(s, lc, ltree); /* send a literal byte */ - Tracecv(isgraph(lc), (stderr," '%c' ", lc)); - } else { - /* Here, lc is the match length - MIN_MATCH */ - code = _length_code[lc]; - send_code(s, code+LITERALS+1, ltree); /* send the length code */ - extra = extra_lbits[code]; - if (extra != 0) { - lc -= base_length[code]; - send_bits(s, lc, extra); /* send the extra length bits */ - } - dist--; /* dist is now the match distance - 1 */ - code = d_code(dist); - Assert (code < D_CODES, "bad d_code"); - - send_code(s, code, dtree); /* send the distance code */ - extra = extra_dbits[code]; - if (extra != 0) { - dist -= base_dist[code]; - send_bits(s, dist, extra); /* send the extra distance bits */ - } - } /* literal or match pair ? */ - - /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ - Assert(s->pending < s->lit_bufsize + 2*lx, "pendingBuf overflow"); - - } while (lx < s->last_lit); - - send_code(s, END_BLOCK, ltree); - s->last_eob_len = ltree[END_BLOCK].Len; -} - -/* =========================================================================== - * Set the data type to ASCII or BINARY, using a crude approximation: - * binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise. - * IN assertion: the fields freq of dyn_ltree are set and the total of all - * frequencies does not exceed 64K (to fit in an int on 16 bit machines). - */ -local void set_data_type(s) - deflate_state *s; -{ - int n = 0; - unsigned ascii_freq = 0; - unsigned bin_freq = 0; - while (n < 7) bin_freq += s->dyn_ltree[n++].Freq; - while (n < 128) ascii_freq += s->dyn_ltree[n++].Freq; - while (n < LITERALS) bin_freq += s->dyn_ltree[n++].Freq; - s->data_type = (Byte)(bin_freq > (ascii_freq >> 2) ? Z_BINARY : Z_ASCII); -} - -/* =========================================================================== - * Reverse the first len bits of a code, using straightforward code (a faster - * method would use a table) - * IN assertion: 1 <= len <= 15 - */ -local unsigned bi_reverse(code, len) - unsigned code; /* the value to invert */ - int len; /* its bit length */ -{ - register unsigned res = 0; - do { - res |= code & 1; - code >>= 1, res <<= 1; - } while (--len > 0); - return res >> 1; -} - -/* =========================================================================== - * Flush the bit buffer, keeping at most 7 bits in it. - */ -local void bi_flush(s) - deflate_state *s; -{ - if (s->bi_valid == 16) { - put_short(s, s->bi_buf); - s->bi_buf = 0; - s->bi_valid = 0; - } else if (s->bi_valid >= 8) { - put_byte(s, (Byte)s->bi_buf); - s->bi_buf >>= 8; - s->bi_valid -= 8; - } -} - -/* =========================================================================== - * Flush the bit buffer and align the output on a byte boundary - */ -local void bi_windup(s) - deflate_state *s; -{ - if (s->bi_valid > 8) { - put_short(s, s->bi_buf); - } else if (s->bi_valid > 0) { - put_byte(s, (Byte)s->bi_buf); - } - s->bi_buf = 0; - s->bi_valid = 0; -#ifdef DEBUG - s->bits_sent = (s->bits_sent+7) & ~7; -#endif -} - -/* =========================================================================== - * Copy a stored block, storing first the length and its - * one's complement if requested. - */ -local void copy_block(s, buf, len, header) - deflate_state *s; - charf *buf; /* the input data */ - unsigned len; /* its length */ - int header; /* true if block header must be written */ -{ - bi_windup(s); /* align on byte boundary */ - s->last_eob_len = 8; /* enough lookahead for inflate */ - - if (header) { - put_short(s, (ush)len); - put_short(s, (ush)~len); -#ifdef DEBUG - s->bits_sent += 2*16; -#endif - } -#ifdef DEBUG - s->bits_sent += (ulg)len<<3; -#endif - while (len--) { - put_byte(s, *buf++); - } -} 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 -# define ZEXPORT WINAPI -# ifdef WIN32 -# define ZEXPORTVA WINAPIV -# else -# define ZEXPORTVA FAR _cdecl _export -# endif -# endif -# if defined (__BORLANDC__) -# if (__BORLANDC__ >= 0x0500) && defined (WIN32) -# include -# define ZEXPORT __declspec(dllexport) WINAPI -# define ZEXPORTRVA __declspec(dllexport) WINAPIV -# else -# if defined (_Windows) && defined (__DLL__) -# define ZEXPORT _export -# define ZEXPORTVA _export -# endif -# endif -# endif -#endif - -#if defined (__BEOS__) -# if defined (ZLIB_DLL) -# define ZEXTERN extern __declspec(dllexport) -# else -# define ZEXTERN extern __declspec(dllimport) -# endif -#endif - -#ifndef ZEXPORT -# define ZEXPORT -#endif -#ifndef ZEXPORTVA -# define ZEXPORTVA -#endif -#ifndef ZEXTERN -# define ZEXTERN extern -#endif - -#ifndef FAR -# define FAR -#endif - -#if !defined(MACOS) && !defined(TARGET_OS_MAC) -typedef unsigned char Byte; /* 8 bits */ -#endif -typedef unsigned int uInt; /* 16 bits or more */ -typedef unsigned long uLong; /* 32 bits or more */ - -#ifdef SMALL_MEDIUM - /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ -# define Bytef Byte FAR -#else - typedef Byte FAR Bytef; -#endif -typedef char FAR charf; -typedef int FAR intf; -typedef uInt FAR uIntf; -typedef uLong FAR uLongf; - -#ifdef STDC - typedef void FAR *voidpf; - typedef void *voidp; -#else - typedef Byte FAR *voidpf; - typedef Byte *voidp; -#endif - -#ifdef HAVE_UNISTD_H -# include /* for off_t */ -# include /* for SEEK_* and off_t */ -# define z_off_t off_t -#endif -#ifndef SEEK_SET -# define SEEK_SET 0 /* Seek from beginning of file. */ -# define SEEK_CUR 1 /* Seek from current position. */ -# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ -#endif -#ifndef z_off_t -# define z_off_t long -#endif - -/* MVS linker does not support external names larger than 8 bytes */ -#if defined(__MVS__) -# pragma map(deflateInit_,"DEIN") -# pragma map(deflateInit2_,"DEIN2") -# pragma map(deflateEnd,"DEEND") -# pragma map(inflateInit_,"ININ") -# pragma map(inflateInit2_,"ININ2") -# pragma map(inflateEnd,"INEND") -# pragma map(inflateSync,"INSY") -# pragma map(inflateSetDictionary,"INSEDI") -# pragma map(inflate_blocks,"INBL") -# pragma map(inflate_blocks_new,"INBLNE") -# pragma map(inflate_blocks_free,"INBLFR") -# pragma map(inflate_blocks_reset,"INBLRE") -# pragma map(inflate_codes_free,"INCOFR") -# pragma map(inflate_codes,"INCO") -# pragma map(inflate_fast,"INFA") -# pragma map(inflate_flush,"INFLU") -# pragma map(inflate_mask,"INMA") -# pragma map(inflate_set_dictionary,"INSEDI2") -# pragma map(inflate_copyright,"INCOPY") -# pragma map(inflate_trees_bits,"INTRBI") -# pragma map(inflate_trees_dynamic,"INTRDY") -# pragma map(inflate_trees_fixed,"INTRFI") -# pragma map(inflate_trees_free,"INTRFR") -#endif - -#endif /* _ZCONF_H */ 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 -# include -# include -#endif -#ifdef NO_ERRNO_H - extern int errno; -#else -# include -#endif - -#ifndef local -# define local static -#endif -/* compile with -Dlocal if your debugger can't find static symbols */ - -typedef unsigned char uch; -typedef uch FAR uchf; -typedef unsigned short ush; -typedef ush FAR ushf; -typedef unsigned long ulg; - -extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */ -/* (size given to avoid silly warnings with Visual C++) */ - -#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] - -#define ERR_RETURN(strm,err) \ - return (strm->msg = (char*)ERR_MSG(err), (err)) -/* To be used only when the state is known to be valid */ - - /* common constants */ - -#ifndef DEF_WBITS -# define DEF_WBITS MAX_WBITS -#endif -/* default windowBits for decompression. MAX_WBITS is for compression only */ - -#if MAX_MEM_LEVEL >= 8 -# define DEF_MEM_LEVEL 8 -#else -# define DEF_MEM_LEVEL MAX_MEM_LEVEL -#endif -/* default memLevel */ - -#define STORED_BLOCK 0 -#define STATIC_TREES 1 -#define DYN_TREES 2 -/* The three kinds of block type */ - -#define MIN_MATCH 3 -#define MAX_MATCH 258 -/* The minimum and maximum match lengths */ - -#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */ - - /* target dependencies */ - -#ifdef MSDOS -# define OS_CODE 0x00 -# if defined(__TURBOC__) || defined(__BORLANDC__) -# if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__)) - /* Allow compilation with ANSI keywords only enabled */ - void _Cdecl farfree( void *block ); - void *_Cdecl farmalloc( unsigned long nbytes ); -# else -# include -# endif -# else /* MSC or DJGPP */ -# include -# endif -#endif - -#ifdef OS2 -# define OS_CODE 0x06 -#endif - -#ifdef WIN32 /* Window 95 & Windows NT */ -# define OS_CODE 0x0b -#endif - -#if defined(VAXC) || defined(VMS) -# define OS_CODE 0x02 -# define F_OPEN(name, mode) \ - fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512") -#endif - -#ifdef AMIGA -# define OS_CODE 0x01 -#endif - -#if defined(ATARI) || defined(atarist) -# define OS_CODE 0x05 -#endif - -#if defined(MACOS) || defined(TARGET_OS_MAC) -# define OS_CODE 0x07 -# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os -# include /* for fdopen */ -# else -# ifndef fdopen -# define fdopen(fd,mode) NULL /* No fdopen() */ -# endif -# endif -#endif - -#ifdef __50SERIES /* Prime/PRIMOS */ -# define OS_CODE 0x0F -#endif - -#ifdef TOPS20 -# define OS_CODE 0x0a -#endif - -#if defined(_BEOS_) || defined(RISCOS) -# define fdopen(fd,mode) NULL /* No fdopen() */ -#endif - -#if (defined(_MSC_VER) && (_MSC_VER > 600)) -# define fdopen(fd,type) _fdopen(fd,type) -#endif - - - /* Common defaults */ - -#ifndef OS_CODE -# define OS_CODE 0x03 /* assume Unix */ -#endif - -#ifndef F_OPEN -# define F_OPEN(name, mode) fopen((name), (mode)) -#endif - - /* functions */ - -#ifdef HAVE_STRERROR - extern char *strerror OF((int)); -# define zstrerror(errnum) strerror(errnum) -#else -# define zstrerror(errnum) "" -#endif - -#if defined(pyr) -# define NO_MEMCPY -#endif -#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__) - /* Use our own functions for small and medium model with MSC <= 5.0. - * You may have to use the same strategy for Borland C (untested). - * The __SC__ check is for Symantec. - */ -# define NO_MEMCPY -#endif -#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY) -# define HAVE_MEMCPY -#endif -#ifdef HAVE_MEMCPY -# ifdef SMALL_MEDIUM /* MSDOS small or medium model */ -# define zmemcpy _fmemcpy -# define zmemcmp _fmemcmp -# define zmemzero(dest, len) _fmemset(dest, 0, len) -# else -# define zmemcpy memcpy -# define zmemcmp memcmp -# define zmemzero(dest, len) memset(dest, 0, len) -# endif -#else - extern void zmemcpy OF((Bytef* dest, const Bytef* source, uInt len)); - extern int zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len)); - extern void zmemzero OF((Bytef* dest, uInt len)); -#endif - -/* Diagnostic functions */ -#ifdef DEBUG -# include - extern int z_verbose; - extern void z_error OF((char *m)); -# define Assert(cond,msg) {if(!(cond)) z_error(msg);} -# define Trace(x) {if (z_verbose>=0) fprintf x ;} -# define Tracev(x) {if (z_verbose>0) fprintf x ;} -# define Tracevv(x) {if (z_verbose>1) fprintf x ;} -# define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;} -# define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;} -#else -# define Assert(cond,msg) -# define Trace(x) -# define Tracev(x) -# define Tracevv(x) -# define Tracec(c,x) -# define Tracecv(c,x) -#endif - - -typedef uLong (ZEXPORT *check_func) OF((uLong check, const Bytef *buf, - uInt len)); -voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size)); -void zcfree OF((voidpf opaque, voidpf ptr)); - -#define ZALLOC(strm, items, size) \ - (*((strm)->zalloc))((strm)->opaque, (items), (size)) -#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr)) -#define TRY_FREE(s, p) {if (p) ZFREE(s, p);} - -#endif /* _Z_UTIL_H */