mirror of
git://git.gnupg.org/gnupg.git
synced 2025-04-17 15:44:34 +02:00
gpg: Disable an MD5 workaround for pgp2 by default.
* g10/sig-check.c (do_check): Move some code to ... * g10/misc.c (print_md5_rejected_note): new function. * g10/mainproc.c (proc_tree, proc_plaintext): Enable MD5 workaround only if option --allow-weak-digest-algos is used.
This commit is contained in:
parent
2b8d8369d5
commit
ae29b52119
@ -74,6 +74,7 @@ extern int g10_errors_seen;
|
|||||||
void print_pubkey_algo_note (pubkey_algo_t algo);
|
void print_pubkey_algo_note (pubkey_algo_t algo);
|
||||||
void print_cipher_algo_note (cipher_algo_t algo);
|
void print_cipher_algo_note (cipher_algo_t algo);
|
||||||
void print_digest_algo_note (digest_algo_t algo);
|
void print_digest_algo_note (digest_algo_t algo);
|
||||||
|
void print_md5_rejected_note (void);
|
||||||
|
|
||||||
/*-- armor.c --*/
|
/*-- armor.c --*/
|
||||||
char *make_radix64_string( const byte *data, size_t len );
|
char *make_radix64_string( const byte *data, size_t len );
|
||||||
|
@ -694,7 +694,8 @@ proc_plaintext( CTX c, PACKET *pkt )
|
|||||||
gcry_md_enable( c->mfx.md, DIGEST_ALGO_SHA1 );
|
gcry_md_enable( c->mfx.md, DIGEST_ALGO_SHA1 );
|
||||||
gcry_md_enable( c->mfx.md, DIGEST_ALGO_MD5 );
|
gcry_md_enable( c->mfx.md, DIGEST_ALGO_MD5 );
|
||||||
}
|
}
|
||||||
if( opt.pgp2_workarounds && only_md5 && !opt.skip_verify ) {
|
if (opt.pgp2_workarounds && only_md5 && !opt.skip_verify
|
||||||
|
&& opt.flags.allow_weak_digest_algos) {
|
||||||
/* This is a kludge to work around a bug in pgp2. It does only
|
/* 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
|
* catch those mails which are armored. To catch the non-armored
|
||||||
* pgp mails we could see whether there is the signature packet
|
* pgp mails we could see whether there is the signature packet
|
||||||
@ -2132,7 +2133,8 @@ proc_tree( CTX c, KBNODE node )
|
|||||||
if( !opt.pgp2_workarounds )
|
if( !opt.pgp2_workarounds )
|
||||||
;
|
;
|
||||||
else if( sig->digest_algo == DIGEST_ALGO_MD5
|
else if( sig->digest_algo == DIGEST_ALGO_MD5
|
||||||
&& is_RSA( sig->pubkey_algo ) ) {
|
&& is_RSA( sig->pubkey_algo)
|
||||||
|
&& opt.flags.allow_weak_digest_algos) {
|
||||||
/* enable a workaround for a pgp2 bug */
|
/* enable a workaround for a pgp2 bug */
|
||||||
if (gcry_md_open (&c->mfx.md2, DIGEST_ALGO_MD5, 0))
|
if (gcry_md_open (&c->mfx.md2, DIGEST_ALGO_MD5, 0))
|
||||||
BUG ();
|
BUG ();
|
||||||
@ -2145,16 +2147,17 @@ proc_tree( CTX c, KBNODE node )
|
|||||||
if (gcry_md_open (&c->mfx.md2, sig->digest_algo, 0 ))
|
if (gcry_md_open (&c->mfx.md2, sig->digest_algo, 0 ))
|
||||||
BUG ();
|
BUG ();
|
||||||
}
|
}
|
||||||
#if 0 /* workaround disabled */
|
|
||||||
/* Here we have another hack to work around a pgp 2 bug
|
/* Here we used to have another hack to work around a pgp
|
||||||
* It works by not using the textmode for detached signatures;
|
* 2 bug: It worked by not using the textmode for detached
|
||||||
* this will let the first signature check (on md) fail
|
* signatures; this would let the first signature check
|
||||||
* but the second one (on md2) which adds an extra CR should
|
* (on md) fail but the second one (on md2), which adds an
|
||||||
* then produce the "correct" hash. This is very, very ugly
|
* extra CR would then have produced the "correct" hash.
|
||||||
* hack but it may help in some cases (and break others)
|
* This is very, very ugly hack but it may haved help in
|
||||||
*/
|
* some cases (and break others).
|
||||||
/* c->mfx.md2? 0 :(sig->sig_class == 0x01) */
|
* c->mfx.md2? 0 :(sig->sig_class == 0x01)
|
||||||
#endif
|
*/
|
||||||
|
|
||||||
if ( DBG_HASHING ) {
|
if ( DBG_HASHING ) {
|
||||||
gcry_md_debug( c->mfx.md, "verify" );
|
gcry_md_debug( c->mfx.md, "verify" );
|
||||||
if ( c->mfx.md2 )
|
if ( c->mfx.md2 )
|
||||||
|
15
g10/misc.c
15
g10/misc.c
@ -342,6 +342,21 @@ print_digest_algo_note (digest_algo_t algo)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
print_md5_rejected_note (void)
|
||||||
|
{
|
||||||
|
static int shown;
|
||||||
|
|
||||||
|
if (!shown)
|
||||||
|
{
|
||||||
|
log_info
|
||||||
|
(_("Note: signatures using the %s algorithm are rejected\n"),
|
||||||
|
"MD5");
|
||||||
|
shown = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Map OpenPGP algo numbers to those used by Libgcrypt. We need to do
|
/* Map OpenPGP algo numbers to those used by Libgcrypt. We need to do
|
||||||
this for algorithms we implemented in Libgcrypt after they become
|
this for algorithms we implemented in Libgcrypt after they become
|
||||||
part of OpenPGP. */
|
part of OpenPGP. */
|
||||||
|
@ -269,16 +269,7 @@ do_check( PKT_public_key *pk, PKT_signature *sig, gcry_md_hd_t digest,
|
|||||||
if (sig->digest_algo == GCRY_MD_MD5
|
if (sig->digest_algo == GCRY_MD_MD5
|
||||||
&& !opt.flags.allow_weak_digest_algos)
|
&& !opt.flags.allow_weak_digest_algos)
|
||||||
{
|
{
|
||||||
static int shown;
|
print_md5_rejected_note ();
|
||||||
|
|
||||||
if (!shown)
|
|
||||||
{
|
|
||||||
log_info
|
|
||||||
(_("Note: signatures using the %s algorithm are rejected\n"),
|
|
||||||
"MD5");
|
|
||||||
shown = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return GPG_ERR_DIGEST_ALGO;
|
return GPG_ERR_DIGEST_ALGO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user