diff options
Diffstat (limited to 'lib/auth/cert.c')
-rw-r--r-- | lib/auth/cert.c | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/lib/auth/cert.c b/lib/auth/cert.c index 3e10051df3..2ff0cc00ff 100644 --- a/lib/auth/cert.c +++ b/lib/auth/cert.c @@ -935,7 +935,9 @@ _gnutls_gen_openpgp_certificate_fpr (gnutls_session_t session, { int ret, packet_size; uint8_t type, fpr[20]; - size_t fpr_size; + uint8_t id[20]; + unsigned int subkey; + size_t fpr_size, id_size; gnutls_pcert_st *apr_cert_list; gnutls_privkey_t apr_pkey; int apr_cert_list_length; @@ -949,10 +951,21 @@ _gnutls_gen_openpgp_certificate_fpr (gnutls_session_t session, return ret; } + if (apr_cert_list_length <= 0) + return _gnutls_gen_openpgp_certificate (session, data); + + id_size = sizeof (id); + ret = + gnutls_pubkey_get_openpgp_key_id (apr_cert_list[0].pubkey, 0, id, + &id_size, &subkey); + if (ret < 0) + return gnutls_assert_val (ret); + fpr_size = sizeof (fpr); ret = - gnutls_pubkey_get_openpgp_key_id (apr_cert_list[0].pubkey, 0, fpr, - &fpr_size, NULL); + gnutls_pubkey_get_openpgp_key_id (apr_cert_list[0].pubkey, + GNUTLS_PUBKEY_GET_OPENPGP_FINGERPRINT, + fpr, &fpr_size, NULL); if (ret < 0) return gnutls_assert_val (ret); @@ -961,10 +974,7 @@ _gnutls_gen_openpgp_certificate_fpr (gnutls_session_t session, /* Only v4 fingerprints are sent */ - if (apr_cert_list_length > 0) - packet_size += 20 + 1; - else /* empty certificate case */ - return _gnutls_gen_openpgp_certificate (session, data); + packet_size += 20 + 1; ret = _gnutls_buffer_append_prefix (data, 24, packet_size - 3); if (ret < 0) @@ -975,6 +985,10 @@ _gnutls_gen_openpgp_certificate_fpr (gnutls_session_t session, if (ret < 0) return gnutls_assert_val (ret); + ret = _gnutls_buffer_append_data_prefix (data, 8, id, id_size); + if (ret < 0) + return gnutls_assert_val (ret); + ret = _gnutls_buffer_append_data_prefix (data, 8, fpr, fpr_size); if (ret < 0) return gnutls_assert_val (ret); |