mirror of
git://git.gnupg.org/gnupg.git
synced 2025-04-12 22:11:29 +02:00
new release
This commit is contained in:
parent
0e5a31d7be
commit
f9a7043782
17
NEWS
17
NEWS
@ -1,16 +1,27 @@
|
|||||||
Noteworthy changes in version 0.2.18
|
Noteworthy changes in version 0.2.18
|
||||||
------------------------------------
|
------------------------------------
|
||||||
|
|
||||||
* splitted cipher/random.c, add new option "--disable-dev-random"
|
* Splitted cipher/random.c, add new option "--disable-dev-random"
|
||||||
to configure to support the development of a random source for
|
to configure to support the development of a random source for
|
||||||
other systems. Prepared sourcefiles rand-unix.c, rand-w32.c
|
other systems. Prepared sourcefiles rand-unix.c, rand-w32.c
|
||||||
and rand-dummy.c (which is used to allow compilation on systems
|
and rand-dummy.c (which is used to allow compilation on systems
|
||||||
without a random source).
|
without a random source).
|
||||||
|
|
||||||
* fixed a small bug in the key generation (it was possible that 48 bits
|
* Fixed a small bug in the key generation (it was possible that 48 bits
|
||||||
of a key were not taken from the random pool)
|
of a key were not taken from the random pool)
|
||||||
|
|
||||||
* Add key generation for DSA (signature only)
|
* Add key generation for DSA and v4 signatures.
|
||||||
|
|
||||||
|
* Add a function trap_unaligned(), so that a SIGBUS is issued on
|
||||||
|
Alphas and not the slow emulation code is used. And success: rmd160
|
||||||
|
raised a SIGBUS.
|
||||||
|
|
||||||
|
* Enhanced the formatting facility of argparse and changed the use of
|
||||||
|
\r,\v to @ because gettext does not like it.
|
||||||
|
|
||||||
|
* New option "--compress-algo 1" to allow the creation of compressed
|
||||||
|
messages which are readable by PGP and "--print-md" (gpgm) to make
|
||||||
|
speed measurement easier.
|
||||||
|
|
||||||
|
|
||||||
Noteworthy changes in version 0.2.17
|
Noteworthy changes in version 0.2.17
|
||||||
|
3
THANKS
3
THANKS
@ -5,6 +5,7 @@ errors.
|
|||||||
|
|
||||||
Anand Kumria wildfire@progsoc.uts.edu.au
|
Anand Kumria wildfire@progsoc.uts.edu.au
|
||||||
Charles Levert charles@comm.polymtl.ca
|
Charles Levert charles@comm.polymtl.ca
|
||||||
|
Christian von Roques roques@pond.sub.org
|
||||||
Daniel Eisenbud eisenbud@cs.swarthmore.edu
|
Daniel Eisenbud eisenbud@cs.swarthmore.edu
|
||||||
Detlef Lannert lannert@lannert.rz.uni-duesseldorf.de
|
Detlef Lannert lannert@lannert.rz.uni-duesseldorf.de
|
||||||
Ed Boraas ecxjo@esperanto.org
|
Ed Boraas ecxjo@esperanto.org
|
||||||
@ -22,12 +23,12 @@ Matthew Skala mskala@ansuz.sooke.bc.ca
|
|||||||
Peter Gutmann pgut001@cs.auckland.ac.nz
|
Peter Gutmann pgut001@cs.auckland.ac.nz
|
||||||
Ralph Gillen gillen@theochem.uni-duesseldorf.de
|
Ralph Gillen gillen@theochem.uni-duesseldorf.de
|
||||||
Thomas Roessler roessler@guug.de
|
Thomas Roessler roessler@guug.de
|
||||||
|
Tom Zerucha tzeruch@ceddec.com
|
||||||
Tomas Fasth tomas.fasth@twinspot.net
|
Tomas Fasth tomas.fasth@twinspot.net
|
||||||
Ulf Möller 3umoelle@informatik.uni-hamburg.de
|
Ulf Möller 3umoelle@informatik.uni-hamburg.de
|
||||||
Walter Koch walterk@ddorf.rhein-ruhr.de
|
Walter Koch walterk@ddorf.rhein-ruhr.de
|
||||||
Werner Koch werner.koch@guug.de
|
Werner Koch werner.koch@guug.de
|
||||||
Wim Vandeputte bunbun@reptile.rug.ac.be
|
Wim Vandeputte bunbun@reptile.rug.ac.be
|
||||||
tzeruch@ceddec.com
|
|
||||||
|
|
||||||
|
|
||||||
Thanks to the German Unix User Group for providing FTP space and
|
Thanks to the German Unix User Group for providing FTP space and
|
||||||
|
21
TODO
21
TODO
@ -1,4 +1,12 @@
|
|||||||
|
|
||||||
|
* make --add-key work (to add an ElGamal key to a DSA key).
|
||||||
|
|
||||||
|
* add readline support. Must enhance libreadline - Anyone?
|
||||||
|
|
||||||
|
* Burn the buffers used by fopen(), or use read(2).
|
||||||
|
|
||||||
|
* enable a SIGSEGV handler while using zlib functions
|
||||||
|
|
||||||
* improve iobuf by reading more than one byte at once,
|
* improve iobuf by reading more than one byte at once,
|
||||||
this shoud espceially done for the buffer in the chain.
|
this shoud espceially done for the buffer in the chain.
|
||||||
Change the buffering to a mbuf like scheme? Need it for PSST anyway.
|
Change the buffering to a mbuf like scheme? Need it for PSST anyway.
|
||||||
@ -7,11 +15,6 @@
|
|||||||
* add checking of armor trailers
|
* add checking of armor trailers
|
||||||
* remove all "Fixmes"
|
* remove all "Fixmes"
|
||||||
|
|
||||||
* enable a SIGSEGV handler while using zlib functions
|
|
||||||
|
|
||||||
* key generation for dsa and subpacket support.
|
|
||||||
|
|
||||||
* Burn the buffers used by fopen(), or use read(2).
|
|
||||||
|
|
||||||
* bug: g10/trustdb.c#build_sigrecs called to often by do_list_path
|
* bug: g10/trustdb.c#build_sigrecs called to often by do_list_path
|
||||||
and remove the bad kludge. Maybe we should put all sigs into the trustdb
|
and remove the bad kludge. Maybe we should put all sigs into the trustdb
|
||||||
@ -38,13 +41,9 @@
|
|||||||
flag that we may have a cached signature for this (and use the address
|
flag that we may have a cached signature for this (and use the address
|
||||||
of PKC to lookup the hash).
|
of PKC to lookup the hash).
|
||||||
|
|
||||||
* change the misleading usage of public key certificate to public key data
|
* change the misleading usage of "public key certificate" to
|
||||||
or something like this.
|
"public key data" or something like this.
|
||||||
|
|
||||||
* fix the problems with "\v" in gettext. Add nice formatting stuff to
|
|
||||||
argparse.c
|
|
||||||
|
|
||||||
* replace getkey.c#enum_secret_keys
|
* replace getkey.c#enum_secret_keys
|
||||||
|
|
||||||
* add readline support (Must enhance libreadline)
|
|
||||||
|
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
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)
|
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
|
* rand-internal.h, rand-unix.c, rand-w32.c, rand_dummy.c: New
|
||||||
|
@ -186,7 +186,19 @@ transform( RMD160_CONTEXT *hd, byte *data )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
u32 *x = (u32*)data;
|
#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
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -396,7 +408,6 @@ transform( RMD160_CONTEXT *hd, byte *data )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Update the message digest with the contents
|
/* Update the message digest with the contents
|
||||||
* of INBUF with length INLEN.
|
* of INBUF with length INLEN.
|
||||||
*/
|
*/
|
||||||
@ -429,7 +440,6 @@ rmd160_write( RMD160_CONTEXT *hd, byte *inbuf, size_t inlen)
|
|||||||
hd->buf[hd->count++] = *inbuf++;
|
hd->buf[hd->count++] = *inbuf++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/****************
|
/****************
|
||||||
* Apply the rmd160 transform function on the buffer which must have
|
* Apply the rmd160 transform function on the buffer which must have
|
||||||
* a length 64 bytes. Do not use this function together with the
|
* a length 64 bytes. Do not use this function together with the
|
||||||
|
15
doc/gpg.1pod
15
doc/gpg.1pod
@ -251,6 +251,13 @@ B<--digest-algo> I<name>
|
|||||||
program with the option B<--verbose> yields a list of
|
program with the option B<--verbose> yields a list of
|
||||||
supported algorithms.
|
supported algorithms.
|
||||||
|
|
||||||
|
B<--compress-algo> I<number>
|
||||||
|
Use compress algorithm I<number>. Default is I<2> which is
|
||||||
|
RFC1950 compression; you may use I<1> to use the old zlib
|
||||||
|
version which is used by PGP. This is only used for
|
||||||
|
new messages. The default algorithm may give better
|
||||||
|
results because the window size is not limited to 8K.
|
||||||
|
|
||||||
B<--passphrase-fd> I<n>
|
B<--passphrase-fd> I<n>
|
||||||
Read the passphrase from file descriptor I<n>. If you use
|
Read the passphrase from file descriptor I<n>. If you use
|
||||||
0 for I<n>, the passphrase will be read from stdin. This
|
0 for I<n>, the passphrase will be read from stdin. This
|
||||||
@ -323,7 +330,7 @@ F<~/.gnupg/options> May contain options
|
|||||||
|
|
||||||
=head1 SEE ALSO
|
=head1 SEE ALSO
|
||||||
|
|
||||||
gpgm(1) gpgk(1)
|
gpgm(1) gpgd(1)
|
||||||
|
|
||||||
|
|
||||||
=head1 WARNINGS
|
=head1 WARNINGS
|
||||||
@ -334,4 +341,10 @@ to protect your secret key.
|
|||||||
Keep in mind that, if this program is used over a network (telnet), it
|
Keep in mind that, if this program is used over a network (telnet), it
|
||||||
is B<very> easy to spy out your passphrase!
|
is B<very> easy to spy out your passphrase!
|
||||||
|
|
||||||
|
=head1 BUGS
|
||||||
|
|
||||||
|
On many systems this program should be installed as setuid(root); this
|
||||||
|
is necessary to lock some pages of memory. If you get no warning message
|
||||||
|
about insecure memory you have a nice OS kernel and you don't need to make
|
||||||
|
it setuid.
|
||||||
|
|
||||||
|
@ -1,3 +1,24 @@
|
|||||||
|
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)
|
Wed May 13 11:48:27 1998 Werner Koch (wk@isil.d.shuttle.de)
|
||||||
|
|
||||||
* build-packet.c (do_signature): Support for v4 pakets.
|
* build-packet.c (do_signature): Support for v4 pakets.
|
||||||
|
@ -27,6 +27,10 @@ gen-prime
|
|||||||
# With three arguments: same as above, but a third argument indicates
|
# With three arguments: same as above, but a third argument indicates
|
||||||
# that a generator should also be calculated.
|
# that a generator should also be calculated.
|
||||||
|
|
||||||
|
print-md algo
|
||||||
|
# print the message digest of algorithm ALGO for stdin or all
|
||||||
|
# given filenames
|
||||||
|
|
||||||
print-mds
|
print-mds
|
||||||
# print all message digests of all give filenames
|
# print all message digests of all give filenames
|
||||||
|
|
||||||
|
@ -40,7 +40,6 @@ init_compress( compress_filter_context_t *zfx, z_stream *zs )
|
|||||||
int rc;
|
int rc;
|
||||||
int level;
|
int level;
|
||||||
|
|
||||||
|
|
||||||
if( opt.compress >= 0 && opt.compress <= 9 )
|
if( opt.compress >= 0 && opt.compress <= 9 )
|
||||||
level = opt.compress;
|
level = opt.compress;
|
||||||
else if( opt.compress == -1 )
|
else if( opt.compress == -1 )
|
||||||
@ -52,7 +51,11 @@ init_compress( compress_filter_context_t *zfx, z_stream *zs )
|
|||||||
level = Z_DEFAULT_COMPRESSION;
|
level = Z_DEFAULT_COMPRESSION;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( (rc = deflateInit( zs, level )) != Z_OK ) {
|
|
||||||
|
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 :
|
log_fatal("zlib problem: %s\n", zs->msg? zs->msg :
|
||||||
rc == Z_MEM_ERROR ? "out of core" :
|
rc == Z_MEM_ERROR ? "out of core" :
|
||||||
rc == Z_VERSION_ERROR ? "invalid lib version" :
|
rc == Z_VERSION_ERROR ? "invalid lib version" :
|
||||||
@ -104,8 +107,8 @@ init_uncompress( compress_filter_context_t *zfx, z_stream *zs )
|
|||||||
* it forces zlib not to expect a zlib header. This is a
|
* it forces zlib not to expect a zlib header. This is a
|
||||||
* undocumented feature Peter Gutmann told me about.
|
* undocumented feature Peter Gutmann told me about.
|
||||||
*/
|
*/
|
||||||
if( (rc = zfx->pgpmode? inflateInit2( zs, -13)
|
if( (rc = zfx->algo == 1? inflateInit2( zs, -13)
|
||||||
: inflateInit( zs )) != Z_OK ) {
|
: inflateInit( zs )) != Z_OK ) {
|
||||||
log_fatal("zlib problem: %s\n", zs->msg? zs->msg :
|
log_fatal("zlib problem: %s\n", zs->msg? zs->msg :
|
||||||
rc == Z_MEM_ERROR ? "out of core" :
|
rc == Z_MEM_ERROR ? "out of core" :
|
||||||
rc == Z_VERSION_ERROR ? "invalid lib version" :
|
rc == Z_VERSION_ERROR ? "invalid lib version" :
|
||||||
@ -187,9 +190,11 @@ compress_filter( void *opaque, int control,
|
|||||||
PACKET pkt;
|
PACKET pkt;
|
||||||
PKT_compressed cd;
|
PKT_compressed cd;
|
||||||
|
|
||||||
|
if( !zfx->algo )
|
||||||
|
zfx->algo = opt.def_compress_algo;
|
||||||
memset( &cd, 0, sizeof cd );
|
memset( &cd, 0, sizeof cd );
|
||||||
cd.len = 0;
|
cd.len = 0;
|
||||||
cd.algorithm = 2; /* zlib */
|
cd.algorithm = zfx->algo;
|
||||||
init_packet( &pkt );
|
init_packet( &pkt );
|
||||||
pkt.pkttype = PKT_COMPRESSED;
|
pkt.pkttype = PKT_COMPRESSED;
|
||||||
pkt.pkt.compressed = &cd;
|
pkt.pkt.compressed = &cd;
|
||||||
@ -237,10 +242,9 @@ handle_compressed( PKT_compressed *cd,
|
|||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
memset( &cfx, 0, sizeof cfx );
|
memset( &cfx, 0, sizeof cfx );
|
||||||
if( cd->algorithm == 1 )
|
if( cd->algorithm < 1 || cd->algorithm > 2 )
|
||||||
cfx.pgpmode = 1;
|
|
||||||
else if( cd->algorithm != 2 )
|
|
||||||
return G10ERR_COMPR_ALGO;
|
return G10ERR_COMPR_ALGO;
|
||||||
|
cfx.algo = cd->algorithm;
|
||||||
|
|
||||||
iobuf_push_filter( cd->buf, compress_filter, &cfx );
|
iobuf_push_filter( cd->buf, compress_filter, &cfx );
|
||||||
if( callback )
|
if( callback )
|
||||||
|
@ -90,7 +90,8 @@ encode_simple( const char *filename, int mode )
|
|||||||
if( mode ) {
|
if( mode ) {
|
||||||
s2k = m_alloc_clear( sizeof *s2k );
|
s2k = m_alloc_clear( sizeof *s2k );
|
||||||
s2k->mode = 1;
|
s2k->mode = 1;
|
||||||
s2k->hash_algo = opt.def_digest_algo;
|
s2k->hash_algo = opt.def_digest_algo ? opt.def_digest_algo
|
||||||
|
: DEFAULT_DIGEST_ALGO;
|
||||||
cfx.dek = passphrase_to_dek( NULL, opt.def_cipher_algo, s2k, 2 );
|
cfx.dek = passphrase_to_dek( NULL, opt.def_cipher_algo, s2k, 2 );
|
||||||
if( !cfx.dek || !cfx.dek->keylen ) {
|
if( !cfx.dek || !cfx.dek->keylen ) {
|
||||||
rc = G10ERR_PASSPHRASE;
|
rc = G10ERR_PASSPHRASE;
|
||||||
|
@ -53,7 +53,7 @@ typedef struct {
|
|||||||
unsigned inbufsize;
|
unsigned inbufsize;
|
||||||
byte *outbuf;
|
byte *outbuf;
|
||||||
unsigned outbufsize;
|
unsigned outbufsize;
|
||||||
int pgpmode;
|
int algo; /* compress algo */
|
||||||
} compress_filter_context_t;
|
} compress_filter_context_t;
|
||||||
|
|
||||||
|
|
||||||
|
198
g10/g10.c
198
g10/g10.c
@ -18,12 +18,6 @@
|
|||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/****************
|
|
||||||
* We use cpp to generate the source g10maint.c (IS_G10MAINT) from this
|
|
||||||
* source; the main difference is, that g10maint can only work with public
|
|
||||||
* keys and does not need to lock memory or run suid.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -54,11 +48,11 @@
|
|||||||
|
|
||||||
static ARGPARSE_OPTS opts[] = {
|
static ARGPARSE_OPTS opts[] = {
|
||||||
|
|
||||||
{ 300, NULL, 0, N_("\vCommands:\n ") },
|
{ 300, NULL, 0, N_("@Commands:\n ") },
|
||||||
|
|
||||||
#ifdef IS_G10
|
#ifdef IS_G10
|
||||||
{ 's', "sign", 0, N_("make a signature")},
|
{ 's', "sign", 0, N_("|[file]|make a signature")},
|
||||||
{ 539, "clearsign", 0, N_("make a clear text signature") },
|
{ 539, "clearsign", 0, N_("|[file]|make a clear text signature") },
|
||||||
{ 'b', "detach-sign", 0, N_("make a detached signature")},
|
{ 'b', "detach-sign", 0, N_("make a detached signature")},
|
||||||
{ 'e', "encrypt", 0, N_("encrypt data")},
|
{ 'e', "encrypt", 0, N_("encrypt data")},
|
||||||
{ 'c', "symmetric", 0, N_("encryption only with symmetric cipher")},
|
{ 'c', "symmetric", 0, N_("encryption only with symmetric cipher")},
|
||||||
@ -85,18 +79,19 @@ static ARGPARSE_OPTS opts[] = {
|
|||||||
#ifdef IS_G10MAINT
|
#ifdef IS_G10MAINT
|
||||||
{ 546, "dearmor", 0, N_("De-Armor a file or stdin") },
|
{ 546, "dearmor", 0, N_("De-Armor a file or stdin") },
|
||||||
{ 547, "enarmor", 0, N_("En-Armor a file or stdin") },
|
{ 547, "enarmor", 0, N_("En-Armor a file or stdin") },
|
||||||
|
{ 555, "print-md" , 0, N_("|algo [files]|print message digests")},
|
||||||
{ 516, "print-mds" , 0, N_("print all message digests")},
|
{ 516, "print-mds" , 0, N_("print all message digests")},
|
||||||
{ 513, "gen-prime" , 0, "\r" },
|
{ 513, "gen-prime" , 0, "@" },
|
||||||
{ 548, "gen-random" , 0, "\r" },
|
{ 548, "gen-random" , 0, "@" },
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
{ 301, NULL, 0, N_("\v\nOptions:\n ") },
|
{ 301, NULL, 0, N_("@\nOptions:\n ") },
|
||||||
|
|
||||||
#ifdef IS_G10
|
#ifdef IS_G10
|
||||||
{ 'a', "armor", 0, N_("create ascii armored output")},
|
{ 'a', "armor", 0, N_("create ascii armored output")},
|
||||||
{ 'u', "local-user",2, N_("use this user-id to sign or decrypt")},
|
{ 'u', "local-user",2, N_("use this user-id to sign or decrypt")},
|
||||||
{ 'r', "remote-user", 2, N_("use this user-id for encryption")},
|
{ 'r', "remote-user", 2, N_("use this user-id for encryption")},
|
||||||
{ 'z', NULL, 1, N_("set compress level (0 disables)") },
|
{ 'z', NULL, 1, N_("|N|set compress level N (0 disables)") },
|
||||||
{ 't', "textmode", 0, N_("use canonical text mode")},
|
{ 't', "textmode", 0, N_("use canonical text mode")},
|
||||||
#endif
|
#endif
|
||||||
{ 'o', "output", 2, N_("use as output file")},
|
{ 'o', "output", 2, N_("use as output file")},
|
||||||
@ -111,22 +106,24 @@ static ARGPARSE_OPTS opts[] = {
|
|||||||
|
|
||||||
{ 510, "debug" ,4|16, N_("set debugging flags")},
|
{ 510, "debug" ,4|16, N_("set debugging flags")},
|
||||||
{ 511, "debug-all" ,0, N_("enable full debugging")},
|
{ 511, "debug-all" ,0, N_("enable full debugging")},
|
||||||
{ 512, "status-fd" ,1, N_("write status info to this fd") },
|
{ 512, "status-fd" ,1, N_("|FD|write status info to this FD") },
|
||||||
{ 534, "no-comment", 0, N_("do not write comment packets")},
|
{ 534, "no-comment", 0, N_("do not write comment packets")},
|
||||||
{ 535, "completes-needed", 1, N_("(default is 1)")},
|
{ 535, "completes-needed", 1, N_("(default is 1)")},
|
||||||
{ 536, "marginals-needed", 1, N_("(default is 3)")},
|
{ 536, "marginals-needed", 1, N_("(default is 3)")},
|
||||||
#ifdef IS_G10
|
#ifdef IS_G10
|
||||||
{ 527, "cipher-algo", 2 , N_("select default cipher algorithm")},
|
{ 527, "cipher-algo", 2 , N_("|NAME|use cipher algorithm NAME")},
|
||||||
{ 528, "pubkey-algo", 2 , N_("select default public key algorithm")},
|
{ 528, "pubkey-algo", 2 , N_("|NAME|use public key algorithm NAME")},
|
||||||
{ 529, "digest-algo", 2 , N_("select default message digest algorithm")},
|
{ 529, "digest-algo", 2 , N_("|NAME|use message digest algorithm NAME")},
|
||||||
|
{ 556, "compress-algo", 1 , N_("|N|use compress algorithm N")},
|
||||||
#else /* some dummies */
|
#else /* some dummies */
|
||||||
{ 527, "cipher-algo", 2 , "\r"},
|
{ 527, "cipher-algo", 2 , "@"},
|
||||||
{ 528, "pubkey-algo", 2 , "\r"},
|
{ 528, "pubkey-algo", 2 , "@"},
|
||||||
{ 529, "digest-algo", 2 , "\r"},
|
{ 529, "digest-algo", 2 , "@"},
|
||||||
|
{ 556, "compress-algo", 1 , "@"},
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef IS_G10
|
#ifdef IS_G10
|
||||||
{ 302, NULL, 0, N_("\v\nExamples:\n\n"
|
{ 302, NULL, 0, N_("@\nExamples:\n\n"
|
||||||
" -se -r Bob [file] sign and encrypt for user Bob\n"
|
" -se -r Bob [file] sign and encrypt for user Bob\n"
|
||||||
" -sat [file] make a clear text signature\n"
|
" -sat [file] make a clear text signature\n"
|
||||||
" -sb [file] make a detached signature\n"
|
" -sb [file] make a detached signature\n"
|
||||||
@ -136,32 +133,32 @@ static ARGPARSE_OPTS opts[] = {
|
|||||||
|
|
||||||
/* hidden options */
|
/* hidden options */
|
||||||
#ifdef IS_G10MAINT
|
#ifdef IS_G10MAINT
|
||||||
{ 514, "test" , 0, "\r" },
|
{ 514, "test" , 0, "@" },
|
||||||
{ 531, "list-trustdb",0 , "\r"},
|
{ 531, "list-trustdb",0 , "@"},
|
||||||
{ 533, "list-trust-path",0, "\r"},
|
{ 533, "list-trust-path",0, "@"},
|
||||||
#endif
|
#endif
|
||||||
#ifdef IS_G10
|
#ifdef IS_G10
|
||||||
{ 'k', NULL, 0, "\r"},
|
{ 'k', NULL, 0, "@"},
|
||||||
{ 504, "delete-secret-key",0, "\r" },
|
{ 504, "delete-secret-key",0, "@" },
|
||||||
{ 524, "edit-sig" ,0, "\r"}, /* alias for edit-key */
|
{ 524, "edit-sig" ,0, "@"}, /* alias for edit-key */
|
||||||
{ 523, "passphrase-fd",1, "\r" },
|
{ 523, "passphrase-fd",1, "@" },
|
||||||
#endif
|
#endif
|
||||||
{ 532, "quick-random", 0, "\r"},
|
{ 532, "quick-random", 0, "@"},
|
||||||
{ 526, "no-verbose", 0, "\r"},
|
{ 526, "no-verbose", 0, "@"},
|
||||||
{ 538, "trustdb-name", 2, "\r" },
|
{ 538, "trustdb-name", 2, "@" },
|
||||||
{ 540, "no-secmem-warning", 0, "\r" }, /* used only by regression tests */
|
{ 540, "no-secmem-warning", 0, "@" }, /* used only by regression tests */
|
||||||
{ 519, "no-armor", 0, "\r"},
|
{ 519, "no-armor", 0, "@"},
|
||||||
{ 520, "no-default-keyring", 0, "\r" },
|
{ 520, "no-default-keyring", 0, "@" },
|
||||||
{ 522, "no-greeting", 0, "\r" },
|
{ 522, "no-greeting", 0, "@" },
|
||||||
{ 541, "no-operation", 0, "\r" }, /* used by regression tests */
|
{ 541, "no-operation", 0, "@" }, /* used by regression tests */
|
||||||
{ 543, "no-options", 0, "\r" }, /* shortcut for --options /dev/null */
|
{ 543, "no-options", 0, "@" }, /* shortcut for --options /dev/null */
|
||||||
{ 544, "homedir", 2, "\r" }, /* defaults to "~/.gnupg" */
|
{ 544, "homedir", 2, "@" }, /* defaults to "~/.gnupg" */
|
||||||
{ 545, "no-batch", 0, "\r" },
|
{ 545, "no-batch", 0, "@" },
|
||||||
{ 549, "with-colons", 0, "\r"},
|
{ 549, "with-colons", 0, "@"},
|
||||||
{ 551, "list-key", 0, "\r" }, /* alias */
|
{ 551, "list-key", 0, "@" }, /* alias */
|
||||||
{ 552, "list-sig", 0, "\r" }, /* alias */
|
{ 552, "list-sig", 0, "@" }, /* alias */
|
||||||
{ 508, "check-sig",0, "\r" }, /* alias */
|
{ 508, "check-sig",0, "@" }, /* alias */
|
||||||
{ 553, "skip-verify",0, "\r" },
|
{ 553, "skip-verify",0, "@" },
|
||||||
|
|
||||||
{0} };
|
{0} };
|
||||||
|
|
||||||
@ -173,7 +170,7 @@ enum cmd_values { aNull = 0,
|
|||||||
aSignKey, aClearsign, aListPackets, aEditSig, aDeleteKey, aDeleteSecretKey,
|
aSignKey, aClearsign, aListPackets, aEditSig, aDeleteKey, aDeleteSecretKey,
|
||||||
aKMode, aKModeC, aChangePass, aImport, aVerify, aDecrypt, aListKeys,
|
aKMode, aKModeC, aChangePass, aImport, aVerify, aDecrypt, aListKeys,
|
||||||
aListSigs, aKeyadd,
|
aListSigs, aKeyadd,
|
||||||
aExport, aCheckKeys, aGenRevoke, aPrimegen, aPrintMDs,
|
aExport, aCheckKeys, aGenRevoke, aPrimegen, aPrintMD, aPrintMDs,
|
||||||
aListTrustDB, aListTrustPath, aDeArmor, aEnArmor, aGenRandom, aTest,
|
aListTrustDB, aListTrustPath, aDeArmor, aEnArmor, aGenRandom, aTest,
|
||||||
aNOP };
|
aNOP };
|
||||||
|
|
||||||
@ -184,7 +181,7 @@ static void set_cmd( enum cmd_values *ret_cmd,
|
|||||||
enum cmd_values new_cmd );
|
enum cmd_values new_cmd );
|
||||||
#ifdef IS_G10MAINT
|
#ifdef IS_G10MAINT
|
||||||
static void print_hex( byte *p, size_t n );
|
static void print_hex( byte *p, size_t n );
|
||||||
static void print_mds( const char *fname );
|
static void print_mds( const char *fname, int algo );
|
||||||
static void do_test(int);
|
static void do_test(int);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -354,8 +351,10 @@ check_opts(void)
|
|||||||
log_error(_("selected cipher algorithm is invalid\n"));
|
log_error(_("selected cipher algorithm is invalid\n"));
|
||||||
if( !opt.def_pubkey_algo || check_pubkey_algo(opt.def_pubkey_algo) )
|
if( !opt.def_pubkey_algo || check_pubkey_algo(opt.def_pubkey_algo) )
|
||||||
log_error(_("selected pubkey algorithm is invalid\n"));
|
log_error(_("selected pubkey algorithm is invalid\n"));
|
||||||
if( !opt.def_digest_algo || check_digest_algo(opt.def_digest_algo) )
|
if( opt.def_digest_algo && check_digest_algo(opt.def_digest_algo) )
|
||||||
log_error(_("selected digest algorithm is invalid\n"));
|
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"), 1, 2);
|
||||||
if( opt.completes_needed < 1 )
|
if( opt.completes_needed < 1 )
|
||||||
log_error(_("completes-needed must be greater than 0\n"));
|
log_error(_("completes-needed must be greater than 0\n"));
|
||||||
if( opt.marginals_needed < 2 )
|
if( opt.marginals_needed < 2 )
|
||||||
@ -389,6 +388,7 @@ main( int argc, char **argv )
|
|||||||
enum cmd_values cmd = 0;
|
enum cmd_values cmd = 0;
|
||||||
const char *trustdb_name = NULL;
|
const char *trustdb_name = NULL;
|
||||||
|
|
||||||
|
trap_unaligned();
|
||||||
#ifdef IS_G10MAINT
|
#ifdef IS_G10MAINT
|
||||||
secmem_init( 0 ); /* disable use of secmem */
|
secmem_init( 0 ); /* disable use of secmem */
|
||||||
log_set_name("gpgm");
|
log_set_name("gpgm");
|
||||||
@ -403,9 +403,11 @@ main( int argc, char **argv )
|
|||||||
#endif
|
#endif
|
||||||
i18n_init();
|
i18n_init();
|
||||||
opt.compress = -1; /* defaults to standard compress level */
|
opt.compress = -1; /* defaults to standard compress level */
|
||||||
opt.def_cipher_algo = CIPHER_ALGO_BLOWFISH;
|
/* fixme: set the next two to zero and decide where used */
|
||||||
opt.def_pubkey_algo = PUBKEY_ALGO_ELGAMAL;
|
opt.def_cipher_algo = DEFAULT_CIPHER_ALGO;
|
||||||
opt.def_digest_algo = DIGEST_ALGO_RMD160;
|
opt.def_pubkey_algo = DEFAULT_PUBKEY_ALGO;
|
||||||
|
opt.def_digest_algo = 0;
|
||||||
|
opt.def_compress_algo = 2;
|
||||||
opt.completes_needed = 1;
|
opt.completes_needed = 1;
|
||||||
opt.marginals_needed = 3;
|
opt.marginals_needed = 3;
|
||||||
opt.homedir = getenv("GNUPGHOME");
|
opt.homedir = getenv("GNUPGHOME");
|
||||||
@ -531,6 +533,7 @@ main( int argc, char **argv )
|
|||||||
case 546: set_cmd( &cmd, aDeArmor); break;
|
case 546: set_cmd( &cmd, aDeArmor); break;
|
||||||
case 547: set_cmd( &cmd, aEnArmor); break;
|
case 547: set_cmd( &cmd, aEnArmor); break;
|
||||||
case 548: set_cmd( &cmd, aGenRandom); break;
|
case 548: set_cmd( &cmd, aGenRandom); break;
|
||||||
|
case 555: set_cmd( &cmd, aPrintMD); break;
|
||||||
#endif /* IS_G10MAINT */
|
#endif /* IS_G10MAINT */
|
||||||
|
|
||||||
case 'o': opt.outfile = pargs.r.ret_str; break;
|
case 'o': opt.outfile = pargs.r.ret_str; break;
|
||||||
@ -576,6 +579,7 @@ main( int argc, char **argv )
|
|||||||
case 552: set_cmd( &cmd, aListSigs); break;
|
case 552: set_cmd( &cmd, aListSigs); break;
|
||||||
case 553: opt.skip_verify=1; break;
|
case 553: opt.skip_verify=1; break;
|
||||||
case 554: set_cmd( &cmd, aKeyadd); break;
|
case 554: set_cmd( &cmd, aKeyadd); break;
|
||||||
|
case 556: opt.def_compress_algo = pargs.r.ret_int; break;
|
||||||
default : errors++; pargs.err = configfp? 1:2; break;
|
default : errors++; pargs.err = configfp? 1:2; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -656,6 +660,7 @@ main( int argc, char **argv )
|
|||||||
|
|
||||||
switch( cmd ) {
|
switch( cmd ) {
|
||||||
case aPrimegen:
|
case aPrimegen:
|
||||||
|
case aPrintMD:
|
||||||
case aPrintMDs:
|
case aPrintMDs:
|
||||||
case aGenRandom:
|
case aGenRandom:
|
||||||
case aDeArmor:
|
case aDeArmor:
|
||||||
@ -919,12 +924,32 @@ main( int argc, char **argv )
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case aPrintMD:
|
||||||
|
if( argc < 1)
|
||||||
|
wrong_args("--print-md algo [file]");
|
||||||
|
else {
|
||||||
|
int algo = string_to_digest_algo(*argv);
|
||||||
|
|
||||||
|
if( !algo )
|
||||||
|
log_error(_("invalid hash algorithm '%s'\n"), *argv );
|
||||||
|
else {
|
||||||
|
argc--; argv++;
|
||||||
|
if( !argc )
|
||||||
|
print_mds(NULL, algo);
|
||||||
|
else {
|
||||||
|
for(; argc; argc--, argv++ )
|
||||||
|
print_mds(*argv, algo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case aPrintMDs:
|
case aPrintMDs:
|
||||||
if( !argc )
|
if( !argc )
|
||||||
print_mds(NULL);
|
print_mds(NULL,0);
|
||||||
else {
|
else {
|
||||||
for(; argc; argc--, argv++ )
|
for(; argc; argc--, argv++ )
|
||||||
print_mds(*argv);
|
print_mds(*argv,0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1002,69 +1027,94 @@ print_hex( byte *p, size_t n )
|
|||||||
|
|
||||||
if( n == 20 ) {
|
if( n == 20 ) {
|
||||||
for(i=0; i < n ; i++, i++, p += 2 ) {
|
for(i=0; i < n ; i++, i++, p += 2 ) {
|
||||||
|
if( i )
|
||||||
|
putchar(' ');
|
||||||
if( i == 10 )
|
if( i == 10 )
|
||||||
putchar(' ');
|
putchar(' ');
|
||||||
printf(" %02X%02X", *p, p[1] );
|
printf("%02X%02X", *p, p[1] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if( n == 24 ) {
|
else if( n == 24 ) {
|
||||||
for(i=0; i < n ; i += 4, p += 4 ) {
|
for(i=0; i < n ; i += 4, p += 4 ) {
|
||||||
|
if( i )
|
||||||
|
putchar(' ');
|
||||||
if( i == 12 )
|
if( i == 12 )
|
||||||
putchar(' ');
|
putchar(' ');
|
||||||
printf(" %02X%02X%02X%02X", *p, p[1], p[2], p[3] );
|
printf("%02X%02X%02X%02X", *p, p[1], p[2], p[3] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for(i=0; i < n ; i++, p++ ) {
|
for(i=0; i < n ; i++, p++ ) {
|
||||||
|
if( i )
|
||||||
|
putchar(' ');
|
||||||
if( i && !(i%8) )
|
if( i && !(i%8) )
|
||||||
putchar(' ');
|
putchar(' ');
|
||||||
printf(" %02X", *p );
|
printf("%02X", *p );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
print_mds( const char *fname )
|
print_mds( const char *fname, int algo )
|
||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
size_t n;
|
size_t n;
|
||||||
MD_HANDLE md;
|
MD_HANDLE md;
|
||||||
|
char *pname;
|
||||||
|
|
||||||
if( !fname ) {
|
if( !fname ) {
|
||||||
fp = stdin;
|
fp = stdin;
|
||||||
fname = "[stdin]";
|
pname = m_strdup("[stdin]: ");
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
|
pname = m_alloc(strlen(fname)+3);
|
||||||
|
strcpy(stpcpy(pname,fname),": ");
|
||||||
fp = fopen( fname, "rb" );
|
fp = fopen( fname, "rb" );
|
||||||
|
}
|
||||||
if( !fp ) {
|
if( !fp ) {
|
||||||
log_error("%s: %s\n", fname, strerror(errno) );
|
log_error("%s%s\n", pname, strerror(errno) );
|
||||||
|
m_free(pname);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
md = md_open( DIGEST_ALGO_MD5, 0 );
|
md = md_open( 0, 0 );
|
||||||
md_enable( md, DIGEST_ALGO_SHA1 );
|
if( algo )
|
||||||
md_enable( md, DIGEST_ALGO_RMD160 );
|
md_enable( md, algo );
|
||||||
#ifdef WITH_TIGER_HASH
|
else {
|
||||||
md_enable( md, DIGEST_ALGO_TIGER );
|
md_enable( md, DIGEST_ALGO_MD5 );
|
||||||
#endif
|
md_enable( md, DIGEST_ALGO_SHA1 );
|
||||||
|
md_enable( md, DIGEST_ALGO_RMD160 );
|
||||||
|
#ifdef WITH_TIGER_HASH
|
||||||
|
md_enable( md, DIGEST_ALGO_TIGER );
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
while( (n=fread( buf, 1, DIM(buf), fp )) )
|
while( (n=fread( buf, 1, DIM(buf), fp )) )
|
||||||
md_write( md, buf, n );
|
md_write( md, buf, n );
|
||||||
if( ferror(fp) )
|
if( ferror(fp) )
|
||||||
log_error("%s: %s\n", fname, strerror(errno) );
|
log_error("%s%s\n", pname, strerror(errno) );
|
||||||
else {
|
else {
|
||||||
md_final(md);
|
md_final(md);
|
||||||
printf( "%s: MD5 =", fname ); print_hex(md_read(md, DIGEST_ALGO_MD5), 16 );
|
if( algo ) {
|
||||||
printf("\n%s: SHA1 =", fname ); print_hex(md_read(md, DIGEST_ALGO_SHA1), 20 );
|
if( fname )
|
||||||
printf("\n%s: RMD160 =", fname ); print_hex(md_read(md, DIGEST_ALGO_RMD160), 20 );
|
fputs( pname, stdout );
|
||||||
#ifdef WITH_TIGER_HASH
|
print_hex(md_read(md, algo), md_digest_length(algo) );
|
||||||
printf("\n%s: TIGER =", fname ); print_hex(md_read(md, DIGEST_ALGO_TIGER), 24 );
|
}
|
||||||
#endif
|
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 );
|
||||||
|
#ifdef WITH_TIGER_HASH
|
||||||
|
printf("\n%s TIGER = ", fname?pname:"" );
|
||||||
|
print_hex(md_read(md, DIGEST_ALGO_TIGER), 24 );
|
||||||
|
#endif
|
||||||
|
}
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
md_close(md);
|
md_close(md);
|
||||||
|
|
||||||
if( fp != stdin )
|
if( fp != stdin )
|
||||||
|
@ -177,12 +177,12 @@ read_block( IOBUF a, compress_filter_context_t *cfx,
|
|||||||
/* make a linked list of all packets */
|
/* make a linked list of all packets */
|
||||||
switch( pkt->pkttype ) {
|
switch( pkt->pkttype ) {
|
||||||
case PKT_COMPRESSED:
|
case PKT_COMPRESSED:
|
||||||
if( pkt->pkt.compressed->algorithm == 1 )
|
if( pkt->pkt.compressed->algorithm < 1
|
||||||
cfx->pgpmode = 1;
|
|| pkt->pkt.compressed->algorithm > 2 ) {
|
||||||
else if( pkt->pkt.compressed->algorithm != 2 ){
|
|
||||||
rc = G10ERR_COMPR_ALGO;
|
rc = G10ERR_COMPR_ALGO;
|
||||||
goto ready;
|
goto ready;
|
||||||
}
|
}
|
||||||
|
cfx->algo = pkt->pkt.compressed->algorithm;
|
||||||
pkt->pkt.compressed->buf = NULL;
|
pkt->pkt.compressed->buf = NULL;
|
||||||
iobuf_push_filter( a, compress_filter, cfx );
|
iobuf_push_filter( a, compress_filter, cfx );
|
||||||
free_packet( pkt );
|
free_packet( pkt );
|
||||||
|
@ -706,7 +706,7 @@ make_keysig_packet( PKT_signature **ret_sig, PKT_public_cert *pkc,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
md = md_open( digest_algo, 0 );
|
md = md_open( digest_algo, 0 );
|
||||||
md_start_debug( md, "make" );
|
/*md_start_debug( md, "make" );*/
|
||||||
|
|
||||||
/* hash the public key certificate and the user id */
|
/* hash the public key certificate and the user id */
|
||||||
hash_public_cert( md, pkc );
|
hash_public_cert( md, pkc );
|
||||||
|
@ -25,6 +25,10 @@
|
|||||||
#include "cipher.h"
|
#include "cipher.h"
|
||||||
#include "keydb.h"
|
#include "keydb.h"
|
||||||
|
|
||||||
|
#define DEFAULT_CIPHER_ALGO CIPHER_ALGO_BLOWFISH
|
||||||
|
#define DEFAULT_PUBKEY_ALGO PUBKEY_ALGO_ELGAMAL
|
||||||
|
#define DEFAULT_DIGEST_ALGO DIGEST_ALGO_RMD160
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int header_okay;
|
int header_okay;
|
||||||
@ -41,6 +45,7 @@ typedef struct {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*-- misc.c --*/
|
/*-- misc.c --*/
|
||||||
|
void trap_unaligned(void);
|
||||||
u16 checksum_u16( unsigned n );
|
u16 checksum_u16( unsigned n );
|
||||||
u16 checksum( byte *p, unsigned n );
|
u16 checksum( byte *p, unsigned n );
|
||||||
u16 checksum_mpi( MPI a );
|
u16 checksum_mpi( MPI a );
|
||||||
|
@ -238,6 +238,7 @@ proc_plaintext( CTX c, PACKET *pkt )
|
|||||||
* textmode filter (sigclass 0x01)
|
* textmode filter (sigclass 0x01)
|
||||||
*/
|
*/
|
||||||
c->mfx.md = md_open( DIGEST_ALGO_RMD160, 0);
|
c->mfx.md = md_open( DIGEST_ALGO_RMD160, 0);
|
||||||
|
md_start_debug(c->mfx.md, "proc_plaintext");
|
||||||
md_enable( c->mfx.md, DIGEST_ALGO_SHA1 );
|
md_enable( c->mfx.md, DIGEST_ALGO_SHA1 );
|
||||||
md_enable( c->mfx.md, DIGEST_ALGO_MD5 );
|
md_enable( c->mfx.md, DIGEST_ALGO_MD5 );
|
||||||
md_enable( c->mfx.md, DIGEST_ALGO_TIGER );
|
md_enable( c->mfx.md, DIGEST_ALGO_TIGER );
|
||||||
|
31
g10/misc.c
31
g10/misc.c
@ -22,10 +22,41 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#if defined(__linux__) && defined(__alpha__)
|
||||||
|
#include <asm/sysinfo.h>
|
||||||
|
#include <asm/unistd.h>
|
||||||
|
#endif
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(__linux__) && defined(__alpha__)
|
||||||
|
#warning using trap_unaligned
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
u16
|
u16
|
||||||
checksum_u16( unsigned n )
|
checksum_u16( unsigned n )
|
||||||
{
|
{
|
||||||
|
@ -39,13 +39,12 @@ struct {
|
|||||||
int def_cipher_algo;
|
int def_cipher_algo;
|
||||||
int def_pubkey_algo;
|
int def_pubkey_algo;
|
||||||
int def_digest_algo;
|
int def_digest_algo;
|
||||||
|
int def_compress_algo;
|
||||||
int no_comment;
|
int no_comment;
|
||||||
int marginals_needed;
|
int marginals_needed;
|
||||||
int completes_needed;
|
int completes_needed;
|
||||||
const char *homedir;
|
const char *homedir;
|
||||||
int skip_verify;
|
int skip_verify;
|
||||||
int reserved14;
|
|
||||||
int reserved15;
|
|
||||||
} opt;
|
} opt;
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#include "ttyio.h"
|
#include "ttyio.h"
|
||||||
#include "cipher.h"
|
#include "cipher.h"
|
||||||
#include "keydb.h"
|
#include "keydb.h"
|
||||||
|
#include "main.h"
|
||||||
|
|
||||||
static int pwfd = -1;
|
static int pwfd = -1;
|
||||||
|
|
||||||
@ -69,10 +70,11 @@ passphrase_to_dek( u32 *keyid, int cipher_algo, STRING2KEY *s2k, int mode )
|
|||||||
s2k = &help_s2k;
|
s2k = &help_s2k;
|
||||||
s2k->mode = 0;
|
s2k->mode = 0;
|
||||||
/* this should be MD5 if cipher is IDEA, but because we do
|
/* this should be MD5 if cipher is IDEA, but because we do
|
||||||
* not have IDEA, we use the default one, the the user
|
* not have IDEA, we use the default one, the user
|
||||||
* can select it from the commandline
|
* can select it from the commandline
|
||||||
*/
|
*/
|
||||||
s2k->hash_algo = opt.def_digest_algo;
|
s2k->hash_algo = opt.def_digest_algo?opt.def_digest_algo
|
||||||
|
:DEFAULT_DIGEST_ALGO;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( keyid && !opt.batch ) {
|
if( keyid && !opt.batch ) {
|
||||||
|
@ -345,7 +345,7 @@ check_key_signature( KBNODE root, KBNODE node, int *is_selfsig )
|
|||||||
|
|
||||||
keyid_from_pkc( pkc, keyid );
|
keyid_from_pkc( pkc, keyid );
|
||||||
md = md_open( algo, 0 );
|
md = md_open( algo, 0 );
|
||||||
md_start_debug(md, "check");
|
/*md_start_debug(md, "check");*/
|
||||||
hash_public_cert( md, pkc );
|
hash_public_cert( md, pkc );
|
||||||
hash_uid_node( unode, md, sig );
|
hash_uid_node( unode, md, sig );
|
||||||
if( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] ) {
|
if( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] ) {
|
||||||
|
50
g10/sign.c
50
g10/sign.c
@ -61,7 +61,17 @@ complete_sig( PKT_signature *sig, PKT_secret_cert *skc, MD_HANDLE md )
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
hash_for(int pubkey_algo )
|
||||||
|
{
|
||||||
|
if( opt.def_digest_algo )
|
||||||
|
return opt.def_digest_algo;
|
||||||
|
if( pubkey_algo == PUBKEY_ALGO_DSA )
|
||||||
|
return DIGEST_ALGO_SHA1;
|
||||||
|
if( pubkey_algo == PUBKEY_ALGO_RSA )
|
||||||
|
return DIGEST_ALGO_MD5;
|
||||||
|
return DEFAULT_DIGEST_ALGO;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -148,7 +158,13 @@ sign_file( STRLIST filenames, int detached, STRLIST locusr,
|
|||||||
/* prepare to calculate the MD over the input */
|
/* prepare to calculate the MD over the input */
|
||||||
if( opt.textmode && !outfile )
|
if( opt.textmode && !outfile )
|
||||||
iobuf_push_filter( inp, text_filter, &tfx );
|
iobuf_push_filter( inp, text_filter, &tfx );
|
||||||
mfx.md = md_open(opt.def_digest_algo, 0);
|
mfx.md = md_open(0, 0);
|
||||||
|
|
||||||
|
for( skc_rover = skc_list; skc_rover; skc_rover = skc_rover->next ) {
|
||||||
|
PKT_secret_cert *skc = skc_rover->skc;
|
||||||
|
md_enable(mfx.md, hash_for(skc->pubkey_algo));
|
||||||
|
}
|
||||||
|
|
||||||
if( !multifile )
|
if( !multifile )
|
||||||
iobuf_push_filter( inp, md_filter, &mfx );
|
iobuf_push_filter( inp, md_filter, &mfx );
|
||||||
|
|
||||||
@ -174,7 +190,7 @@ sign_file( STRLIST filenames, int detached, STRLIST locusr,
|
|||||||
skc = skc_rover->skc;
|
skc = skc_rover->skc;
|
||||||
ops = m_alloc_clear( sizeof *ops );
|
ops = m_alloc_clear( sizeof *ops );
|
||||||
ops->sig_class = opt.textmode && !outfile ? 0x01 : 0x00;
|
ops->sig_class = opt.textmode && !outfile ? 0x01 : 0x00;
|
||||||
ops->digest_algo = opt.def_digest_algo;
|
ops->digest_algo = hash_for(skc->pubkey_algo);
|
||||||
ops->pubkey_algo = skc->pubkey_algo;
|
ops->pubkey_algo = skc->pubkey_algo;
|
||||||
keyid_from_skc( skc, ops->keyid );
|
keyid_from_skc( skc, ops->keyid );
|
||||||
ops->last = !skc_rover->next;
|
ops->last = !skc_rover->next;
|
||||||
@ -270,6 +286,7 @@ sign_file( STRLIST filenames, int detached, STRLIST locusr,
|
|||||||
sig = m_alloc_clear( sizeof *sig );
|
sig = m_alloc_clear( sizeof *sig );
|
||||||
sig->version = skc->version;
|
sig->version = skc->version;
|
||||||
keyid_from_skc( skc, sig->keyid );
|
keyid_from_skc( skc, sig->keyid );
|
||||||
|
sig->digest_algo = hash_for(skc->pubkey_algo);
|
||||||
sig->pubkey_algo = skc->pubkey_algo;
|
sig->pubkey_algo = skc->pubkey_algo;
|
||||||
sig->timestamp = make_timestamp();
|
sig->timestamp = make_timestamp();
|
||||||
sig->sig_class = opt.textmode && !outfile? 0x01 : 0x00;
|
sig->sig_class = opt.textmode && !outfile? 0x01 : 0x00;
|
||||||
@ -314,11 +331,11 @@ sign_file( STRLIST filenames, int detached, STRLIST locusr,
|
|||||||
md_final( md );
|
md_final( md );
|
||||||
|
|
||||||
if( is_ELGAMAL(sig->pubkey_algo) )
|
if( is_ELGAMAL(sig->pubkey_algo) )
|
||||||
g10_elg_sign( skc, sig, md, opt.def_digest_algo );
|
g10_elg_sign( skc, sig, md, hash_for(sig->pubkey_algo) );
|
||||||
else if( sig->pubkey_algo == PUBKEY_ALGO_DSA )
|
else if( sig->pubkey_algo == PUBKEY_ALGO_DSA )
|
||||||
g10_dsa_sign( skc, sig, md, opt.def_digest_algo );
|
g10_dsa_sign( skc, sig, md, hash_for(sig->pubkey_algo) );
|
||||||
else if( is_RSA(sig->pubkey_algo) )
|
else if( is_RSA(sig->pubkey_algo) )
|
||||||
g10_rsa_sign( skc, sig, md, opt.def_digest_algo );
|
g10_rsa_sign( skc, sig, md, hash_for(sig->pubkey_algo) );
|
||||||
else
|
else
|
||||||
BUG();
|
BUG();
|
||||||
|
|
||||||
@ -432,11 +449,14 @@ clearsign_file( const char *fname, STRLIST locusr, const char *outfile )
|
|||||||
goto leave;
|
goto leave;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* FIXME: This stuff is not correct if mutliplehash algos are used*/
|
||||||
iobuf_writestr(out, "-----BEGIN PGP SIGNED MESSAGE-----\n" );
|
iobuf_writestr(out, "-----BEGIN PGP SIGNED MESSAGE-----\n" );
|
||||||
if( opt.def_digest_algo == DIGEST_ALGO_MD5 )
|
if( (opt.def_digest_algo?opt.def_digest_algo:DEFAULT_DIGEST_ALGO)
|
||||||
|
== DIGEST_ALGO_MD5 )
|
||||||
iobuf_writestr(out, "\n" );
|
iobuf_writestr(out, "\n" );
|
||||||
else {
|
else {
|
||||||
const char *s = digest_algo_to_string(opt.def_digest_algo);
|
const char *s = digest_algo_to_string(opt.def_digest_algo?
|
||||||
|
opt.def_digest_algo:DEFAULT_DIGEST_ALGO);
|
||||||
assert(s);
|
assert(s);
|
||||||
iobuf_writestr(out, "Hash: " );
|
iobuf_writestr(out, "Hash: " );
|
||||||
iobuf_writestr(out, s );
|
iobuf_writestr(out, s );
|
||||||
@ -444,7 +464,12 @@ clearsign_file( const char *fname, STRLIST locusr, const char *outfile )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
textmd = md_open(opt.def_digest_algo, 0);
|
textmd = md_open(0, 0);
|
||||||
|
for( skc_rover = skc_list; skc_rover; skc_rover = skc_rover->next ) {
|
||||||
|
PKT_secret_cert *skc = skc_rover->skc;
|
||||||
|
md_enable(textmd, hash_for(skc->pubkey_algo));
|
||||||
|
}
|
||||||
|
|
||||||
iobuf_push_filter( inp, text_filter, &tfx );
|
iobuf_push_filter( inp, text_filter, &tfx );
|
||||||
rc = write_dash_escaped( inp, out, textmd );
|
rc = write_dash_escaped( inp, out, textmd );
|
||||||
if( rc )
|
if( rc )
|
||||||
@ -467,6 +492,7 @@ clearsign_file( const char *fname, STRLIST locusr, const char *outfile )
|
|||||||
sig = m_alloc_clear( sizeof *sig );
|
sig = m_alloc_clear( sizeof *sig );
|
||||||
sig->version = skc->version;
|
sig->version = skc->version;
|
||||||
keyid_from_skc( skc, sig->keyid );
|
keyid_from_skc( skc, sig->keyid );
|
||||||
|
sig->digest_algo = hash_for(skc->pubkey_algo);
|
||||||
sig->pubkey_algo = skc->pubkey_algo;
|
sig->pubkey_algo = skc->pubkey_algo;
|
||||||
sig->timestamp = make_timestamp();
|
sig->timestamp = make_timestamp();
|
||||||
sig->sig_class = 0x01;
|
sig->sig_class = 0x01;
|
||||||
@ -510,11 +536,11 @@ clearsign_file( const char *fname, STRLIST locusr, const char *outfile )
|
|||||||
md_final( md );
|
md_final( md );
|
||||||
|
|
||||||
if( is_ELGAMAL(sig->pubkey_algo) )
|
if( is_ELGAMAL(sig->pubkey_algo) )
|
||||||
g10_elg_sign( skc, sig, md, opt.def_digest_algo );
|
g10_elg_sign( skc, sig, md, hash_for(sig->pubkey_algo) );
|
||||||
else if( sig->pubkey_algo == PUBKEY_ALGO_DSA )
|
else if( sig->pubkey_algo == PUBKEY_ALGO_DSA )
|
||||||
g10_dsa_sign( skc, sig, md, opt.def_digest_algo );
|
g10_dsa_sign( skc, sig, md, hash_for(sig->pubkey_algo) );
|
||||||
else if( is_RSA(sig->pubkey_algo) )
|
else if( is_RSA(sig->pubkey_algo) )
|
||||||
g10_rsa_sign( skc, sig, md, opt.def_digest_algo );
|
g10_rsa_sign( skc, sig, md, hash_for(sig->pubkey_algo) );
|
||||||
else
|
else
|
||||||
BUG();
|
BUG();
|
||||||
|
|
||||||
|
20
po/de.po
20
po/de.po
@ -94,19 +94,19 @@ msgstr "Widersprechende Kommandos\n"
|
|||||||
|
|
||||||
#: g10/g10.c:57
|
#: g10/g10.c:57
|
||||||
msgid ""
|
msgid ""
|
||||||
"\\vCommands:\n"
|
"@Commands:\n"
|
||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\\vKommandos:\n"
|
"@Kommandos:\n"
|
||||||
" "
|
" "
|
||||||
|
|
||||||
#: g10/g10.c:92
|
#: g10/g10.c:92
|
||||||
msgid ""
|
msgid ""
|
||||||
"\\v\n"
|
"@\n"
|
||||||
"Options:\n"
|
"Options:\n"
|
||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\\v\n"
|
"@\n"
|
||||||
"Optionen:\n"
|
"Optionen:\n"
|
||||||
" "
|
" "
|
||||||
|
|
||||||
@ -176,12 +176,12 @@ msgid "add this keyring to the list of keyrings"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: g10/g10.c:180
|
#: g10/g10.c:180
|
||||||
msgid "make a signature"
|
msgid "|filename|make a signature"
|
||||||
msgstr "Eine Signatur erzeugen"
|
msgstr "|dateiname|Eine Signatur erzeugen"
|
||||||
|
|
||||||
#: g10/g10.c:61
|
#: g10/g10.c:61
|
||||||
msgid "make a clear text signature"
|
msgid "|filename|make a clear text signature"
|
||||||
msgstr "Eine Klartext Signatur erzeugen"
|
msgstr "|dateiname|Eine Klartext Signatur erzeugen"
|
||||||
|
|
||||||
#: g10/g10.c:181
|
#: g10/g10.c:181
|
||||||
msgid "use canonical text mode"
|
msgid "use canonical text mode"
|
||||||
@ -357,7 +357,7 @@ msgstr "Status Informationen auf diesen FD schreiben"
|
|||||||
|
|
||||||
#: g10/g10.c:124
|
#: g10/g10.c:124
|
||||||
msgid ""
|
msgid ""
|
||||||
"\\v\n"
|
"@\n"
|
||||||
"Examples:\n"
|
"Examples:\n"
|
||||||
"\n"
|
"\n"
|
||||||
" -se -r Bob [file] sign and encrypt for user Bob\n"
|
" -se -r Bob [file] sign and encrypt for user Bob\n"
|
||||||
@ -366,7 +366,7 @@ msgid ""
|
|||||||
" -k [userid] show keys\n"
|
" -k [userid] show keys\n"
|
||||||
" -kc [userid] show fingerprint\n"
|
" -kc [userid] show fingerprint\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\\v\n"
|
"@\n"
|
||||||
"Beispiele:\n"
|
"Beispiele:\n"
|
||||||
"\n"
|
"\n"
|
||||||
" -se -r Bob [file] Signieren und verschlüsseln für Benutzer Bob\n"
|
" -se -r Bob [file] Signieren und verschlüsseln für Benutzer Bob\n"
|
||||||
|
12
po/it.po
12
po/it.po
@ -45,10 +45,10 @@ msgstr ""
|
|||||||
|
|
||||||
#: g10/g10.c:57
|
#: g10/g10.c:57
|
||||||
msgid ""
|
msgid ""
|
||||||
"\\vCommands:\n"
|
"@Commands:\n"
|
||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\\vComandi:\n"
|
"@Comandi:\n"
|
||||||
" "
|
" "
|
||||||
|
|
||||||
#: g10/g10.c:60
|
#: g10/g10.c:60
|
||||||
@ -149,11 +149,11 @@ msgstr "stampa tutti i message digests"
|
|||||||
|
|
||||||
#: g10/g10.c:92
|
#: g10/g10.c:92
|
||||||
msgid ""
|
msgid ""
|
||||||
"\\v\n"
|
"@\n"
|
||||||
"Options:\n"
|
"Options:\n"
|
||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\\v\n"
|
"@\n"
|
||||||
"Opzioni:\n"
|
"Opzioni:\n"
|
||||||
" "
|
" "
|
||||||
|
|
||||||
@ -251,7 +251,7 @@ msgstr "seleziona l'algoritmo di message digest predefinito"
|
|||||||
|
|
||||||
#: g10/g10.c:124
|
#: g10/g10.c:124
|
||||||
msgid ""
|
msgid ""
|
||||||
"\\v\n"
|
"@\n"
|
||||||
"Examples:\n"
|
"Examples:\n"
|
||||||
"\n"
|
"\n"
|
||||||
" -se -r Bob [file] sign and encrypt for user Bob\n"
|
" -se -r Bob [file] sign and encrypt for user Bob\n"
|
||||||
@ -260,7 +260,7 @@ msgid ""
|
|||||||
" -k [userid] show keys\n"
|
" -k [userid] show keys\n"
|
||||||
" -kc [userid] show fingerprint\n"
|
" -kc [userid] show fingerprint\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\\v\n"
|
"@\n"
|
||||||
"Esempi:\n"
|
"Esempi:\n"
|
||||||
"\n"
|
"\n"
|
||||||
" -se -r Bob [file] firma e cifra per l'utente Bob\n"
|
" -se -r Bob [file] firma e cifra per l'utente Bob\n"
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
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)
|
Fri May 8 17:06:49 1998 Werner Koch (wk@isil.d.shuttle.de)
|
||||||
|
|
||||||
* errors.c (strerror): New if !HAVE_STRERROR
|
* errors.c (strerror): New if !HAVE_STRERROR
|
||||||
|
@ -521,6 +521,35 @@ set_opt_arg(ARGPARSE_ARGS *arg, unsigned flags, char *s)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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
|
static void
|
||||||
show_help( ARGPARSE_OPTS *opts, unsigned flags )
|
show_help( ARGPARSE_OPTS *opts, unsigned flags )
|
||||||
{
|
{
|
||||||
@ -535,19 +564,19 @@ show_help( ARGPARSE_OPTS *opts, unsigned flags )
|
|||||||
/* get max. length of long options */
|
/* get max. length of long options */
|
||||||
for(i=indent=0; opts[i].short_opt; i++ ) {
|
for(i=indent=0; opts[i].short_opt; i++ ) {
|
||||||
if( opts[i].long_opt )
|
if( opts[i].long_opt )
|
||||||
if( !opts[i].description || *opts[i].description != '\v' )
|
if( !opts[i].description || *opts[i].description != '@' )
|
||||||
if( (j=strlen(opts[i].long_opt)) > indent && j < 35 )
|
if( (j=long_opt_strlen(opts+i)) > indent && j < 35 )
|
||||||
indent = j;
|
indent = j;
|
||||||
}
|
}
|
||||||
/* example: " -v, --verbose Viele Sachen ausgeben" */
|
/* example: " -v, --verbose Viele Sachen ausgeben" */
|
||||||
indent += 10;
|
indent += 10;
|
||||||
if( *opts[0].description != '\v' )
|
if( *opts[0].description != '@' )
|
||||||
puts("Options:");
|
puts("Options:");
|
||||||
for(i=0; opts[i].short_opt; i++ ) {
|
for(i=0; opts[i].short_opt; i++ ) {
|
||||||
s = _( opts[i].description );
|
s = _( opts[i].description );
|
||||||
if( s && *s== '\r' ) /* hide this line */
|
if( s && *s== '@' && !s[1] ) /* hide this line */
|
||||||
continue;
|
continue;
|
||||||
if( s && *s == '\v' ) { /* unindented comment only line */
|
if( s && *s == '@' ) { /* unindented comment only line */
|
||||||
for(s++; *s; s++ ) {
|
for(s++; *s; s++ ) {
|
||||||
if( *s == '\n' ) {
|
if( *s == '\n' ) {
|
||||||
if( s[1] )
|
if( s[1] )
|
||||||
@ -560,17 +589,45 @@ show_help( ARGPARSE_OPTS *opts, unsigned flags )
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( opts[i].short_opt < 256 )
|
j = 3;
|
||||||
|
if( opts[i].short_opt < 256 ) {
|
||||||
printf(" -%c", opts[i].short_opt );
|
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
|
else
|
||||||
fputs(" ", stdout);
|
fputs(" ", stdout);
|
||||||
j = 3;
|
if( opts[i].long_opt ) {
|
||||||
if( opts[i].long_opt )
|
j += printf("%c --%s", opts[i].short_opt < 256?',':' ',
|
||||||
j += printf("%c --%s ", opts[i].short_opt < 256?',':' ',
|
opts[i].long_opt );
|
||||||
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++ )
|
for(;j < indent; j++ )
|
||||||
putchar(' ');
|
putchar(' ');
|
||||||
if( s ) {
|
if( s ) {
|
||||||
|
if( *s && j > indent ) {
|
||||||
|
putchar('\n');
|
||||||
|
for(j=0;j < indent; j++ )
|
||||||
|
putchar(' ');
|
||||||
|
}
|
||||||
for(; *s; s++ ) {
|
for(; *s; s++ ) {
|
||||||
if( *s == '\n' ) {
|
if( *s == '\n' ) {
|
||||||
if( s[1] ) {
|
if( s[1] ) {
|
||||||
|
@ -743,11 +743,6 @@ iobuf_read(IOBUF a, byte *buf, unsigned buflen )
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( a->filter_eof ) {
|
|
||||||
if( DBG_IOBUF )
|
|
||||||
log_debug("iobuf-%d.%d: filter eof in iobuf_read\n", a->no, a->subno );
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
n = 0;
|
n = 0;
|
||||||
do {
|
do {
|
||||||
for( ; n < buflen && a->d.start < a->d.len; n++ )
|
for( ; n < buflen && a->d.start < a->d.len; n++ )
|
||||||
|
@ -93,7 +93,7 @@ POSUB = po
|
|||||||
RANLIB = ranlib
|
RANLIB = ranlib
|
||||||
USE_INCLUDED_LIBINTL = yes
|
USE_INCLUDED_LIBINTL = yes
|
||||||
USE_NLS = yes
|
USE_NLS = yes
|
||||||
VERSION = 0.2.17a
|
VERSION = 0.2.18
|
||||||
ZLIBS =
|
ZLIBS =
|
||||||
l =
|
l =
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user