summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2011-01-21 15:22:41 +0100
committerWerner Koch <wk@gnupg.org>2011-01-21 15:22:41 +0100
commit27929981fc23fabecf6af9fa1361361b821bb2fd (patch)
tree480f23530b3835705f5d68f50a412c5126b2b279
parentEditorial changes and allow building with old libgcrypts. (diff)
downloadgnupg2-27929981fc23fabecf6af9fa1361361b821bb2fd.tar.xz
gnupg2-27929981fc23fabecf6af9fa1361361b821bb2fd.zip
Make most of the selftests work.
Note that there is still a problem with tests/openpgp/sigs.test while using the option --digest-algo SHA256.
-rw-r--r--agent/ChangeLog2
-rw-r--r--agent/pksign.c33
-rw-r--r--g10/ChangeLog4
-rw-r--r--g10/misc.c20
-rw-r--r--g10/sign.c3
-rw-r--r--include/ChangeLog2
6 files changed, 29 insertions, 35 deletions
diff --git a/agent/ChangeLog b/agent/ChangeLog
index 699282754..4b0712c8d 100644
--- a/agent/ChangeLog
+++ b/agent/ChangeLog
@@ -1,5 +1,7 @@
2011-01-21 Werner Koch <wk@g10code.com>
+ * pksign.c (do_encode_dsa): Compare MDLEN to bytes.
+
* cvt-openpgp.c (GCRY_PK_ECDH) [!HAVE_GCRY_PK_ECDH]: New.
2010-12-02 Werner Koch <wk@g10code.com>
diff --git a/agent/pksign.c b/agent/pksign.c
index a6dbf2509..0414bc347 100644
--- a/agent/pksign.c
+++ b/agent/pksign.c
@@ -113,21 +113,21 @@ get_dsa_qbits (gcry_sexp_t key)
/* Encode a message digest for use with an DSA algorithm. */
static gpg_error_t
-do_encode_dsa (const byte * md, size_t mdlen, int dsaalgo, gcry_sexp_t pkey,
+do_encode_dsa (const byte *md, size_t mdlen, int dsaalgo, gcry_sexp_t pkey,
gcry_sexp_t *r_hash)
{
gpg_error_t err;
gcry_sexp_t hash;
unsigned int qbits;
- int gcry_pkalgo;
+ int pkalgo;
*r_hash = NULL;
- gcry_pkalgo = map_pk_openpgp_to_gcry( dsaalgo );
+ pkalgo = map_pk_openpgp_to_gcry (dsaalgo);
- if (gcry_pkalgo == GCRY_PK_ECDSA)
+ if (pkalgo == GCRY_PK_ECDSA)
qbits = gcry_pk_get_nbits (pkey);
- else if (gcry_pkalgo == GCRY_PK_DSA)
+ else if (pkalgo == GCRY_PK_DSA)
qbits = get_dsa_qbits (pkey);
else
return gpg_error (GPG_ERR_WRONG_PUBKEY_ALGO);
@@ -146,25 +146,28 @@ do_encode_dsa (const byte * md, size_t mdlen, int dsaalgo, gcry_sexp_t pkey,
if (qbits < 160)
{
log_error (_("%s key uses an unsafe (%u bit) hash\n"),
- gcry_pk_algo_name (gcry_pkalgo), qbits);
+ gcry_pk_algo_name (pkalgo), qbits);
return gpg_error (GPG_ERR_INV_LENGTH);
}
/* 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 ).
+ * 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 < ((gcry_pkalgo==GCRY_PK_ECDSA && qbits>521) ? 512 : qbits) )
+ if (mdlen < ((pkalgo==GCRY_PK_ECDSA && qbits > 521) ? 512 : qbits)/8)
{
log_error (_("a %zu bit hash is not valid for a %u bit %s key\n"),
- mdlen,
+ mdlen*8,
gcry_pk_get_nbits (pkey),
- gcry_pk_algo_name (gcry_pkalgo));
+ gcry_pk_algo_name (pkalgo));
/* FIXME: we need to check the requirements for ECDSA. */
- if (mdlen < 20 || gcry_pkalgo == GCRY_PK_DSA)
+ if (mdlen < 20 || pkalgo == GCRY_PK_DSA)
return gpg_error (GPG_ERR_INV_LENGTH);
}
diff --git a/g10/ChangeLog b/g10/ChangeLog
index 0c8cbd418..75415f466 100644
--- a/g10/ChangeLog
+++ b/g10/ChangeLog
@@ -1,3 +1,7 @@
+2011-01-21 Werner Koch <wk@g10code.com>
+
+ * misc.c (openpgp_pk_algo_name): Always use the gcrypt function.
+
2010-12-09 Werner Koch <wk@g10code.com>
* tdbio.c (tdbio_set_dbname) [W32CE]: Take care of missing errno.
diff --git a/g10/misc.c b/g10/misc.c
index 6f77119fe..bdd797c16 100644
--- a/g10/misc.c
+++ b/g10/misc.c
@@ -503,25 +503,7 @@ openpgp_pk_algo_usage ( int algo )
const char *
openpgp_pk_algo_name (int algo)
{
- /* We use fixed strings to have pretty names instead of those from
- libgcrypt. */
- switch (algo)
- {
- case PUBKEY_ALGO_RSA:
- case PUBKEY_ALGO_RSA_E:
- case PUBKEY_ALGO_RSA_S: return "rsa";
-
- case PUBKEY_ALGO_ELGAMAL:
- case PUBKEY_ALGO_ELGAMAL_E: return "elg";
-
- case PUBKEY_ALGO_DSA: return "dsa";
-
- case PUBKEY_ALGO_ECDSA:return "ecdsa";
-
- case PUBKEY_ALGO_ECDH: return "ecdh";
-
- default: gcry_pk_algo_name (map_pk_openpgp_to_gcry (algo));
- }
+ return gcry_pk_algo_name (map_pk_openpgp_to_gcry (algo));
}
diff --git a/g10/sign.c b/g10/sign.c
index 30dc66d5f..cbb3c62e8 100644
--- a/g10/sign.c
+++ b/g10/sign.c
@@ -298,6 +298,9 @@ do_sign (PKT_public_key *pksk, PKT_signature *sig,
{
PKT_public_key *pk = xmalloc_clear (sizeof *pk);
+ log_debug ("checking created signature algo=%d\n", mdalgo);
+ log_printhex ("md:", dp, gcry_md_get_algo_dlen (mdalgo));
+
if (get_pubkey (pk, sig->keyid ))
err = gpg_error (GPG_ERR_NO_PUBKEY);
else
diff --git a/include/ChangeLog b/include/ChangeLog
index 7c1b372ab..8dd88ffbb 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,6 +1,6 @@
2011-01-21 Werner Koch <wk@g10code.com>
- * cipher.h (GCRY_PK_USAGE_CERT): Remove comaptibility macros
+ * cipher.h (GCRY_PK_USAGE_CERT): Remove compatibility macros
because we now require libgcrypt 1.4.6.
(GCRY_PK_ECDH): Add replacement.