41 lines
1.2 KiB
Diff
41 lines
1.2 KiB
Diff
--- g10/sig-check.c 2006/08/01 12:23:34 4216
|
|
+++ g10/sig-check.c 2007/05/16 11:10:07 4504
|
|
@@ -438,22 +438,25 @@
|
|
gcry_md_hd_t md;
|
|
int rc;
|
|
|
|
+ /* Always check whether the algorithm is available. Although
|
|
+ gcry_md_open woyuld throw an error, some libgcrypt versions will
|
|
+ print a debug message in that case too. */
|
|
+ if ((rc=openpgp_md_test_algo (backsig->digest_algo)))
|
|
+ return rc;
|
|
+
|
|
if(!opt.no_sig_cache && backsig->flags.checked)
|
|
- {
|
|
- if((rc=openpgp_md_test_algo (backsig->digest_algo)))
|
|
- return rc;
|
|
+ return backsig->flags.valid? 0 : gpg_error (GPG_ERR_BAD_SIGNATURE);
|
|
|
|
- return backsig->flags.valid? 0 : gpg_error (GPG_ERR_BAD_SIGNATURE);
|
|
+ rc = gcry_md_open (&md, backsig->digest_algo,0);
|
|
+ if (!rc)
|
|
+ {
|
|
+ hash_public_key(md,main_pk);
|
|
+ hash_public_key(md,sub_pk);
|
|
+ rc=do_check(sub_pk,backsig,md,NULL,NULL,NULL);
|
|
+ cache_sig_result(backsig,rc);
|
|
+ gcry_md_close(md);
|
|
}
|
|
|
|
- if (gcry_md_open (&md, backsig->digest_algo,0))
|
|
- BUG ();
|
|
- hash_public_key(md,main_pk);
|
|
- hash_public_key(md,sub_pk);
|
|
- rc=do_check(sub_pk,backsig,md,NULL,NULL,NULL);
|
|
- cache_sig_result(backsig,rc);
|
|
- gcry_md_close(md);
|
|
-
|
|
return rc;
|
|
}
|
|
|