diff options
Diffstat (limited to 'lib/pk.c')
-rw-r--r-- | lib/pk.c | 79 |
1 files changed, 54 insertions, 25 deletions
@@ -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; } + |