summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2011-03-16 19:08:18 +0100
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2011-03-16 20:52:48 +0100
commit3ac59a36a3b8a9e226e3af6b84096d3d3170b97a (patch)
tree64b57245a75ebf975226e9e7cfdebf3737e1a0c4
parent60338e8676f85dc6f26427b053f9c549d3bc1431 (diff)
downloadgnutls-3ac59a36a3b8a9e226e3af6b84096d3d3170b97a.tar.gz
Read the public key algorithm from the selected subkey and not the master key when importing to a gnutls_privkey.
-rw-r--r--lib/gnutls_privkey.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/lib/gnutls_privkey.c b/lib/gnutls_privkey.c
index c52be50b9f..201686d225 100644
--- a/lib/gnutls_privkey.c
+++ b/lib/gnutls_privkey.c
@@ -385,7 +385,8 @@ gnutls_privkey_import_openpgp (gnutls_privkey_t pkey,
gnutls_openpgp_privkey_t key,
unsigned int flags)
{
-int ret;
+int ret, idx;
+gnutls_openpgp_keyid_t keyid;
ret = check_if_clean(pkey);
if (ret < 0)
@@ -396,7 +397,14 @@ int ret;
pkey->key.openpgp = key;
pkey->type = GNUTLS_PRIVKEY_OPENPGP;
- pkey->pk_algorithm = gnutls_openpgp_privkey_get_pk_algorithm (key, NULL);
+
+ ret = gnutls_openpgp_privkey_get_preferred_key_id (key, keyid);
+ if (ret < 0)
+ return gnutls_assert_val(ret);
+
+ idx = gnutls_openpgp_privkey_get_subkey_idx (key, keyid);
+
+ pkey->pk_algorithm = gnutls_openpgp_privkey_get_subkey_pk_algorithm (key, idx, NULL);
pkey->flags = flags;
return 0;