Allow more hash algorithms with the OpenPGP card.
authorWerner Koch <wk@gnupg.org>
Tue, 28 Sep 2010 08:29:13 +0000 (08:29 +0000)
committerWerner Koch <wk@gnupg.org>
Tue, 28 Sep 2010 08:29:13 +0000 (08:29 +0000)
NEWS
g10/ChangeLog
g10/call-agent.c

diff --git a/NEWS b/NEWS
index 4709142..03c2a0b 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,8 @@ Noteworthy changes in version 2.0.17 (unreleased)
 
  * gpg-agent now tests for a newly created gpg-agent.conf after a HUP.
 
+ * Allow more hash algorithms with the OpenPGP v2 card.
+
 
 Noteworthy changes in version 2.0.16 (2010-07-19)
 -------------------------------------------------
index a560531..322c94c 100644 (file)
@@ -1,3 +1,8 @@
+2010-09-28  Werner Koch  <wk@g10code.com>
+
+       * call-agent.c (hash_algo_option): New.
+       (agent_scd_pksign): Use it.
+
 2010-07-20  Werner Koch  <wk@g10code.com>
 
        * mainproc.c (print_pkenc_list): Print a STATUS_ERROR.  Fixes
index 260cd48..fce8eb0 100644 (file)
@@ -892,6 +892,25 @@ membuf_data_cb (void *opaque, const void *buffer, size_t length)
   return 0;
 }
   
+
+/* Helper returning a command option to describe the used hash
+   algorithm.  See scd/command.c:cmd_pksign.  */
+static const char *
+hash_algo_option (int algo)
+{
+  switch (algo)
+    {
+    case GCRY_MD_RMD160: return "--hash=rmd160";
+    case GCRY_MD_SHA1  : return "--hash=sha1";
+    case GCRY_MD_SHA224: return "--hash=sha224";
+    case GCRY_MD_SHA256: return "--hash=sha256";
+    case GCRY_MD_SHA384: return "--hash=sha384";
+    case GCRY_MD_SHA512: return "--hash=sha512";
+    case GCRY_MD_MD5   : return "--hash=md5";
+    default:             return "";
+    }
+}
+
 /* Send a sign command to the scdaemon via gpg-agent's pass thru
    mechanism. */
 int
@@ -938,8 +957,7 @@ agent_scd_pksign (const char *serialno, int hashalgo,
   else
 #endif
     snprintf (line, DIM(line)-1, "SCD PKSIGN %s%s",
-              hashalgo == GCRY_MD_RMD160? "--hash=rmd160 " : "",
-              serialno);
+              hash_algo_option (hashalgo), serialno);
   line[DIM(line)-1] = 0;
   rc = assuan_transact (agent_ctx, line, membuf_data_cb, &data,
                         default_inq_cb, NULL, NULL, NULL);