* sig-check.c (signature_check2): Sanity check that the md has a context
authorDavid Shaw <dshaw@jabberwocky.com>
Wed, 7 Aug 2002 19:53:27 +0000 (19:53 +0000)
committerDavid Shaw <dshaw@jabberwocky.com>
Wed, 7 Aug 2002 19:53:27 +0000 (19:53 +0000)
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.

g10/ChangeLog
g10/sig-check.c

index 3ab1403..422c2ca 100644 (file)
@@ -1,5 +1,11 @@
 2002-08-07  David Shaw  <dshaw@jabberwocky.com>
 
+       * 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.
index 2430997..8dce3cb 100644 (file)
@@ -63,7 +63,17 @@ signature_check2( PKT_signature *sig, MD_HANDLE digest,
     int rc=0;
 
     *r_expiredate = 0;
-    if( get_pubkey( pk, sig->keyid ) )
+
+    /* 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->main_keyid[0]!=pk->keyid[0] ||