summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/x509/key_encode.c6
-rw-r--r--lib/x509/privkey.c22
-rw-r--r--lib/x509/privkey_pkcs8.c2
-rw-r--r--lib/x509/x509_int.h2
4 files changed, 17 insertions, 15 deletions
diff --git a/lib/x509/key_encode.c b/lib/x509/key_encode.c
index 3b0ac7c79c..24e7750536 100644
--- a/lib/x509/key_encode.c
+++ b/lib/x509/key_encode.c
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2011-2012 Free Software Foundation, Inc.
- * Copyright (C) 2013 Red Hat
+ * Copyright (C) 2013-2017 Red Hat
*
* Author: Nikos Mavrogiannopoulos
*
@@ -842,10 +842,10 @@ cleanup:
return ret;
}
-int _gnutls_asn1_encode_privkey(gnutls_pk_algorithm_t pk, ASN1_TYPE * c2,
+int _gnutls_asn1_encode_privkey(ASN1_TYPE * c2,
gnutls_pk_params_st * params, unsigned compat)
{
- switch (pk) {
+ switch (params->algo) {
case GNUTLS_PK_RSA:
case GNUTLS_PK_RSA_PSS:
return _gnutls_asn1_encode_rsa(c2, params, compat);
diff --git a/lib/x509/privkey.c b/lib/x509/privkey.c
index b152ee55fd..79c4736b37 100644
--- a/lib/x509/privkey.c
+++ b/lib/x509/privkey.c
@@ -113,7 +113,7 @@ gnutls_x509_privkey_cpy(gnutls_x509_privkey_t dst,
}
ret =
- _gnutls_asn1_encode_privkey(dst->pk_algorithm, &dst->key,
+ _gnutls_asn1_encode_privkey(&dst->key,
&dst->params, src->flags&GNUTLS_PRIVKEY_FLAG_EXPORT_COMPAT);
if (ret < 0) {
gnutls_assert();
@@ -974,6 +974,8 @@ gnutls_x509_privkey_import_rsa_raw2(gnutls_x509_privkey_t key,
key->params.params_nr++;
}
+ key->params.algo = GNUTLS_PK_RSA;
+
ret = _gnutls_pk_fixup(GNUTLS_PK_RSA, GNUTLS_IMPORT, &key->params);
if (ret < 0) {
gnutls_assert();
@@ -981,7 +983,7 @@ gnutls_x509_privkey_import_rsa_raw2(gnutls_x509_privkey_t key,
}
ret =
- _gnutls_asn1_encode_privkey(GNUTLS_PK_RSA, &key->key,
+ _gnutls_asn1_encode_privkey(&key->key,
&key->params, key->flags&GNUTLS_PRIVKEY_FLAG_EXPORT_COMPAT);
if (ret < 0) {
gnutls_assert();
@@ -1077,18 +1079,17 @@ gnutls_x509_privkey_import_dsa_raw(gnutls_x509_privkey_t key,
goto cleanup;
}
+ key->params.algo = GNUTLS_PK_DSA;
+ key->params.params_nr = DSA_PRIVATE_PARAMS;
+
ret =
- _gnutls_asn1_encode_privkey(GNUTLS_PK_DSA, &key->key,
+ _gnutls_asn1_encode_privkey(&key->key,
&key->params, key->flags&GNUTLS_PRIVKEY_FLAG_EXPORT_COMPAT);
if (ret < 0) {
gnutls_assert();
goto cleanup;
}
- key->params.params_nr = DSA_PRIVATE_PARAMS;
- key->pk_algorithm = GNUTLS_PK_DSA;
- key->params.algo = key->pk_algorithm;
-
return 0;
cleanup:
@@ -1642,6 +1643,8 @@ gnutls_x509_privkey_generate2(gnutls_x509_privkey_t key,
key->params.flags |= GNUTLS_PK_FLAG_PROVABLE;
}
+ key->params.algo = algo;
+
ret = _gnutls_pk_generate_params(algo, bits, &key->params);
if (ret < 0) {
gnutls_assert();
@@ -1684,12 +1687,11 @@ gnutls_x509_privkey_generate2(gnutls_x509_privkey_t key,
goto cleanup;
}
- ret = _gnutls_asn1_encode_privkey(algo, &key->key, &key->params, key->flags&GNUTLS_PRIVKEY_FLAG_EXPORT_COMPAT);
+ ret = _gnutls_asn1_encode_privkey(&key->key, &key->params, key->flags&GNUTLS_PRIVKEY_FLAG_EXPORT_COMPAT);
if (ret < 0) {
gnutls_assert();
goto cleanup;
}
- key->pk_algorithm = algo;
return 0;
@@ -2129,7 +2131,7 @@ int gnutls_x509_privkey_fix(gnutls_x509_privkey_t key)
asn1_delete_structure2(&key->key, ASN1_DELETE_FLAG_ZEROIZE);
ret =
- _gnutls_asn1_encode_privkey(key->pk_algorithm, &key->key,
+ _gnutls_asn1_encode_privkey(&key->key,
&key->params, key->flags&GNUTLS_PRIVKEY_FLAG_EXPORT_COMPAT);
if (ret < 0) {
gnutls_assert();
diff --git a/lib/x509/privkey_pkcs8.c b/lib/x509/privkey_pkcs8.c
index afede88324..c7a7caf69f 100644
--- a/lib/x509/privkey_pkcs8.c
+++ b/lib/x509/privkey_pkcs8.c
@@ -1142,7 +1142,7 @@ _decode_pkcs8_dsa_key(ASN1_TYPE pkcs8_asn, gnutls_x509_privkey_t pkey)
pkey->params.params_nr = DSA_PRIVATE_PARAMS;
ret =
- _gnutls_asn1_encode_privkey(GNUTLS_PK_DSA, &pkey->key,
+ _gnutls_asn1_encode_privkey(&pkey->key,
&pkey->params, pkey->flags&GNUTLS_PRIVKEY_FLAG_EXPORT_COMPAT);
if (ret < 0) {
gnutls_assert();
diff --git a/lib/x509/x509_int.h b/lib/x509/x509_int.h
index f672e574a9..6e4983148e 100644
--- a/lib/x509/x509_int.h
+++ b/lib/x509/x509_int.h
@@ -254,7 +254,7 @@ int
_gnutls_x509_read_ecc_params(uint8_t * der, int dersize,
unsigned int *curve);
-int _gnutls_asn1_encode_privkey(gnutls_pk_algorithm_t pk, ASN1_TYPE * c2,
+int _gnutls_asn1_encode_privkey(ASN1_TYPE * c2,
gnutls_pk_params_st * params, unsigned compat);
int _gnutls_x509_privkey_get_spki_params(gnutls_x509_privkey_t key,