diff options
-rw-r--r-- | lib/x509/key_encode.c | 6 | ||||
-rw-r--r-- | lib/x509/privkey.c | 22 | ||||
-rw-r--r-- | lib/x509/privkey_pkcs8.c | 2 | ||||
-rw-r--r-- | lib/x509/x509_int.h | 2 |
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, |