mirror of
git://git.gnupg.org/gnupg.git
synced 2024-12-22 10:19:57 +01:00
fix for bug 537 and documentation fixes.
This commit is contained in:
parent
da5efeb143
commit
7925e747d0
@ -1,3 +1,9 @@
|
|||||||
|
2006-10-02 Werner Koch <wk@g10code.com>
|
||||||
|
|
||||||
|
* README: Add information about the forthcoming GnuPG 2.0.
|
||||||
|
|
||||||
|
* configure.ac (AB_INIT): New.
|
||||||
|
|
||||||
2006-09-28 David Shaw <dshaw@jabberwocky.com>
|
2006-09-28 David Shaw <dshaw@jabberwocky.com>
|
||||||
|
|
||||||
* configure.ac: Move strsep to AC_REPLACE_FUNCS so it will end up
|
* configure.ac: Move strsep to AC_REPLACE_FUNCS so it will end up
|
||||||
|
3
NEWS
3
NEWS
@ -1,6 +1,9 @@
|
|||||||
Noteworthy changes in version 1.4.6
|
Noteworthy changes in version 1.4.6
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
|
||||||
|
* Fixed a bug while decrypting certain compressed and encrypted
|
||||||
|
messages. See http://bugs.gnupg.org/537 .
|
||||||
|
|
||||||
|
|
||||||
Noteworthy changes in version 1.4.5 (2006-08-01)
|
Noteworthy changes in version 1.4.5 (2006-08-01)
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
21
README
21
README
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
GnuPG - The GNU Privacy Guard
|
GnuPG - The GNU Privacy Guard
|
||||||
-------------------------------
|
-------------------------------
|
||||||
Version 1.4.5
|
Version 1.4.6
|
||||||
|
|
||||||
Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
||||||
2005, 2006 Free Software Foundation, Inc.
|
2005, 2006 Free Software Foundation, Inc.
|
||||||
@ -748,17 +748,18 @@
|
|||||||
and BZ2) are universal.
|
and BZ2) are universal.
|
||||||
|
|
||||||
|
|
||||||
GnuPG 1.4 and GnuPG 1.9
|
GnuPG 1.4 and GnuPG 2.0
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
GnuPG 1.4 is the stable version of GnuPG; GnuPG 1.9 is the
|
GnuPG 2.0 is a newer version of GnuPG with additional support for
|
||||||
development branch. However, large parts of GnuPG 1.9 are also
|
S/MIME. It has a different design philosophy that splits
|
||||||
considered to be stable and useful. In particular the tools
|
functionality up into several modules. Both versions may be
|
||||||
"gpg-agent" (private key operations and passphrase caching) and
|
installed simultaneously without any conflict (gpg is called gpg2
|
||||||
"gpgsm" (S/MIME cousin of "gpg") are considered stable. Both
|
in GnuPG 2). In fact, the gpg version from GnuPG 1.4 is able to
|
||||||
packages (1.4.x and 1.9.x) may be installed at the same time and
|
make use of the gpg-agent as included in GnuPG 2 and allows for
|
||||||
it is actually suggested to do this if you need S/MIME support or
|
seamless passphrase caching. The advantage of GnupG 1.4 is its
|
||||||
want to make use of gpg-agent.
|
smaller size and no dependency on other modules at run and build
|
||||||
|
time.
|
||||||
|
|
||||||
|
|
||||||
How to Get More Information
|
How to Get More Information
|
||||||
|
@ -43,6 +43,7 @@ AC_CONFIG_AUX_DIR(scripts)
|
|||||||
AC_CONFIG_SRCDIR(g10/gpg.c)
|
AC_CONFIG_SRCDIR(g10/gpg.c)
|
||||||
AC_CANONICAL_HOST
|
AC_CANONICAL_HOST
|
||||||
AM_INIT_AUTOMAKE([std-options])
|
AM_INIT_AUTOMAKE([std-options])
|
||||||
|
AB_INIT
|
||||||
AM_CONFIG_HEADER(config.h)
|
AM_CONFIG_HEADER(config.h)
|
||||||
|
|
||||||
AC_GNU_SOURCE
|
AC_GNU_SOURCE
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2006-10-02 Werner Koch <wk@g10code.com>
|
||||||
|
|
||||||
|
* encr-data.c (decrypt_data, mdc_decode_filter): Check the MDC
|
||||||
|
right here and don't let parse-packet handle the MDC.
|
||||||
|
|
||||||
2006-08-21 Werner Koch <wk@g10code.com>
|
2006-08-21 Werner Koch <wk@g10code.com>
|
||||||
|
|
||||||
* skclist.c (is_insecure): Also test for uppercase version of the
|
* skclist.c (is_insecure): Also test for uppercase version of the
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
/* encr-data.c - process an encrypted data packet
|
/* encr-data.c - process an encrypted data packet
|
||||||
* Copyright (C) 1998, 1999, 2000, 2001, 2005 Free Software Foundation, Inc.
|
* Copyright (C) 1998, 1999, 2000, 2001, 2005,
|
||||||
|
* 2006 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This file is part of GnuPG.
|
* This file is part of GnuPG.
|
||||||
*
|
*
|
||||||
@ -41,7 +42,7 @@ static int decode_filter( void *opaque, int control, IOBUF a,
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
CIPHER_HANDLE cipher_hd;
|
CIPHER_HANDLE cipher_hd;
|
||||||
MD_HANDLE mdc_hash;
|
MD_HANDLE mdc_hash;
|
||||||
char defer[20];
|
char defer[22];
|
||||||
int defer_filled;
|
int defer_filled;
|
||||||
int eof_seen;
|
int eof_seen;
|
||||||
} decode_filter_ctx_t;
|
} decode_filter_ctx_t;
|
||||||
@ -146,12 +147,30 @@ decrypt_data( void *procctx, PKT_encrypted *ed, DEK *dek )
|
|||||||
if( ed->mdc_method && dfx.eof_seen == 2 )
|
if( ed->mdc_method && dfx.eof_seen == 2 )
|
||||||
rc = G10ERR_INVALID_PACKET;
|
rc = G10ERR_INVALID_PACKET;
|
||||||
else if( ed->mdc_method ) { /* check the mdc */
|
else if( ed->mdc_method ) { /* check the mdc */
|
||||||
|
/* We used to let parse-packet.c handle the MDC packet but
|
||||||
|
this turned out to be a problem with compressed packets:
|
||||||
|
With old style packets there is no length information
|
||||||
|
available and the decompressor uses an implicit end.
|
||||||
|
However we can't know this implicit end beforehand (:-) and
|
||||||
|
thus may feed the decompressor with more bytes than
|
||||||
|
actually needed. It would be possible to unread the extra
|
||||||
|
bytes but due to our weird iobuf system any unread is non
|
||||||
|
reliable due to filters already popped off. The easy and
|
||||||
|
sane solution is to care about the MDC packet only here and
|
||||||
|
never pass it to the packet parser. Fortunatley the
|
||||||
|
OpenPGP spec requires a strict format for the MDC packet so
|
||||||
|
that we know that 22 bytes are appended. */
|
||||||
int datalen = md_digest_length( ed->mdc_method );
|
int datalen = md_digest_length( ed->mdc_method );
|
||||||
|
|
||||||
cipher_decrypt( dfx.cipher_hd, dfx.defer, dfx.defer, 20);
|
cipher_decrypt( dfx.cipher_hd, dfx.defer, dfx.defer, 22);
|
||||||
|
md_write (dfx.mdc_hash, dfx.defer, 2);
|
||||||
md_final( dfx.mdc_hash );
|
md_final( dfx.mdc_hash );
|
||||||
if( datalen != 20
|
if (dfx.defer[0] != '\xd3' || dfx.defer[1] != '\x14' ) {
|
||||||
|| memcmp(md_read( dfx.mdc_hash, 0 ), dfx.defer, datalen) )
|
log_error("mdc_packet with invalid encoding\n");
|
||||||
|
rc = G10ERR_INVALID_PACKET;
|
||||||
|
}
|
||||||
|
else if ( datalen != 20
|
||||||
|
|| memcmp(md_read( dfx.mdc_hash, 0 ), dfx.defer+2, datalen) )
|
||||||
rc = G10ERR_BAD_SIGN;
|
rc = G10ERR_BAD_SIGN;
|
||||||
/*log_hexdump("MDC calculated:", md_read( dfx.mdc_hash, 0), datalen);*/
|
/*log_hexdump("MDC calculated:", md_read( dfx.mdc_hash, 0), datalen);*/
|
||||||
/*log_hexdump("MDC message :", dfx.defer, 20);*/
|
/*log_hexdump("MDC message :", dfx.defer, 20);*/
|
||||||
@ -182,23 +201,23 @@ mdc_decode_filter( void *opaque, int control, IOBUF a,
|
|||||||
}
|
}
|
||||||
else if( control == IOBUFCTRL_UNDERFLOW ) {
|
else if( control == IOBUFCTRL_UNDERFLOW ) {
|
||||||
assert(a);
|
assert(a);
|
||||||
assert( size > 40 );
|
assert( size > 44 );
|
||||||
|
|
||||||
/* get at least 20 bytes and put it somewhere ahead in the buffer */
|
/* get at least 20 bytes and put it somewhere ahead in the buffer */
|
||||||
for(n=20; n < 40 ; n++ ) {
|
for(n=22; n < 44 ; n++ ) {
|
||||||
if( (c = iobuf_get(a)) == -1 )
|
if( (c = iobuf_get(a)) == -1 )
|
||||||
break;
|
break;
|
||||||
buf[n] = c;
|
buf[n] = c;
|
||||||
}
|
}
|
||||||
if( n == 40 ) {
|
if( n == 44 ) {
|
||||||
/* we have enough stuff - flush the deferred stuff */
|
/* we have enough stuff - flush the deferred stuff */
|
||||||
/* (we have asserted that the buffer is large enough) */
|
/* (we have asserted that the buffer is large enough) */
|
||||||
if( !dfx->defer_filled ) { /* the first time */
|
if( !dfx->defer_filled ) { /* the first time */
|
||||||
memcpy(buf, buf+20, 20 );
|
memcpy(buf, buf+22, 22 );
|
||||||
n = 20;
|
n = 22;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
memcpy(buf, dfx->defer, 20 );
|
memcpy(buf, dfx->defer, 22 );
|
||||||
}
|
}
|
||||||
/* now fill up */
|
/* now fill up */
|
||||||
for(; n < size; n++ ) {
|
for(; n < size; n++ ) {
|
||||||
@ -206,22 +225,22 @@ mdc_decode_filter( void *opaque, int control, IOBUF a,
|
|||||||
break;
|
break;
|
||||||
buf[n] = c;
|
buf[n] = c;
|
||||||
}
|
}
|
||||||
/* move the last 20 bytes back to the defer buffer */
|
/* Move the last 22 bytes back to the defer buffer. */
|
||||||
/* (okay, we are wasting 20 bytes of supplied buffer) */
|
/* (okay, we are wasting 22 bytes of supplied buffer) */
|
||||||
n -= 20;
|
n -= 22;
|
||||||
memcpy( dfx->defer, buf+n, 20 );
|
memcpy( dfx->defer, buf+n, 22 );
|
||||||
dfx->defer_filled = 1;
|
dfx->defer_filled = 1;
|
||||||
}
|
}
|
||||||
else if( !dfx->defer_filled ) { /* eof seen buf empty defer */
|
else if( !dfx->defer_filled ) { /* eof seen buf empty defer */
|
||||||
/* this is bad because there is an incomplete hash */
|
/* this is bad because there is an incomplete hash */
|
||||||
n -= 20;
|
n -= 22;
|
||||||
memcpy(buf, buf+20, n );
|
memcpy(buf, buf+22, n );
|
||||||
dfx->eof_seen = 2; /* eof with incomplete hash */
|
dfx->eof_seen = 2; /* eof with incomplete hash */
|
||||||
}
|
}
|
||||||
else { /* eof seen */
|
else { /* eof seen */
|
||||||
memcpy(buf, dfx->defer, 20 );
|
memcpy (buf, dfx->defer, 22 );
|
||||||
n -= 20;
|
n -= 22;
|
||||||
memcpy( dfx->defer, buf+n, 20 );
|
memcpy( dfx->defer, buf+n, 22 );
|
||||||
dfx->eof_seen = 1; /* normal eof */
|
dfx->eof_seen = 1; /* normal eof */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
2006-10-02 Werner Koch <wk@g10code.com>
|
||||||
|
|
||||||
|
* autobuild.m4: New.
|
||||||
|
|
||||||
2006-07-12 David Shaw <dshaw@jabberwocky.com>
|
2006-07-12 David Shaw <dshaw@jabberwocky.com>
|
||||||
|
|
||||||
* tar-ustar.m4: Use dd instead of strings as it's more likely to
|
* tar-ustar.m4: Use dd instead of strings as it's more likely to
|
||||||
|
@ -6,5 +6,6 @@ EXTRA_DIST = intmax.m4 longdouble.m4 longlong.m4 printf-posix.m4 \
|
|||||||
po.m4 progtest.m4 stdint_h.m4 uintmax_t.m4 ulonglong.m4 \
|
po.m4 progtest.m4 stdint_h.m4 uintmax_t.m4 ulonglong.m4 \
|
||||||
readline.m4 libcurl.m4 libusb.m4 tar-ustar.m4 \
|
readline.m4 libcurl.m4 libusb.m4 tar-ustar.m4 \
|
||||||
ldap.m4 \
|
ldap.m4 \
|
||||||
noexecstack.m4
|
noexecstack.m4 autobuild.m4
|
||||||
|
|
||||||
|
|
||||||
|
34
m4/autobuild.m4
Normal file
34
m4/autobuild.m4
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
# autobuild.m4 serial 2 (autobuild-3.3)
|
||||||
|
# Copyright (C) 2004 Simon Josefsson
|
||||||
|
#
|
||||||
|
# This file is free software, distributed under the terms of the GNU
|
||||||
|
# General Public License. As a special exception to the GNU General
|
||||||
|
# Public License, this file may be distributed as part of a program
|
||||||
|
# that contains a configuration script generated by Autoconf, under
|
||||||
|
# the same distribution terms as the rest of that program.
|
||||||
|
#
|
||||||
|
# This file can can be used in projects which are not available under
|
||||||
|
# the GNU General Public License or the GNU Library General Public
|
||||||
|
# License but which still want to provide support for Autobuild.
|
||||||
|
|
||||||
|
# Usage: AB_INIT([MODE]).
|
||||||
|
AC_DEFUN([AB_INIT],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([AC_CANONICAL_BUILD])
|
||||||
|
AC_REQUIRE([AC_CANONICAL_HOST])
|
||||||
|
|
||||||
|
AC_MSG_NOTICE([autobuild project... ${PACKAGE_NAME:-$PACKAGE}])
|
||||||
|
AC_MSG_NOTICE([autobuild revision... ${PACKAGE_VERSION:-$VERSION}])
|
||||||
|
hostname=`hostname`
|
||||||
|
if test "$hostname"; then
|
||||||
|
AC_MSG_NOTICE([autobuild hostname... $hostname])
|
||||||
|
fi
|
||||||
|
ifelse([$1],[],,[AC_MSG_NOTICE([autobuild mode... $1])])
|
||||||
|
date=`date +%Y%m%d-%H%M%S`
|
||||||
|
if test "$?" != 0; then
|
||||||
|
date=`date`
|
||||||
|
fi
|
||||||
|
if test "$date"; then
|
||||||
|
AC_MSG_NOTICE([autobuild timestamp... $date])
|
||||||
|
fi
|
||||||
|
])
|
Loading…
x
Reference in New Issue
Block a user