aboutsummaryrefslogtreecommitdiffstats
path: root/src/key.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/key.c')
-rw-r--r--src/key.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/key.c b/src/key.c
index 93cdc1c8..fec9eb16 100644
--- a/src/key.c
+++ b/src/key.c
@@ -304,6 +304,35 @@ _gpgme_key_add_sig (gpgme_key_t key, char *src)
}
+gpgme_error_t
+_gpgme_key_add_rev_key (gpgme_key_t key, const char *src)
+{
+ gpgme_revocation_key_t revkey;
+ int src_len = src ? strlen (src) : 0;
+
+ assert (key);
+ /* malloc a buffer for the revocation key and the fingerprint. */
+ revkey = malloc (sizeof (*revkey) + src_len + 1);
+ if (!revkey)
+ return gpg_error_from_syserror ();
+ memset (revkey, 0, sizeof *revkey);
+
+ revkey->fpr = ((char *) revkey) + sizeof (*revkey);
+ if (src)
+ memcpy (revkey->fpr, src, src_len + 1);
+ else
+ revkey->fpr[0] = '\0';
+
+ if (!key->revocation_keys)
+ key->revocation_keys = revkey;
+ if (key->_last_revkey)
+ key->_last_revkey->next = revkey;
+ key->_last_revkey = revkey;
+
+ return 0;
+}
+
+
/* Acquire a reference to KEY. */
void
gpgme_key_ref (gpgme_key_t key)
@@ -324,6 +353,7 @@ gpgme_key_unref (gpgme_key_t key)
{
gpgme_user_id_t uid;
gpgme_subkey_t subkey;
+ gpgme_revocation_key_t revkey;
if (!key)
return;
@@ -392,6 +422,14 @@ gpgme_key_unref (gpgme_key_t key)
uid = next_uid;
}
+ revkey = key->revocation_keys;
+ while (revkey)
+ {
+ gpgme_revocation_key_t next = revkey->next;
+ free (revkey);
+ revkey = next;
+ }
+
free (key->issuer_serial);
free (key->issuer_name);
free (key->chain_id);