mirror of
git://git.gnupg.org/gnupg.git
synced 2025-02-08 17:43:04 +01:00
Fixed nasty Hash bug
This commit is contained in:
parent
f0b82cd352
commit
ec742b7f58
4
NEWS
4
NEWS
@ -34,6 +34,10 @@
|
|||||||
|
|
||||||
* Keyserver support for the W32 version.
|
* Keyserver support for the W32 version.
|
||||||
|
|
||||||
|
* Corrected hash calculation for some inputs greater 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.
|
||||||
|
|
||||||
|
|
||||||
Noteworthy changes in version 1.0.4 (2000-10-17)
|
Noteworthy changes in version 1.0.4 (2000-10-17)
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
1
THANKS
1
THANKS
@ -165,6 +165,7 @@ Werner Koch wk@gnupg.org
|
|||||||
Wim Vandeputte bunbun@reptile.rug.ac.be
|
Wim Vandeputte bunbun@reptile.rug.ac.be
|
||||||
Yosiaki IIDA iida@ring.gr.jp
|
Yosiaki IIDA iida@ring.gr.jp
|
||||||
Yoshihiro Kajiki kajiki@ylug.org
|
Yoshihiro Kajiki kajiki@ylug.org
|
||||||
|
disastry@saiknes.lv
|
||||||
nbecker@hns.com
|
nbecker@hns.com
|
||||||
|
|
||||||
Thanks to the German Unix User Group for providing FTP space,
|
Thanks to the German Unix User Group for providing FTP space,
|
||||||
|
@ -1,3 +1,12 @@
|
|||||||
|
2001-03-28 Werner Koch <wk@gnupg.org>
|
||||||
|
|
||||||
|
* md5.c (md5_final): Fixed calculation of hashed length. Thanks
|
||||||
|
to disastry@saiknes.lv for pointing out that it was horrible wrong
|
||||||
|
for more than 512MB of input.
|
||||||
|
* sha1.c (sha1_final): Ditto.
|
||||||
|
* rmd160.c (rmd160_final): Ditto.
|
||||||
|
* tiger.c (tiger_final): Ditto.
|
||||||
|
|
||||||
2001-03-19 Werner Koch <wk@gnupg.org>
|
2001-03-19 Werner Koch <wk@gnupg.org>
|
||||||
|
|
||||||
* blowfish.c (encrypt,do_encrypt): Changed name to do_encrypt to
|
* blowfish.c (encrypt,do_encrypt): Changed name to do_encrypt to
|
||||||
|
17
cipher/md5.c
17
cipher/md5.c
@ -258,18 +258,19 @@ md5_final( MD5_CONTEXT *hd )
|
|||||||
|
|
||||||
md5_write(hd, NULL, 0); /* flush */;
|
md5_write(hd, NULL, 0); /* flush */;
|
||||||
|
|
||||||
msb = 0;
|
|
||||||
t = hd->nblocks;
|
t = hd->nblocks;
|
||||||
if( (lsb = t << 6) < t ) /* multiply by 64 to make a byte count */
|
/* multiply by 64 to make a byte count */
|
||||||
msb++;
|
lsb = t << 6;
|
||||||
msb += t >> 26;
|
msb = t >> 26;
|
||||||
|
/* add the count */
|
||||||
t = lsb;
|
t = lsb;
|
||||||
if( (lsb = t + hd->count) < t ) /* add the count */
|
if( (lsb += hd->count) < t )
|
||||||
msb++;
|
msb++;
|
||||||
|
/* multiply by 8 to make a bit count */
|
||||||
t = lsb;
|
t = lsb;
|
||||||
if( (lsb = t << 3) < t ) /* multiply by 8 to make a bit count */
|
lsb <<= 3;
|
||||||
msb++;
|
msb <<= 3;
|
||||||
msb += t >> 29;
|
msb |= t >> 29;
|
||||||
|
|
||||||
if( hd->count < 56 ) { /* enough room */
|
if( hd->count < 56 ) { /* enough room */
|
||||||
hd->buf[hd->count++] = 0x80; /* pad */
|
hd->buf[hd->count++] = 0x80; /* pad */
|
||||||
|
@ -461,18 +461,19 @@ rmd160_final( RMD160_CONTEXT *hd )
|
|||||||
|
|
||||||
rmd160_write(hd, NULL, 0); /* flush */;
|
rmd160_write(hd, NULL, 0); /* flush */;
|
||||||
|
|
||||||
msb = 0;
|
|
||||||
t = hd->nblocks;
|
t = hd->nblocks;
|
||||||
if( (lsb = t << 6) < t ) /* multiply by 64 to make a byte count */
|
/* multiply by 64 to make a byte count */
|
||||||
msb++;
|
lsb = t << 6;
|
||||||
msb += t >> 26;
|
msb = t >> 26;
|
||||||
|
/* add the count */
|
||||||
t = lsb;
|
t = lsb;
|
||||||
if( (lsb = t + hd->count) < t ) /* add the count */
|
if( (lsb += hd->count) < t )
|
||||||
msb++;
|
msb++;
|
||||||
|
/* multiply by 8 to make a bit count */
|
||||||
t = lsb;
|
t = lsb;
|
||||||
if( (lsb = t << 3) < t ) /* multiply by 8 to make a bit count */
|
lsb <<= 3;
|
||||||
msb++;
|
msb <<= 3;
|
||||||
msb += t >> 29;
|
msb |= t >> 29;
|
||||||
|
|
||||||
if( hd->count < 56 ) { /* enough room */
|
if( hd->count < 56 ) { /* enough room */
|
||||||
hd->buf[hd->count++] = 0x80; /* pad */
|
hd->buf[hd->count++] = 0x80; /* pad */
|
||||||
|
@ -254,18 +254,19 @@ sha1_final(SHA1_CONTEXT *hd)
|
|||||||
|
|
||||||
sha1_write(hd, NULL, 0); /* flush */;
|
sha1_write(hd, NULL, 0); /* flush */;
|
||||||
|
|
||||||
msb = 0;
|
|
||||||
t = hd->nblocks;
|
t = hd->nblocks;
|
||||||
if( (lsb = t << 6) < t ) /* multiply by 64 to make a byte count */
|
/* multiply by 64 to make a byte count */
|
||||||
msb++;
|
lsb = t << 6;
|
||||||
msb += t >> 26;
|
msb = t >> 26;
|
||||||
|
/* add the count */
|
||||||
t = lsb;
|
t = lsb;
|
||||||
if( (lsb = t + hd->count) < t ) /* add the count */
|
if( (lsb += hd->count) < t )
|
||||||
msb++;
|
msb++;
|
||||||
|
/* multiply by 8 to make a bit count */
|
||||||
t = lsb;
|
t = lsb;
|
||||||
if( (lsb = t << 3) < t ) /* multiply by 8 to make a bit count */
|
lsb <<= 3;
|
||||||
msb++;
|
msb <<= 3;
|
||||||
msb += t >> 29;
|
msb |= t >> 29;
|
||||||
|
|
||||||
if( hd->count < 56 ) { /* enough room */
|
if( hd->count < 56 ) { /* enough room */
|
||||||
hd->buf[hd->count++] = 0x80; /* pad */
|
hd->buf[hd->count++] = 0x80; /* pad */
|
||||||
|
@ -805,18 +805,19 @@ tiger_final( TIGER_CONTEXT *hd )
|
|||||||
|
|
||||||
tiger_write(hd, NULL, 0); /* flush */;
|
tiger_write(hd, NULL, 0); /* flush */;
|
||||||
|
|
||||||
msb = 0;
|
|
||||||
t = hd->nblocks;
|
t = hd->nblocks;
|
||||||
if( (lsb = t << 6) < t ) /* multiply by 64 to make a byte count */
|
/* multiply by 64 to make a byte count */
|
||||||
msb++;
|
lsb = t << 6;
|
||||||
msb += t >> 26;
|
msb = t >> 26;
|
||||||
|
/* add the count */
|
||||||
t = lsb;
|
t = lsb;
|
||||||
if( (lsb = t + hd->count) < t ) /* add the count */
|
if( (lsb += hd->count) < t )
|
||||||
msb++;
|
msb++;
|
||||||
|
/* multiply by 8 to make a bit count */
|
||||||
t = lsb;
|
t = lsb;
|
||||||
if( (lsb = t << 3) < t ) /* multiply by 8 to make a bit count */
|
lsb <<= 3;
|
||||||
msb++;
|
msb <<= 3;
|
||||||
msb += t >> 29;
|
msb |= t >> 29;
|
||||||
|
|
||||||
if( hd->count < 56 ) { /* enough room */
|
if( hd->count < 56 ) { /* enough room */
|
||||||
hd->buf[hd->count++] = 0x01; /* pad */
|
hd->buf[hd->count++] = 0x01; /* pad */
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
2001-03-28 Werner Koch <wk@gnupg.org>
|
||||||
|
|
||||||
|
* mainproc.c (do_check_sig): Allow direct key and subkey
|
||||||
|
revocation signature.
|
||||||
|
* sig-check.c (check_key_signature2): Check direct key signatures.
|
||||||
|
Print the signature class along with an error.
|
||||||
|
|
||||||
2001-03-27 Werner Koch <wk@gnupg.org>
|
2001-03-27 Werner Koch <wk@gnupg.org>
|
||||||
|
|
||||||
* packet.h: Add a missing typedef to an enum. Thanks to Stefan Bellon.
|
* packet.h: Add a missing typedef to an enum. Thanks to Stefan Bellon.
|
||||||
|
@ -609,8 +609,10 @@ do_check_sig( CTX c, KBNODE node, int *is_selfsig )
|
|||||||
}
|
}
|
||||||
else if( (sig->sig_class&~3) == 0x10
|
else if( (sig->sig_class&~3) == 0x10
|
||||||
|| sig->sig_class == 0x18
|
|| sig->sig_class == 0x18
|
||||||
|
|| sig->sig_class == 0x1f
|
||||||
|| sig->sig_class == 0x20
|
|| sig->sig_class == 0x20
|
||||||
|| sig->sig_class == 0x30 ) { /* classes 0x10..0x17,0x20,0x30 */
|
|| sig->sig_class == 0x28
|
||||||
|
|| sig->sig_class == 0x30 ) {
|
||||||
if( c->list->pkt->pkttype == PKT_PUBLIC_KEY
|
if( c->list->pkt->pkttype == PKT_PUBLIC_KEY
|
||||||
|| c->list->pkt->pkttype == PKT_PUBLIC_SUBKEY ) {
|
|| c->list->pkt->pkttype == PKT_PUBLIC_SUBKEY ) {
|
||||||
return check_key_signature( c->list, node, is_selfsig );
|
return check_key_signature( c->list, node, is_selfsig );
|
||||||
|
@ -550,7 +550,7 @@ check_key_signature2( KBNODE root, KBNODE node, int *is_selfsig,
|
|||||||
rc = G10ERR_SIG_CLASS;
|
rc = G10ERR_SIG_CLASS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if( sig->sig_class == 0x18 ) {
|
else if( sig->sig_class == 0x18 ) { /* key binding */
|
||||||
KBNODE snode = find_prev_kbnode( root, node, PKT_PUBLIC_SUBKEY );
|
KBNODE snode = find_prev_kbnode( root, node, PKT_PUBLIC_SUBKEY );
|
||||||
|
|
||||||
if( snode ) {
|
if( snode ) {
|
||||||
@ -573,7 +573,14 @@ check_key_signature2( KBNODE root, KBNODE node, int *is_selfsig,
|
|||||||
rc = G10ERR_SIG_CLASS;
|
rc = G10ERR_SIG_CLASS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
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_selfsig_result ( sig, rc );
|
||||||
|
md_close(md);
|
||||||
|
}
|
||||||
|
else { /* all other classes */
|
||||||
KBNODE unode = find_prev_kbnode( root, node, PKT_USER_ID );
|
KBNODE unode = find_prev_kbnode( root, node, PKT_USER_ID );
|
||||||
|
|
||||||
if( unode ) {
|
if( unode ) {
|
||||||
@ -595,7 +602,8 @@ check_key_signature2( KBNODE root, KBNODE node, int *is_selfsig,
|
|||||||
md_close(md);
|
md_close(md);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
log_error("no user ID for key signature packet\n");
|
log_error("no user ID for key signature packet of class %02x\n",
|
||||||
|
sig->sig_class );
|
||||||
rc = G10ERR_SIG_CLASS;
|
rc = G10ERR_SIG_CLASS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user