summaryrefslogtreecommitdiff
path: root/lib/privkey.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/privkey.c')
-rw-r--r--lib/privkey.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/privkey.c b/lib/privkey.c
index e5b7e83965..ab2f2771b6 100644
--- a/lib/privkey.c
+++ b/lib/privkey.c
@@ -156,6 +156,7 @@ privkey_to_pubkey(gnutls_pk_algorithm_t pk,
pub->algo = priv->algo;
pub->pkflags = priv->pkflags;
pub->curve = priv->curve;
+ pub->gost_params = priv->gost_params;
pub->qbits = priv->qbits;
memcpy(&pub->spki, &priv->spki, sizeof(gnutls_x509_spki_st));
@@ -209,6 +210,21 @@ privkey_to_pubkey(gnutls_pk_algorithm_t pk,
return gnutls_assert_val(ret);
break;
+ case GNUTLS_PK_GOST_01:
+ case GNUTLS_PK_GOST_12_256:
+ case GNUTLS_PK_GOST_12_512:
+ pub->params[GOST_X] = _gnutls_mpi_copy(priv->params[GOST_X]);
+ pub->params[GOST_Y] = _gnutls_mpi_copy(priv->params[GOST_Y]);
+
+ pub->params_nr = GOST_PUBLIC_PARAMS;
+
+ if (pub->params[GOST_X] == NULL || pub->params[GOST_Y] == NULL) {
+ gnutls_assert();
+ ret = GNUTLS_E_MEMORY_ERROR;
+ goto cleanup;
+ }
+
+ break;
default:
gnutls_assert();
return GNUTLS_E_INVALID_REQUEST;