summaryrefslogtreecommitdiff
path: root/lib/pk.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/pk.c')
-rw-r--r--lib/pk.c79
1 files changed, 54 insertions, 25 deletions
diff --git a/lib/pk.c b/lib/pk.c
index 6864c857e7..70690512d9 100644
--- a/lib/pk.c
+++ b/lib/pk.c
@@ -649,36 +649,63 @@ int _gnutls_params_get_ecc_raw(const gnutls_pk_params_st* params,
if (curve)
*curve = params->flags;
- /* X */
- if (x) {
- ret = _gnutls_mpi_dprint_lz(params->params[ECC_X], x);
- if (ret < 0) {
- gnutls_assert();
- return ret;
+ if (params->algo == GNUTLS_PK_EDDSA) {
+ unsigned size;
+ size = gnutls_ecc_curve_get_size(params->flags);
+
+ if (x) {
+ ret = _gnutls_mpi_dprint_size(params->params[EDDSA_PUB], x, size);
+ if (ret < 0) {
+ gnutls_assert();
+ return ret;
+ }
}
- }
- /* Y */
- if (y) {
- ret = _gnutls_mpi_dprint_lz(params->params[ECC_Y], y);
- if (ret < 0) {
- gnutls_assert();
- _gnutls_free_datum(x);
- return ret;
+ if (y) {
+ y->data = NULL;
+ y->size = 0;
}
- }
+ if (k) {
+ ret = _gnutls_mpi_dprint_size(params->params[EDDSA_PRIV], k, size);
+ if (ret < 0) {
+ gnutls_assert();
+ _gnutls_free_datum(x);
+ return ret;
+ }
+ }
+ } else if (params->algo == GNUTLS_PK_ECDSA) {
+ /* X */
+ if (x) {
+ ret = _gnutls_mpi_dprint_lz(params->params[ECC_X], x);
+ if (ret < 0) {
+ gnutls_assert();
+ return ret;
+ }
+ }
- /* K */
- if (k) {
- ret = _gnutls_mpi_dprint_lz(params->params[ECC_K], k);
- if (ret < 0) {
- gnutls_assert();
- _gnutls_free_datum(x);
- _gnutls_free_datum(y);
- return ret;
+ /* Y */
+ if (y) {
+ ret = _gnutls_mpi_dprint_lz(params->params[ECC_Y], y);
+ if (ret < 0) {
+ gnutls_assert();
+ _gnutls_free_datum(x);
+ return ret;
+ }
}
- }
+
+ /* K */
+ if (k) {
+ ret = _gnutls_mpi_dprint_lz(params->params[ECC_K], k);
+ if (ret < 0) {
+ gnutls_assert();
+ _gnutls_free_datum(x);
+ _gnutls_free_datum(y);
+ return ret;
+ }
+ }
+ } else
+ return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST);
return 0;
@@ -742,7 +769,8 @@ pk_prepare_hash(gnutls_pk_algorithm_t pk,
_gnutls_free_datum(&old_digest);
break;
case GNUTLS_PK_DSA:
- case GNUTLS_PK_EC:
+ case GNUTLS_PK_ECDSA:
+ case GNUTLS_PK_EDDSA:
break;
default:
gnutls_assert();
@@ -751,3 +779,4 @@ pk_prepare_hash(gnutls_pk_algorithm_t pk,
return 0;
}
+