summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@redhat.com>2016-12-07 10:27:01 +0100
committerNikos Mavrogiannopoulos <nmav@redhat.com>2016-12-07 10:34:24 +0100
commita486e73e495ec52caa012eb0d72eea69b43427ef (patch)
tree431f9a0891b1f648441defbcd853ca07b8b66743
parent87d045bed6ce3d7ce971b0651951e6fe8777956f (diff)
downloadgnutls-a486e73e495ec52caa012eb0d72eea69b43427ef.tar.gz
gnutls_x509_privkey_cpy: use _gnutls_pk_params_copy
This ensures that all fields of parameters are copied. Inspired by patch of Dmitry Eremin-Solenikov.
-rw-r--r--lib/x509/privkey.c17
1 files changed, 6 insertions, 11 deletions
diff --git a/lib/x509/privkey.c b/lib/x509/privkey.c
index c55611f7db..a2744ff155 100644
--- a/lib/x509/privkey.c
+++ b/lib/x509/privkey.c
@@ -98,29 +98,24 @@ int
gnutls_x509_privkey_cpy(gnutls_x509_privkey_t dst,
gnutls_x509_privkey_t src)
{
- unsigned int i;
int ret;
if (!src || !dst)
return GNUTLS_E_INVALID_REQUEST;
- for (i = 0; i < src->params.params_nr; i++) {
- dst->params.params[i] =
- _gnutls_mpi_copy(src->params.params[i]);
- if (dst->params.params[i] == NULL)
- return GNUTLS_E_MEMORY_ERROR;
- }
-
- dst->params.params_nr = src->params.params_nr;
- dst->params.flags = src->params.flags;
-
dst->pk_algorithm = src->pk_algorithm;
+ ret = _gnutls_pk_params_copy(&dst->params, &src->params);
+ if (ret < 0) {
+ return gnutls_assert_val(ret);
+ }
+
ret =
_gnutls_asn1_encode_privkey(dst->pk_algorithm, &dst->key,
&dst->params, src->flags&GNUTLS_PRIVKEY_FLAG_EXPORT_COMPAT);
if (ret < 0) {
gnutls_assert();
+ gnutls_pk_params_release(&dst->params);
return ret;
}