diff options
author | Nikos Mavrogiannopoulos <nmav@redhat.com> | 2017-05-26 15:20:38 +0200 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@redhat.com> | 2017-07-17 17:08:01 +0200 |
commit | 650dad4e18f458f60a2cdb43be32356753ed6518 (patch) | |
tree | 308661634af506842f12c709f3ab669d6be1cd7c /lib/pk.c | |
parent | f7bc8c6eea0f0fc9d02cfd22fe9fea364061ee37 (diff) | |
download | gnutls-650dad4e18f458f60a2cdb43be32356753ed6518.tar.gz |
Added support for EdDSA (Ed25519) curve keys
This adds support for draft-ietf-curdle-pkix-04.
Resolves #25
Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
Diffstat (limited to 'lib/pk.c')
-rw-r--r-- | lib/pk.c | 30 |
1 files changed, 28 insertions, 2 deletions
@@ -299,7 +299,7 @@ int _gnutls_pk_params_copy(gnutls_pk_params_st * dst, unsigned int i, j; dst->params_nr = 0; - if (src == NULL || src->params_nr == 0) { + if (src == NULL || (src->params_nr == 0 && src->raw_pub.size == 0)) { gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; } @@ -832,6 +832,31 @@ int _gnutls_params_get_ecc_raw(const gnutls_pk_params_st* params, if (curve) *curve = params->flags; + if (curve_is_eddsa(params->flags)) { + if (x) { + ret = _gnutls_set_datum(x, params->raw_pub.data, params->raw_pub.size); + if (ret < 0) { + return gnutls_assert_val(ret); + } + } + + if (y) { + y->data = NULL; + y->size = 0; + } + + if (k) { + ret = _gnutls_set_datum(k, params->raw_priv.data, params->raw_priv.size); + if (ret < 0) { + _gnutls_free_datum(x); + return gnutls_assert_val(ret); + } + } + + return 0; + } + + /* X */ if (x) { ret = dprint(params->params[ECC_X], x); @@ -926,7 +951,8 @@ pk_prepare_hash(gnutls_pk_algorithm_t pk, break; case GNUTLS_PK_RSA_PSS: case GNUTLS_PK_DSA: - case GNUTLS_PK_EC: + case GNUTLS_PK_ECDSA: + case GNUTLS_PK_EDDSA_ED25519: break; default: gnutls_assert(); |