diff options
Diffstat (limited to 'lib/privkey.c')
-rw-r--r-- | lib/privkey.c | 16 |
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; |