gpg: Replace remaining uses of stdio by estream.
[gnupg.git] / g10 / sig-check.c
index 134bcfa..f8ba98b 100644 (file)
@@ -28,7 +28,6 @@
 #include "util.h"
 #include "packet.h"
 #include "keydb.h"
-#include "cipher.h"
 #include "main.h"
 #include "status.h"
 #include "i18n.h"
@@ -78,13 +77,15 @@ signature_check2 (PKT_signature *sig, gcry_md_hd_t digest, u32 *r_expiredate,
           header is missing or does not match the actual sig. */
 
         log_info(_("WARNING: signature digest conflict in message\n"));
-       rc=G10ERR_GENERAL;
+       rc = GPG_ERR_GENERAL;
       }
     else if( get_pubkey( pk, sig->keyid ) )
-       rc = G10ERR_NO_PUBKEY;
+       rc = GPG_ERR_NO_PUBKEY;
     else if(!pk->flags.valid && !pk->flags.primary)
-        rc=G10ERR_BAD_PUBKEY; /* you cannot have a good sig from an
-                                invalid subkey */
+      {
+        /* You cannot have a good sig from an invalid subkey.  */
+        rc = GPG_ERR_BAD_PUBKEY;
+      }
     else
       {
         if(r_expiredate)
@@ -105,18 +106,18 @@ signature_check2 (PKT_signature *sig, gcry_md_hd_t digest, u32 *r_expiredate,
                log_info(_("WARNING: signing subkey %s is not"
                           " cross-certified\n"),keystr_from_pk(pk));
                log_info(_("please see %s for more information\n"),
-                        "http://www.gnupg.org/faq/subkey-cross-certify.html");
+                        "https://gnupg.org/faq/subkey-cross-certify.html");
                /* --require-cross-certification makes this warning an
                      error.  TODO: change the default to require this
                      after more keys have backsigs. */
                if(opt.flags.require_cross_cert)
-                 rc=G10ERR_GENERAL;
+                 rc = GPG_ERR_GENERAL;
              }
            else if(pk->flags.backsig == 1)
              {
                log_info(_("WARNING: signing subkey %s has an invalid"
                           " cross-certification\n"),keystr_from_pk(pk));
-               rc=G10ERR_GENERAL;
+               rc = GPG_ERR_GENERAL;
              }
          }
       }
@@ -212,7 +213,7 @@ do_check_messages( PKT_public_key *pk, PKT_signature *sig,
                 :_("public key %s is %lu seconds newer than the signature\n"),
                 keystr_from_pk(pk),d );
        if( !opt.ignore_time_conflict )
-         return G10ERR_TIME_CONFLICT; /* pubkey newer than signature */
+         return GPG_ERR_TIME_CONFLICT; /* pubkey newer than signature.  */
       }
 
     cur_time = make_timestamp();
@@ -226,7 +227,7 @@ do_check_messages( PKT_public_key *pk, PKT_signature *sig,
                      " in the future (time warp or clock problem)\n"),
                  keystr_from_pk(pk),d );
        if( !opt.ignore_time_conflict )
-         return G10ERR_TIME_CONFLICT;
+         return GPG_ERR_TIME_CONFLICT;
       }
 
     /* Check whether the key has expired.  We check the has_expired
@@ -236,7 +237,7 @@ do_check_messages( PKT_public_key *pk, PKT_signature *sig,
     if( pk->has_expired || (pk->expiredate && pk->expiredate < cur_time)) {
         char buf[11];
         if (opt.verbose)
-         log_info(_("NOTE: signature key %s expired %s\n"),
+         log_info(_("Note: signature key %s expired %s\n"),
                   keystr_from_pk(pk), asctimestamp( pk->expiredate ) );
        sprintf(buf,"%lu",(ulong)pk->expiredate);
        write_status_text(STATUS_KEYEXPIRED,buf);
@@ -247,7 +248,7 @@ do_check_messages( PKT_public_key *pk, PKT_signature *sig,
     if (pk->flags.revoked)
       {
         if (opt.verbose)
-         log_info (_("NOTE: signature key %s has been revoked\n"),
+         log_info (_("Note: signature key %s has been revoked\n"),
                     keystr_from_pk(pk));
         if (r_revoked)
           *r_revoked=1;
@@ -267,6 +268,13 @@ do_check( PKT_public_key *pk, PKT_signature *sig, gcry_md_hd_t digest,
     if( (rc=do_check_messages(pk,sig,r_expired,r_revoked)) )
         return rc;
 
+    if (sig->digest_algo == GCRY_MD_MD5
+        && !opt.flags.allow_weak_digest_algos)
+      {
+        print_md5_rejected_note ();
+        return GPG_ERR_DIGEST_ALGO;
+      }
+
     /* Make sure the digest algo is enabled (in case of a detached
        signature).  */
     gcry_md_enable (digest, sig->digest_algo);
