[Pkg-gnupg-commit] [gnupg2] 50/292: agent: Allow only specific digest size for ECDSA.

Daniel Kahn Gillmor dkg at fifthhorseman.net
Mon Nov 21 06:31:25 UTC 2016


This is an automated email from the git hooks/post-receive script.

dkg pushed a commit to branch master
in repository gnupg2.

commit 98bc6f480ac973dccce90378dc021a2e24e58704
Author: NIIBE Yutaka <gniibe at fsij.org>
Date:   Tue Sep 27 14:01:18 2016 +0900

    agent: Allow only specific digest size for ECDSA.
    
    * agent/pksign.c (do_encode_dsa): Fix validation of digest size.
    
    --
    
    Thanks to Steven Noonan <steven at uplinklabs.net> who offers patches
    and a test case.
    
    GnuPG-bug-id: 2702
    Signed-off-by: NIIBE Yutaka <gniibe at fsij.org>
---
 agent/pksign.c | 22 +++++++++-------------
 1 file changed, 9 insertions(+), 13 deletions(-)

diff --git a/agent/pksign.c b/agent/pksign.c
index 9011be2..17f2704 100644
--- a/agent/pksign.c
+++ b/agent/pksign.c
@@ -189,25 +189,21 @@ do_encode_dsa (const byte *md, size_t mdlen, int pkalgo, gcry_sexp_t pkey,
       return gpg_error (GPG_ERR_INV_LENGTH);
     }
 
+  /* ECDSA 521 is special has it is larger than the largest hash
+     we have (SHA-512).  Thus we chnage the size for further
+     processing to 512.  */
+  if (pkalgo == GCRY_PK_ECDSA && qbits > 512)
+    qbits = 512;
+
   /* Check if we're too short.  Too long is safe as we'll
-   * automatically left-truncate.
-   *
-   * This check would require the use of SHA512 with ECDSA 512. I
-   * think this is overkill to fail in this case.  Therefore, relax
-   * the check, but only for ECDSA keys.  We may need to adjust it
-   * later for general case.  (Note that the check is really a bug for
-   * ECDSA 521 as the only hash that matches it is SHA 512, but 512 <
-   * 521 ).
-   */
-  if (mdlen < ((pkalgo==GCRY_PK_ECDSA && qbits > 521) ? 512 : qbits)/8)
+     automatically left-truncate.  */
+  if (mdlen < qbits/8)
     {
       log_error (_("a %zu bit hash is not valid for a %u bit %s key\n"),
                  mdlen*8,
                  gcry_pk_get_nbits (pkey),
                  gcry_pk_algo_name (pkalgo));
-      /* FIXME: we need to check the requirements for ECDSA.  */
-      if (mdlen < 20 || pkalgo == GCRY_PK_DSA)
-        return gpg_error (GPG_ERR_INV_LENGTH);
+      return gpg_error (GPG_ERR_INV_LENGTH);
     }
 
   /* Truncate.  */

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gnupg/gnupg2.git



More information about the Pkg-gnupg-commit mailing list