[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/openpgp 671030cb32 01/30: Initial revision
From: |
ELPA Syncer |
Subject: |
[elpa] externals/openpgp 671030cb32 01/30: Initial revision |
Date: |
Sun, 26 Mar 2023 10:59:26 -0400 (EDT) |
branch: externals/openpgp
commit 671030cb32f955764bd8964124555a3e14dc664f
Author: Philip Kaludercic <philip.kaludercic@fau.de>
Commit: Philip Kaludercic <philip.kaludercic@fau.de>
Initial revision
---
openpgp.el | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 97 insertions(+)
diff --git a/openpgp.el b/openpgp.el
new file mode 100644
index 0000000000..13b9512d84
--- /dev/null
+++ b/openpgp.el
@@ -0,0 +1,97 @@
+;;; $Id$
+;;; Implementation of the keys.openpgp.org protocol as specified by
+;;; https://keys.openpgp.org/about/api
+
+(defcustom openpgp-keyserver "keys.openpgp.org"
+ "Domain of keyserver to use.
+
+NOTE: currently the default value is the only working keyserver,
+as federation hasn't been implemented yet.")
+
+(defsubst openpgp--api-url (endpoint &optional arg)
+ "Construct VKS request querying ENDPOINT.
+
+The optional argument ARG will be concatenated to the end of the
+URL, if non-nil."
+ (format "https://%s/vks/v1/%s%s"
+ openpgp-keyserver endpoint
+ (if arg (concat "/" arg) "")))
+
+(defun openpgp--process-key (status)
+ (when (plist-get status :error)
+ (error "Request failed: %s"
+ (caddr (assq (caddr (plist-get status :error))
+ url-http-codes))))
+ (forward-paragraph)
+ (forward-line)
+ (epa-import-armor-in-region (point) (point-max)))
+
+(defun openpgp-fetch-key-by-fingerprint (fingerprint)
+ "Query key via FINGERPRINT and add to keychain."
+ (let ((fingerprint (string-remove-prefix "0X" (upcase fingerprint))))
+ (url-retrieve (openpgp--api-url "by-fingerprint" fingerprint)
+ #'openpgp--process-key)))
+
+(defun openpgp-fetch-key-by-keyid (keyid)
+ "Query key via KEYID and add to keychain."
+ (let ((keyid (string-remove-prefix "0X" (upcase keyid))))
+ (url-retrieve (openpgp--api-url "by-keyid" keyid)
+ #'openpgp--process-key)))
+
+(defun openpgp-fetch-key-by-email (email)
+ "Query key via EMAIL and add to keychain."
+ (url-retrieve (openpgp--api-url "by-email" email)
+ #'openpgp--process-key))
+
+(defun openpgp--verify-callback (status)
+ (when (plist-get status :error)
+ (error "Request failed: %s"
+ (caddr (assq (caddr (plist-get status :error))
+ url-http-codes))))
+ (forward-paragraph)
+ (let ((data (json-parse-buffer)))
+ (when (assq 'error data)
+ (error "Error in response: %s" (cdr (assq 'error data))))
+ (message "Verification successfully requested.")))
+
+(defun openpgp-request-verify (email token)
+ "Request verification email for address EMAIL.
+
+TOKEN should be supplied by a previous \"upload-key\" request."
+ (let ((url-request-method "POST")
+ (url-request-extra-headers '(("Content-Type" . "application/json")))
+ (url-request-data (json-encode `(("token" . ,token)
+ ("addresses" . (,email))))))
+ (url-retrieve (openpgp--api-url "request-verify")
+ #'openpgp--verify-callback)))
+
+(defun openpgp--upload-callback (status email)
+ (when (plist-get status :error)
+ (error "Request failed: %s"
+ (caddr (assq (caddr (plist-get status :error))
+ url-http-codes))))
+ (forward-paragraph)
+ (let ((data (json-parse-buffer :object-type 'alist)))
+ (when (assq 'error data)
+ (error "Error in response: %s" (cdr (assq 'error data))))
+ (openpgp-request-verify email (cdr (assq 'token data)))))
+
+(defun openpgp-upload-key (email key)
+ "Upload KEY for address EMAIL to keyserver.
+
+The KEY should be a string, containing a ASCII armoured public
+key."
+ (let ((url-request-method "POST")
+ (url-request-extra-headers '(("Content-Type" . "application/json")))
+ (url-request-data (json-encode `(("keytext" . ,key)))))
+ (url-retrieve (openpgp--api-url "upload")
+ #'openpgp--upload-callback
+ (list email))))
+
+(defun openpgp-upload-key-file (email key-file)
+ "Upload key from KEY-FILE for address EMAIL."
+ (interactive (list (read-string "Email: ")
+ (read-file-name "Key file: ")))
+ (with-temp-buffer
+ (insert-file-contents key-file)
+ (openpgp-upload-key email (buffer-string))))
- [elpa] externals/openpgp 9b17ce593f 13/30: Added email autocompletion for openpgp-upload-key-file, (continued)
- [elpa] externals/openpgp 9b17ce593f 13/30: Added email autocompletion for openpgp-upload-key-file, ELPA Syncer, 2023/03/26
- [elpa] externals/openpgp 9385b7502e 17/30: Format file as a proper Emacs package, ELPA Syncer, 2023/03/26
- [elpa] externals/openpgp 226b50eba8 11/30: Added missing require statments, ELPA Syncer, 2023/03/26
- [elpa] externals/openpgp 63b794e5f6 06/30: Fixed mu4e issues, ELPA Syncer, 2023/03/26
- [elpa] externals/openpgp a31d7bbb79 16/30: Fixed scoping in openpgp-mu4e-fetch-key, ELPA Syncer, 2023/03/26
- [elpa] externals/openpgp 7dbc5feede 22/30: Complete missing information in header, ELPA Syncer, 2023/03/26
- [elpa] externals/openpgp 72dbc056ba 12/30: Added email autocompletion for openpgp-upload-key, ELPA Syncer, 2023/03/26
- [elpa] externals/openpgp f77ea6317e 21/30: Remove "Mail Client Support" section, ELPA Syncer, 2023/03/26
- [elpa] externals/openpgp a311c89f17 23/30: Add missing docstrings, ELPA Syncer, 2023/03/26
- [elpa] externals/openpgp 2a31092a2f 27/30: Add a .gitignore file, ELPA Syncer, 2023/03/26
- [elpa] externals/openpgp 671030cb32 01/30: Initial revision,
ELPA Syncer <=
- [elpa] externals/openpgp 8d2f94ef37 04/30: Hexify email address when fetching key, ELPA Syncer, 2023/03/26
- [elpa] externals/openpgp 40af1f122e 10/30: Added support for pre-Emacs 27 via json-read, ELPA Syncer, 2023/03/26
- [elpa] externals/openpgp 7742862e4a 20/30: Fix formatting of outline headers, ELPA Syncer, 2023/03/26
- [elpa] externals/openpgp 6d58b73248 28/30: Add a file with the license text, ELPA Syncer, 2023/03/26
- [elpa] externals/openpgp 5d8eb489bc 29/30: Add a README file, ELPA Syncer, 2023/03/26
- [elpa] externals/openpgp e8550d3136 15/30: Fixed indentation in openpgp-mu4e-fetch-key, ELPA Syncer, 2023/03/26
- [elpa] externals/openpgp 59f2277a72 03/30: Added rmail and mu4e integration functions, ELPA Syncer, 2023/03/26
- [elpa] externals/openpgp 63571ea6f9 08/30: Improved openpgp--verify-callback message generation, ELPA Syncer, 2023/03/26
- [elpa] externals/openpgp 351de694f7 14/30: Added further checks to openpgp--upload-callback, ELPA Syncer, 2023/03/26
- [elpa] externals/openpgp f21d692370 25/30: Add autoload cookies, ELPA Syncer, 2023/03/26