@@ -314,7 +322,7 @@ do_check( PKT_public_key *pk, PKT_signature *sig, gcry_md_hd_t digest,
 
     result = encode_md_value (pk, digest, sig->digest_algo );
     if (!result)
-        return G10ERR_GENERAL;
+        return GPG_ERR_GENERAL;
     rc = pk_verify( pk->pubkey_algo, result, sig->data, pk->pkey );
     gcry_mpi_release (result);
 
@@ -322,7 +330,7 @@ do_check( PKT_public_key *pk, PKT_signature *sig, gcry_md_hd_t digest,
       {
        log_info(_("assuming bad signature from key %s"
                   " due to an unknown critical bit\n"),keystr_from_pk(pk));
-       rc = G10ERR_BAD_SIGN;
+       rc = GPG_ERR_BAD_SIGNATURE;
       }
 
     if(!rc && ret_pk)
@@ -394,7 +402,7 @@ cache_sig_result ( PKT_signature *sig, int result )
    but it matches how PGP does it. -dms */
 
 /* Returns 0 if sig is valid (i.e. pk is revoked), non-0 if not
-   revoked.  It is important that G10ERR_NO_PUBKEY is only returned
+   revoked.  It is important that GPG_ERR_NO_PUBKEY is only returned
    when a revocation signature is from a valid revocation key
    designated in a revkey subpacket, but the revocation key itself
    isn't present. */
@@ -402,7 +410,8 @@ int
 check_revocation_keys(PKT_public_key *pk,PKT_signature *sig)
 {
   static int busy=0;
-  int i,rc=G10ERR_GENERAL;
+  int i;
+  int rc = GPG_ERR_GENERAL;
 
   assert(IS_KEY_REV(sig));
   assert((sig->keyid[0]!=pk->keyid[0]) || (sig->keyid[0]!=pk->keyid[1]));
@@ -418,7 +427,7 @@ check_revocation_keys(PKT_public_key *pk,PKT_signature *sig)
 
   busy=1;
 
-  /*  printf("looking at %08lX with a sig from %08lX\n",(ulong)pk->keyid[1],
+  /*  es_printf("looking at %08lX with a sig from %08lX\n",(ulong)pk->keyid[1],
       (ulong)sig->keyid[1]); */
 
   /* is the issuer of the sig one of our revokers? */
@@ -587,7 +596,7 @@ check_key_signature2( KBNODE root, KBNODE node, PKT_public_key *check_pk,
             if (opt.verbose)
              log_info (_("key %s: no subkey for subkey"
                          " revocation signature\n"),keystr_from_pk(pk));
-           rc = G10ERR_SIG_CLASS;
+           rc = GPG_ERR_SIG_CLASS;
          }
     }
     else if( sig->sig_class == 0x18 ) { /* key binding */
@@ -614,7 +623,7 @@ check_key_signature2( KBNODE root, KBNODE node, PKT_public_key *check_pk,
             if (opt.verbose)
              log_info(_("key %s: no subkey for subkey"
                         " binding signature\n"),keystr_from_pk(pk));
-           rc = G10ERR_SIG_CLASS;
+           rc = GPG_ERR_SIG_CLASS;
          }
     }
     else if( sig->sig_class == 0x1f ) { /* direct key signature */
@@ -655,7 +664,7 @@ check_key_signature2( KBNODE root, KBNODE node, PKT_public_key *check_pk,
             if (!opt.quiet)
              log_info ("key %s: no user ID for key signature packet"
                        " of class %02x\n",keystr_from_pk(pk),sig->sig_class);
-           rc = G10ERR_SIG_CLASS;
+           rc = GPG_ERR_SIG_CLASS;
          }
     }