}
-/* Do DSA signature calculation. params is p, q, g, y, x in that order.
- */
-int
-_gnutls_dsa_sign (gnutls_datum_t * signature,
- const gnutls_datum_t * hash,
- gnutls_pk_params_st * params)
-{
- int ret;
- size_t k;
-
- k = hash->size;
- if (k < 20)
- { /* SHA1 or better only */
- gnutls_assert ();
- return GNUTLS_E_PK_SIGN_FAILED;
- }
-
- ret = _gnutls_pk_sign (GNUTLS_PK_DSA, signature, hash, params);
- /* rs[0], rs[1] now hold r,s */
-
- if (ret < 0)
- {
- gnutls_assert ();
- return ret;
- }
-
- return 0;
-}
-
/* decodes the Dss-Sig-Value structure
*/
int
const gnutls_datum_t * plaintext,
gnutls_pk_params_st * params,
unsigned btype);
-int _gnutls_dsa_sign (gnutls_datum_t * signature,
- const gnutls_datum_t * plaintext, gnutls_pk_params_st*);
int _gnutls_pkcs1_rsa_decrypt (gnutls_datum_t * plaintext,
const gnutls_datum_t * ciphertext,
gnutls_pk_params_st* params,
goto cleanup;
}
+ break;
+ case GNUTLS_PK_ECC:
+ pub->params[0] = _gnutls_mpi_copy (priv->params[0]);
+ pub->params[1] = _gnutls_mpi_copy (priv->params[1]);
+ pub->params[2] = _gnutls_mpi_copy (priv->params[2]);
+ pub->params[3] = _gnutls_mpi_copy (priv->params[3]);
+ pub->params[4] = _gnutls_mpi_copy (priv->params[4]);
+ pub->params[5] = _gnutls_mpi_copy (priv->params[5]);
+ pub->params[6] = _gnutls_mpi_copy (priv->params[6]);
+
+ pub->params_nr = ECC_PUBLIC_PARAMS;
+ pub->flags = priv->flags;
+
+ if (pub->params[0] == NULL || pub->params[1] == NULL ||
+ pub->params[2] == NULL || pub->params[3] == NULL ||
+ pub->params[4] == NULL || pub->params[5] == NULL ||
+ pub->params[6] == NULL)
+ {
+ gnutls_assert ();
+ ret = GNUTLS_E_MEMORY_ERROR;
+ goto cleanup;
+ }
+
break;
default:
gnutls_assert ();
}
break;
- case GNUTLS_PK_DSA:
- /* sign */
- if ((ret = _gnutls_dsa_sign (signature, data, params)) < 0)
+ default:
+ ret = _gnutls_pk_sign( algo, signature, data, params);
+ if (ret < 0)
{
gnutls_assert ();
return ret;
}
break;
- default:
- gnutls_assert ();
- return GNUTLS_E_INTERNAL_ERROR;
- break;
}
return 0;
{
int ret;
- switch (pk)
- {
- case GNUTLS_PK_RSA:
- break;
- case GNUTLS_PK_DSA:
- if (params && hash != _gnutls_dsa_q_to_hash (pk, params))
- {
- gnutls_assert ();
- return GNUTLS_E_INVALID_REQUEST;
- }
- break;
- default:
- gnutls_assert ();
- return GNUTLS_E_INVALID_REQUEST;
- }
-
digest->size = _gnutls_hash_get_algo_len (hash);
digest->data = gnutls_malloc (digest->size);
if (digest->data == NULL)
_gnutls_free_datum (&old_digest);
break;
case GNUTLS_PK_DSA:
+ case GNUTLS_PK_ECC:
break;
default:
gnutls_assert ();
switch (pk)
{
case GNUTLS_PK_DSA:
+ case GNUTLS_PK_ECC:
if (hash)
- *hash = _gnutls_dsa_q_to_hash (GNUTLS_PK_DSA, issuer_params);
+ *hash = _gnutls_dsa_q_to_hash (pk, issuer_params);
ret = 0;
break;