{
gnutls_assert ();
_gnutls_debug_log("Security level of algorithm requires hash %s(%d) or better\n", gnutls_mac_get_name(hash), hash_len);
+ hash_len = vdata->size;
}
- ret = ecc_sign_hash(vdata->data, vdata->size,
+ ret = ecc_sign_hash(vdata->data, hash_len,
&sig, NULL, rnd_func, &priv);
if (ret != 0)
{
if (hash_len > vdata->size)
{
gnutls_assert ();
- _gnutls_debug_log("Security level of algorithm requires hash %s or better\n", gnutls_mac_get_name(hash));
+ _gnutls_debug_log("Security level of algorithm requires hash %s(%d) or better\n", gnutls_mac_get_name(hash), hash_len);
+ hash_len = vdata->size;
}
ret =
_dsa_sign (&pub, &priv, NULL, rnd_func,
- vdata->size, vdata->data, &sig);
+ hash_len, vdata->data, &sig);
if (ret == 0)
{
gnutls_assert ();
const gnutls_pk_params_st * pk_params)
{
int ret;
+ int hash_len;
bigint_t tmp[2] = { NULL, NULL };
switch (algo)
memcpy (&sig.r, tmp[0], sizeof (sig.r));
memcpy (&sig.s, tmp[1], sizeof (sig.s));
- ret = ecc_verify_hash(&sig, vdata->data, vdata->size, &stat, &pub);
+ _gnutls_dsa_q_to_hash (algo, pk_params, &hash_len);
+ if (hash_len > vdata->size)
+ hash_len = vdata->size;
+
+ ret = ecc_verify_hash(&sig, vdata->data, hash_len, &stat, &pub);
if (ret != 0 || stat != 1)
{
gnutls_assert();
memcpy (&sig.r, tmp[0], sizeof (sig.r));
memcpy (&sig.s, tmp[1], sizeof (sig.s));
- ret = _dsa_verify (&pub, vdata->size, vdata->data, &sig);
+ _gnutls_dsa_q_to_hash (algo, pk_params, &hash_len);
+ if (hash_len > vdata->size)
+ hash_len = vdata->size;
+
+ ret = _dsa_verify (&pub, hash_len, vdata->data, &sig);
if (ret == 0)
{
gnutls_assert();
if (!hash->data || hash->size < hash_len)
{
gnutls_assert();
- _gnutls_debug_log("Hash size (%d) does not correspond to hash %s or better.\n", (int)hash->size, gnutls_mac_get_name(algo));
- return gnutls_assert_val(GNUTLS_E_PK_SIG_VERIFY_FAILED);
+ _gnutls_debug_log("Hash size (%d) does not correspond to hash %s(%d) or better.\n", (int)hash->size, gnutls_mac_get_name(algo), hash_len);
+
+ if (hash->size != 20) /* SHA1 is allowed */
+ return gnutls_assert_val(GNUTLS_E_PK_SIG_VERIFY_FAILED);
}
- digest = *hash;
+ digest.data = hash->data;
+ digest.size = hash->size;
}
else
{