about summary refs log tree commit diff stats
path: root/src/pgp/gpg.c
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2015-08-23 22:54:41 +0100
committerJames Booth <boothj5@gmail.com>2015-08-23 22:54:41 +0100
commit57ca441f0236a86f1091a2664da227bac4e2ea59 (patch)
treeadd794e0c9c6e04ae8b56dc5e9d1adccb824bec9 /src/pgp/gpg.c
parentc07638746a37c333dc15d7b8597d0e310fe5286c (diff)
downloadprofani-tty-57ca441f0236a86f1091a2664da227bac4e2ea59.tar.gz
Check for valid PGP key on start
Diffstat (limited to 'src/pgp/gpg.c')
-rw-r--r--src/pgp/gpg.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/pgp/gpg.c b/src/pgp/gpg.c
index 3e2cfe67..be35bb3a 100644
--- a/src/pgp/gpg.c
+++ b/src/pgp/gpg.c
@@ -281,6 +281,35 @@ p_gpg_free_key(ProfPGPKey *key)
 }
 
 gboolean
+p_gpg_valid_key(const char * const keyid)
+{
+    gpgme_ctx_t ctx;
+    gpgme_error_t error = gpgme_new(&ctx);
+    if (error) {
+        log_error("GPG: Failed to create gpgme context. %s %s", gpgme_strsource(error), gpgme_strerror(error));
+        return FALSE;
+    }
+
+    gpgme_key_t key = NULL;
+    error = gpgme_get_key(ctx, keyid, &key, 1);
+
+    if (error || key == NULL) {
+        log_error("GPG: Failed to get key. %s %s", gpgme_strsource(error), gpgme_strerror(error));
+        gpgme_release(ctx);
+        return FALSE;
+    }
+
+    if (key) {
+        gpgme_release(ctx);
+        gpgme_key_unref(key);
+        return TRUE;
+    }
+
+    gpgme_release(ctx);
+    return FALSE;
+}
+
+gboolean
 p_gpg_available(const char * const barejid)
 {
     char *fp = g_hash_table_lookup(fingerprints, barejid);