Fix last change.
authorWerner Koch <wk@gnupg.org>
Wed, 21 Jan 2009 18:05:24 +0000 (18:05 +0000)
committerWerner Koch <wk@gnupg.org>
Wed, 21 Jan 2009 18:05:24 +0000 (18:05 +0000)
tests/ChangeLog
tests/fipsdrv.c

index 20a450c..5fd9d3d 100644 (file)
@@ -1,5 +1,7 @@
 2009-01-21  Werner Koch  <wk@g10code.com>
 
+       * fipsdrv.c (run_dsa_verify): Use gcry_mpi_scan again.
+
        * fipsdrv.c (run_dsa_verify): Use hash of the data.
 
        * pubkey.c (get_dsa_key_fips186_with_seed_new): New.
index 963788b..06fa348 100644 (file)
@@ -1916,10 +1916,18 @@ run_dsa_verify (const void *data, size_t datalen,
   gpg_error_t err;
   gcry_sexp_t s_data, s_key, s_sig;
   char hash[20];
-  
+  gcry_mpi_t tmpmpi;
+
   gcry_md_hash_buffer (GCRY_MD_SHA1, hash, data, datalen);
-  err = gcry_sexp_build (&s_data, NULL,
-                         "(data (flags raw)(value %b))", 20, hash);
+  /* Note that we can't simply use %b with HASH to build the
+     S-expression, because that might yield a negative value.  */
+  err = gcry_mpi_scan (&tmpmpi, GCRYMPI_FMT_USG, hash, 20, NULL);
+  if (!err)
+    {
+      err = gcry_sexp_build (&s_data, NULL,
+                             "(data (flags raw)(value %m))", tmpmpi);
+      gcry_mpi_release (tmpmpi);
+    }
   if (err)
     die ("gcry_sexp_build failed for DSA data input: %s\n",
          gpg_strerror (err));