unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#39886: [PATCH] Add EPA keyserver client
@ 2020-03-03 16:23 Philip K
       [not found] ` <CADwFkm=iPrhJaBhntAFcQPnRerHSsTY1Lc1gihMR06fVrVR_cQ@mail.gmail.com>
  0 siblings, 1 reply; 19+ messages in thread
From: Philip K @ 2020-03-03 16:23 UTC (permalink / raw)
  To: 39886

This is a pure-elisp implementation of a keyserver client, as
specified by https://tools.ietf.org/html/draft-shaw-openpgp-hkp-00.

The current feature-set includes:
- searching for keys (inexact search by default)
- generate a interactive list of keys using tabulated-list-mode
- import selected keys using epa

The keyserver to use is set by epa-keyserver, and the customize
interface already contains a few sensible defaults to choose from.
---
 lisp/epa-ks.el | 325 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 325 insertions(+)
 create mode 100644 lisp/epa-ks.el

diff --git a/lisp/epa-ks.el b/lisp/epa-ks.el
new file mode 100644
index 0000000000..a798eec72f
--- /dev/null
+++ b/lisp/epa-ks.el
@@ -0,0 +1,325 @@
+;;; epa-ks.el --- the EasyPG Assistant -*- lexical-binding: t -*-
+
+;; Copyright (C) 2020 Free Software Foundation, Inc.
+
+;; Author: Philip K. <philip@warpmail.net>
+;; Keywords: PGP, GnuPG
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Keyserver client in Emacs.
+
+;;; Code:
+
+(require 'cl-lib)
+(require 'epa)
+(require 'subr-x)
+(require 'tabulated-list)
+(require 'url)
+(require 'url-http)
+
+(defgroup epa-ks nil
+  "The EasyPG Assistant Keyserver client."
+  :version "27.1"
+  :group 'epa)
+
+(defcustom epa-keyserver "keys.gnupg.net"
+  "Domain of keyserver.
+
+This is used by `epa-ks-lookup-key', for looking up public keys."
+  :type '(choice :tag "Keyserver"
+                 (const random)
+                 (const "keyring.debian.org")
+                 (const "keys.gnupg.net")
+                 (const "keyserver.ubuntu.com")
+                 (const "pgp.mit.edu")
+                 (const "pool.sks-keyservers.net")
+                 (const "zimmermann.mayfirst.org")
+                 (string :tag "Custom keyserver")))
+
+(cl-defstruct epa-ks-key
+  "Structure to hold key data."
+  id algo len created expires names flags)
+
+(cl-defstruct epa-ks-name
+  "Structure to hold user associated with keys data."
+  uid created expires flags)
+
+(defvar epa-ks-last-query nil
+  "List of arguments to pass to `epa-ks-search-keys', when
+  reverting a buffer to restart search.")
+
+(defvar epa-ks-search-mode-map
+  (let ((map (make-sparse-keymap)))
+    (suppress-keymap map)
+    (define-key map (kbd "f") #'epa-ks--mark-key-to-fetch)
+    (define-key map (kbd "i") #'epa-ks--inspect-key-to-fetch)
+    (define-key map (kbd "u") #'epa-ks--unmark-key-to-fetch)
+    (define-key map (kbd "x") #'epa-ks-do-key-to-fetch)
+    map))
+
+(define-derived-mode epa-ks-search-mode tabulated-list-mode "Keyserver"
+  "Major mode for listing public key search results."
+  (buffer-disable-undo)
+  (setq tabulated-list-format [("ID" 8 t)
+                               ("Algo." 5 nil)
+                               ("Created" 10 t)
+                               ("Expires" 10 t)
+                               ("User" 0 t)]
+        tabulated-list-sort-key '("User" . nil)
+        tabulated-list-padding 2)
+  (add-hook 'tabulated-list-revert-hook
+            #'epa-ks--restart-search
+            nil t)
+  (tabulated-list-init-header))
+
+(defun epa-ks--inspect-key-to-fetch ()
+  "Display full ID of key under point in the minibuffer."
+  (interactive)
+  (message "Full ID: %s" (epa-ks-key-id (car (tabulated-list-get-id)))))
+
+(defun epa-ks--unmark-key-to-fetch ()
+  "Remove fetch mark for key under point.
+
+If a region is active, unmark all keys in active region."
+  (interactive)
+  (epa-ks--mark-key-to-fetch ""))
+
+(defun epa-ks--mark-key-to-fetch (tag)
+  "Add fetch-mark to key under point.
+
+If a region is active, mark all keys in active region.
+
+When all keys have been selected, use \\[epa-ks-do-key-to-fetch] to
+actually import the keys.
+
+When called interactively, `epa-ks--mark-key-to-fetch' will always
+add a \"F\" tag. Non-interactivly the tag must be specified by
+setting the TAG parameter."
+  (interactive (list "F"))
+  (if (region-active-p)
+      (save-mark-and-excursion
+        (save-restriction
+          (narrow-to-region (region-beginning) (1- (region-end)))
+          (goto-char (point-min))
+          (while (not (eobp))
+            (tabulated-list-put-tag tag t))))
+    (tabulated-list-put-tag tag t)))
+
+(defun epa-ks-do-key-to-fetch ()
+  "Fetch all marked keys from keyserver and import them.
+
+Keys are marked using `epa-ks--mark-key-to-fetch'."
+  (interactive)
+  (save-excursion
+    (let (keys)
+      (goto-char (point-min))
+      (while (not (eobp))
+        (when (looking-at-p (rx bol "F"))
+          (push (epa-ks-key-id (car (tabulated-list-get-id)))
+                keys))
+        (forward-line))
+      (when (yes-or-no-p (format "Proceed fetching all %d key(s)? "
+                                 (length keys))))
+      (dolist (id keys)
+        (epa-ks--fetch-key id))))
+  (tabulated-list-clear-all-tags))
+
+(defun epa-ks--fetch-key (id)
+  "Send request to import key with id ID."
+  (url-retrieve
+   (format "https://%s/pks/lookup?%s"
+           epa-keyserver
+           (url-build-query-string
+            `(("search" ,(concat "0x" (url-hexify-string id)))
+              ("options" "mr")
+              ("op" "get"))))
+   (lambda (status)
+     (when (plist-get status :error)
+       (error "Request failed: %s"
+           (caddr (assq (caddr (plist-get status :error))
+                        url-http-codes))))
+     (forward-paragraph)
+     (save-excursion
+       (goto-char (point-max))
+       (while (memq (char-before) '(?  ?
 ?\n))
+         (forward-char -1))
+       (delete-region (point) (point-max)))
+     (let ((epa-popup-info-window nil))
+       (epa-import-armor-in-region (point) (point-max)))
+     (kill-buffer))))
+
+(defun epa-ks--display-keys (buf keys)
+  "Prepare KEYS for `tabulated-list-mode', for buffer BUF.
+
+KEYS is a list of `epa-ks-key' structures, as parsed by
+`epa-ks-parse-result'."
+  (when (buffer-live-p buf)
+    (let (entries)
+      (dolist (key keys)
+        (dolist (name (epa-ks-key-names key))
+          (push (list (cons key name)
+                      (vector
+                       (substring (epa-ks-key-id key) -8)
+                       (cdr (epa-ks-key-algo key))
+                       (if (epa-ks-key-created key)
+                           (format-time-string "%F" (epa-ks-key-created key))
+                         "N/A")
+                       (if (epa-ks-key-expires key)
+                           (let* ((date (epa-ks-key-expires key))
+                                  (str (format-time-string "%F" date)))
+                             (when (< 0 (time-to-seconds (time-since date)))
+                               (setq str (propertize str 'face 'font-lock-warning-face)))
+                             str)
+                         (propertize "N/A" 'face 'shadow))
+                       (decode-coding-string
+                        (epa-ks-name-uid name)
+                        (select-safe-coding-system (epa-ks-name-uid name) nil 'utf-8))))
+                entries)))
+      (with-current-buffer buf
+        (setq tabulated-list-entries entries)
+        (tabulated-list-print t t))
+      (message "Press `f' to mark a key, `x' to fetch all marked keys."))))
+
+(defun epa-ks--restart-search ()
+  (when epa-ks-last-query
+    (apply #'epa-ks-search-keys epa-ks-last-query)))
+
+;;;###autoload
+(defun epa-ks-search-keys (query exact)
+  "Ask a keyserver for all keys matching QUERY.
+
+The keyserver to be used is specified by `epa-keyserver'.
+
+If EXACT is non-nil require exact matches.  Interactively, this
+can be provoked using a prefix argument.
+
+Note that the request may fail, is the query is not specific
+enough, since keyservers have strict timeout settings."
+  (interactive (list (read-string "Search for: ")
+                     current-prefix-arg))
+  (when (string-empty-p query)
+    (user-error "No query"))
+  (let ((buf (get-buffer-create "*Key search*")))
+    (with-current-buffer buf
+      (let ((inhibit-read-only t))
+        (erase-buffer))
+      (epa-ks-search-mode))
+    (url-retrieve
+     (format "https://%s/pks/lookup?%s"
+             epa-keyserver
+             (url-build-query-string
+              (append `(("search" ,query)
+                        ("options" "mr")
+                        ("op" "index"))
+                      (and exact '(("exact" "on"))))))
+     (lambda (status)
+       (when (plist-get status :error)
+         (when buf
+           (kill-buffer buf))
+         (error "Request failed: %s"
+                (caddr (assq (caddr (plist-get status :error))
+                             url-http-codes))))
+       (forward-paragraph)
+       (forward-line)
+       (save-match-data
+         ;; parse machine readable response according to
+         ;; https://tools.ietf.org/html/draft-shaw-openpgp-hkp-00#section-5.2
+         (when (looking-at (rx bol "info:" (group (+ digit))
+                               ":" (* digit) eol))
+           (unless (string= (match-string 1) "1")
+             (error "Unsupported keyserver version")))
+         (let (key keys)
+           (forward-line)
+           (while (not (or (looking-at-p (rx ?
 eol))
+                           (eobp)))
+             (cond ((looking-at (rx bol "pub:" (group (+ alnum))
+                                    ":" (group (* digit))
+                                    ":" (group (* digit))
+                                    ":" (group (* digit))
+                                    ":" (group (* digit))
+                                    ":" (group (* (any ?r ?d ?e)))
+                                    eol))
+                    (setq key
+                          (make-epa-ks-key
+                           :id (match-string 1)
+                           :algo
+                           (and (match-string 2)
+                                (not (string-empty-p (match-string 2)))
+                                (assoc (string-to-number (match-string 2))
+                                       epg-pubkey-algorithm-alist))
+                           :len
+                           (and (match-string 3)
+                                (not (string-empty-p (match-string 3)))
+                                (string-to-number (match-string 3)))
+                           :created
+                           (and  (match-string 4)
+                                 (not (string-empty-p (match-string 4)))
+                                 (seconds-to-time
+                                  (string-to-number (match-string 4))))
+                           :expires
+                           (and (match-string 5)
+                                (not (string-empty-p (match-string 5)))
+                                (seconds-to-time
+                                 (string-to-number (match-string 5))))
+                           :flags
+                           (mapcar (lambda (flag)
+                                     (cdr (assq flag '((?r revoked)
+                                                       (?d disabled)
+                                                       (?e expired)))))
+                                   (match-string 6))))
+                    (push key keys))
+                   ((looking-at (rx bol "uid:" (group (+ (not ":")))
+                                    ":" (group (* digit))
+                                    ":" (group (* digit))
+                                    ":" (group (* (any ?r ?d ?e)))
+                                    eol))
+                    (push (make-epa-ks-name
+                           :uid (url-unhex-string (match-string 1) t)
+                           :created
+                           (and (match-string 2)
+                                (not (string-empty-p (match-string 2)))
+                                (decode-time (seconds-to-time
+                                              (string-to-number (match-string 2)))))
+                           :expires
+                           (and (match-string 3)
+                                (not (string-empty-p (match-string 3)))
+                                (decode-time (seconds-to-time
+                                              (string-to-number (match-string 3)))))
+                           :flags
+                           (mapcar (lambda (flag)
+                                     (cdr (assq flag '((?r revoked)
+                                                       (?d disabled)
+                                                       (?e expired)))))
+                                   (match-string 4)))
+                          (epa-ks-key-names key)))
+                   ((looking-at-p (rx bol "uat:"))
+                    ;; user attribute fields are ignored
+                    nil)
+                   (t (error "Invalid server response")))
+             (forward-line))
+           (if buf (epa-ks--display-keys buf keys) keys)
+           (kill-buffer)))))
+    (pop-to-buffer buf)
+    (setq epa-ks-last-query (list query exact)))
+  (message "Searching keys..."))
+
+;;;###autoload
+(defalias 'epa-search-keys 'epa-ks-search-keys)
+
+;;; epa-ks.el ends here
-- 
2.20.1






^ permalink raw reply related	[flat|nested] 19+ messages in thread

* bug#39886: [PATCH] Add EPA keyserver client
       [not found] ` <CADwFkm=iPrhJaBhntAFcQPnRerHSsTY1Lc1gihMR06fVrVR_cQ@mail.gmail.com>
@ 2020-05-19 10:08   ` Philip K.
  2020-05-19 13:50     ` Stefan Kangas
  2020-08-08 13:59     ` Lars Ingebrigtsen
  0 siblings, 2 replies; 19+ messages in thread
From: Philip K. @ 2020-05-19 10:08 UTC (permalink / raw)
  To: Stefan Kangas

Stefan Kangas <stefan@marxist.se> writes:

> Why do you think this should go to core rather than to GNU ELPA?

You're right, my mistake.

> How would you imagine that this will typically be used?

This was developed as part of an university project to work on
Cryptography in Email clients for Emacs. So the idea would be that this
would make it easier to find keys when sending or receiving a message
(we also developed an autocrypt[0] and openpgp.org client[1], but didn't
get around to officially submitting the latter anywhere).

The only "problem" would be, if it were admitted into ELPA, it would
require some more code to integrate it into various mail clients, as [0]
and [1] do.

[0]: https://melpa.org/#/autocrypt
[1]: https://wwwcip.cs.fau.de/~oj14ozun/src+etc/openpgp.el

-- 
	Philip K.






^ permalink raw reply	[flat|nested] 19+ messages in thread

* bug#39886: [PATCH] Add EPA keyserver client
  2020-05-19 10:08   ` Philip K.
@ 2020-05-19 13:50     ` Stefan Kangas
  2020-08-08 13:59     ` Lars Ingebrigtsen
  1 sibling, 0 replies; 19+ messages in thread
From: Stefan Kangas @ 2020-05-19 13:50 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: 39886, Philip K.

philip@warpmail.net (Philip K.) writes:

> Stefan Kangas <stefan@marxist.se> writes:
>
>> Why do you think this should go to core rather than to GNU ELPA?
>
> You're right, my mistake.

Thanks.  Stefan M, could you help review this submission to GNU ELPA?

>> How would you imagine that this will typically be used?
>
> This was developed as part of an university project to work on
> Cryptography in Email clients for Emacs. So the idea would be that this
> would make it easier to find keys when sending or receiving a message
> (we also developed an autocrypt[0] and openpgp.org client[1], but didn't
> get around to officially submitting the latter anywhere).
>
> The only "problem" would be, if it were admitted into ELPA, it would
> require some more code to integrate it into various mail clients, as [0]
> and [1] do.
>
> [0]: https://melpa.org/#/autocrypt
> [1]: https://wwwcip.cs.fau.de/~oj14ozun/src+etc/openpgp.el

Best regards,
Stefan Kangas





^ permalink raw reply	[flat|nested] 19+ messages in thread

* bug#39886: [PATCH] Add EPA keyserver client
  2020-05-19 10:08   ` Philip K.
  2020-05-19 13:50     ` Stefan Kangas
@ 2020-08-08 13:59     ` Lars Ingebrigtsen
  2020-08-08 14:42       ` Stefan Kangas
                         ` (2 more replies)
  1 sibling, 3 replies; 19+ messages in thread
From: Lars Ingebrigtsen @ 2020-08-08 13:59 UTC (permalink / raw)
  To: Philip K.; +Cc: 39886, Stefan Kangas

philip@warpmail.net (Philip K.) writes:

> This was developed as part of an university project to work on
> Cryptography in Email clients for Emacs. So the idea would be that this
> would make it easier to find keys when sending or receiving a message
> (we also developed an autocrypt[0] and openpgp.org client[1], but didn't
> get around to officially submitting the latter anywhere).
>
> The only "problem" would be, if it were admitted into ELPA, it would
> require some more code to integrate it into various mail clients, as [0]
> and [1] do.

I think this makes more sense in Emacs core than in ELPA, really -- it's
infrastructure that could help the Emacs mail clients navigate the key
servers, which would be helpful (because it's pretty opaque currently).

Any other opinions?

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 19+ messages in thread

* bug#39886: [PATCH] Add EPA keyserver client
  2020-08-08 13:59     ` Lars Ingebrigtsen
@ 2020-08-08 14:42       ` Stefan Kangas
  2020-08-08 14:51       ` Colin Baxter
  2020-08-08 17:20       ` Philip K.
  2 siblings, 0 replies; 19+ messages in thread
From: Stefan Kangas @ 2020-08-08 14:42 UTC (permalink / raw)
  To: Lars Ingebrigtsen, Philip K.; +Cc: 39886

Lars Ingebrigtsen <larsi@gnus.org> writes:

> I think this makes more sense in Emacs core than in ELPA, really -- it's
> infrastructure that could help the Emacs mail clients navigate the key
> servers, which would be helpful (because it's pretty opaque currently).

Makes sense to me.





^ permalink raw reply	[flat|nested] 19+ messages in thread

* bug#39886: [PATCH] Add EPA keyserver client
  2020-08-08 13:59     ` Lars Ingebrigtsen
  2020-08-08 14:42       ` Stefan Kangas
@ 2020-08-08 14:51       ` Colin Baxter
  2020-08-08 17:20       ` Philip K.
  2 siblings, 0 replies; 19+ messages in thread
From: Colin Baxter @ 2020-08-08 14:51 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 39886, Philip K., Stefan Kangas

>>>>> Lars Ingebrigtsen <larsi@gnus.org> writes:

    > philip@warpmail.net (Philip K.) writes:
    >> This was developed as part of an university project to work on
    >> Cryptography in Email clients for Emacs. So the idea would be
    >> that this would make it easier to find keys when sending or
    >> receiving a message (we also developed an autocrypt[0] and
    >> openpgp.org client[1], but didn't get around to officially
    >> submitting the latter anywhere).
    >> 
    >> The only "problem" would be, if it were admitted into ELPA, it
    >> would require some more code to integrate it into various mail
    >> clients, as [0] and [1] do.

    > I think this makes more sense in Emacs core than in ELPA, really
    > -- it's infrastructure that could help the Emacs mail clients
    > navigate the key servers, which would be helpful (because it's
    > pretty opaque currently).

    > Any other opinions?

The 'EasyPG Assistant Keyserver client' doesn't seem to pick the
keyserver from the gpg.conf file - right? I wonder why not.

Best wishes,

Colin Baxter.





^ permalink raw reply	[flat|nested] 19+ messages in thread

* bug#39886: [PATCH] Add EPA keyserver client
  2020-08-08 13:59     ` Lars Ingebrigtsen
  2020-08-08 14:42       ` Stefan Kangas
  2020-08-08 14:51       ` Colin Baxter
@ 2020-08-08 17:20       ` Philip K.
  2020-08-09  9:52         ` Lars Ingebrigtsen
  2 siblings, 1 reply; 19+ messages in thread
From: Philip K. @ 2020-08-08 17:20 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 39886, stefan

Lars Ingebrigtsen <larsi@gnus.org> writes:

> philip@warpmail.net (Philip K.) writes:
>
>> This was developed as part of an university project to work on
>> Cryptography in Email clients for Emacs. So the idea would be that this
>> would make it easier to find keys when sending or receiving a message
>> (we also developed an autocrypt[0] and openpgp.org client[1], but didn't
>> get around to officially submitting the latter anywhere).
>>
>> The only "problem" would be, if it were admitted into ELPA, it would
>> require some more code to integrate it into various mail clients, as [0]
>> and [1] do.
>
> I think this makes more sense in Emacs core than in ELPA, really -- it's
> infrastructure that could help the Emacs mail clients navigate the key
> servers, which would be helpful (because it's pretty opaque currently).
>
> Any other opinions?

I agree, submitting this as a core-patch was the wrong approach. What's
the procedure for submitting a ELPA package?

-- 
	Philip K.





^ permalink raw reply	[flat|nested] 19+ messages in thread

* bug#39886: [PATCH] Add EPA keyserver client
  2020-08-08 17:20       ` Philip K.
@ 2020-08-09  9:52         ` Lars Ingebrigtsen
  2020-08-09 11:28           ` Philip K.
  0 siblings, 1 reply; 19+ messages in thread
From: Lars Ingebrigtsen @ 2020-08-09  9:52 UTC (permalink / raw)
  To: Philip K.; +Cc: 39886, stefan

"Philip K." <philipk@posteo.net> writes:

> I agree, submitting this as a core-patch was the wrong approach. What's
> the procedure for submitting a ELPA package?

I was saying that submitting it to Emacs core was the right approach.
:-)

For instance, when a user clicks on a "verify this signed article"
button in Gnus/rmail, the key should be downloaded from a key server
automatically, and if I understand your package correctly, it allows
doing so?

But for this to work seamlessly, your package has to be in Emacs core,
otherwise Gnus/rmail can't rely on it as easily.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 19+ messages in thread

* bug#39886: [PATCH] Add EPA keyserver client
  2020-08-09  9:52         ` Lars Ingebrigtsen
@ 2020-08-09 11:28           ` Philip K.
  2020-08-09 19:41             ` Lars Ingebrigtsen
  0 siblings, 1 reply; 19+ messages in thread
From: Philip K. @ 2020-08-09 11:28 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 39886, stefan

Lars Ingebrigtsen <larsi@gnus.org> writes:

> "Philip K." <philipk@posteo.net> writes:
>
>> I agree, submitting this as a core-patch was the wrong approach. What's
>> the procedure for submitting a ELPA package?
>
> I was saying that submitting it to Emacs core was the right approach.
> :-)

Oh my, I misread your message. Sorry for that.

> For instance, when a user clicks on a "verify this signed article"
> button in Gnus/rmail, the key should be downloaded from a key server
> automatically, and if I understand your package correctly, it allows
> doing so?

Yes, it implements the protocol and a basic UI. My only issues is that I
wrote this before I dove in to the EPA source, and realized that it more
or les depends on GnuPG. And if GnuGP is alreay given, I could just as
well use it's build-in functionallity for querying the server, without
having to reimplement it in Elisp.

> But for this to work seamlessly, your package has to be in Emacs core,
> otherwise Gnus/rmail can't rely on it as easily.

Couldn't it extend Gnus/rmail externally? Or could Gnus/rmail check if
it's feature is available?





^ permalink raw reply	[flat|nested] 19+ messages in thread

* bug#39886: [PATCH] Add EPA keyserver client
  2020-08-09 11:28           ` Philip K.
@ 2020-08-09 19:41             ` Lars Ingebrigtsen
  2021-05-12 16:45               ` Lars Ingebrigtsen
  0 siblings, 1 reply; 19+ messages in thread
From: Lars Ingebrigtsen @ 2020-08-09 19:41 UTC (permalink / raw)
  To: Philip K.; +Cc: 39886, stefan

philipk@posteo.net (Philip K.) writes:

> Yes, it implements the protocol and a basic UI. My only issues is that I
> wrote this before I dove in to the EPA source, and realized that it more
> or les depends on GnuPG. And if GnuGP is alreay given, I could just as
> well use it's build-in functionallity for querying the server, without
> having to reimplement it in Elisp.

Hm, yes, that's true...

>> But for this to work seamlessly, your package has to be in Emacs core,
>> otherwise Gnus/rmail can't rely on it as easily.
>
> Couldn't it extend Gnus/rmail externally? Or could Gnus/rmail check if
> it's feature is available?

That's possible, but these things always turn out cleaner and less
breakable if "applications" (like rmail) call libraries, instead of the
libraries extending the "applications".

And checking is always possible, but the user interface is often better
and less fragile if the applications can just rely in the infrastructure
being there.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 19+ messages in thread

* bug#39886: [PATCH] Add EPA keyserver client
  2020-08-09 19:41             ` Lars Ingebrigtsen
@ 2021-05-12 16:45               ` Lars Ingebrigtsen
  2021-05-12 16:52                 ` Philip Kaludercic
  2021-05-12 17:10                 ` Eli Zaretskii
  0 siblings, 2 replies; 19+ messages in thread
From: Lars Ingebrigtsen @ 2021-05-12 16:45 UTC (permalink / raw)
  To: Philip K.; +Cc: 39886, stefan

I've now added the library to Emacs 28 (with some changes for easier
testing).

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no






^ permalink raw reply	[flat|nested] 19+ messages in thread

* bug#39886: [PATCH] Add EPA keyserver client
  2021-05-12 16:45               ` Lars Ingebrigtsen
@ 2021-05-12 16:52                 ` Philip Kaludercic
  2021-05-12 16:57                   ` Lars Ingebrigtsen
  2021-05-12 17:10                 ` Eli Zaretskii
  1 sibling, 1 reply; 19+ messages in thread
From: Philip Kaludercic @ 2021-05-12 16:52 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 39886, stefan

Lars Ingebrigtsen <larsi@gnus.org> writes:

> I've now added the library to Emacs 28 (with some changes for easier
> testing).

The email address should probably be updated, in case someone decides to
send me a message directly.

-- 
	Philip K.





^ permalink raw reply	[flat|nested] 19+ messages in thread

* bug#39886: [PATCH] Add EPA keyserver client
  2021-05-12 16:52                 ` Philip Kaludercic
@ 2021-05-12 16:57                   ` Lars Ingebrigtsen
  0 siblings, 0 replies; 19+ messages in thread
From: Lars Ingebrigtsen @ 2021-05-12 16:57 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: 39886, stefan

Philip Kaludercic <philipk@posteo.net> writes:

> The email address should probably be updated, in case someone decides to
> send me a message directly.

OK; updated now.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 19+ messages in thread

* bug#39886: [PATCH] Add EPA keyserver client
  2021-05-12 16:45               ` Lars Ingebrigtsen
  2021-05-12 16:52                 ` Philip Kaludercic
@ 2021-05-12 17:10                 ` Eli Zaretskii
  2021-05-12 17:23                   ` Philip Kaludercic
  1 sibling, 1 reply; 19+ messages in thread
From: Eli Zaretskii @ 2021-05-12 17:10 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 39886, philipk, stefan

> From: Lars Ingebrigtsen <larsi@gnus.org>
> Date: Wed, 12 May 2021 18:45:15 +0200
> Cc: 39886@debbugs.gnu.org, stefan@marxist.se
> 
> I've now added the library to Emacs 28 (with some changes for easier
> testing).

I see there an interactive function whose name includes "--".  Is that
intentional?





^ permalink raw reply	[flat|nested] 19+ messages in thread

* bug#39886: [PATCH] Add EPA keyserver client
  2021-05-12 17:10                 ` Eli Zaretskii
@ 2021-05-12 17:23                   ` Philip Kaludercic
  2021-05-12 17:24                     ` Lars Ingebrigtsen
  0 siblings, 1 reply; 19+ messages in thread
From: Philip Kaludercic @ 2021-05-12 17:23 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 39886, Lars Ingebrigtsen, stefan

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Lars Ingebrigtsen <larsi@gnus.org>
>> Date: Wed, 12 May 2021 18:45:15 +0200
>> Cc: 39886@debbugs.gnu.org, stefan@marxist.se
>> 
>> I've now added the library to Emacs 28 (with some changes for easier
>> testing).
>
> I see there an interactive function whose name includes "--".  Is that
> intentional?

No, that must have been a mistake. Should it fix it?

-- 
	Philip K.





^ permalink raw reply	[flat|nested] 19+ messages in thread

* bug#39886: [PATCH] Add EPA keyserver client
  2021-05-12 17:23                   ` Philip Kaludercic
@ 2021-05-12 17:24                     ` Lars Ingebrigtsen
  2021-05-12 17:34                       ` Philip Kaludercic
  2021-05-12 17:52                       ` Philip Kaludercic
  0 siblings, 2 replies; 19+ messages in thread
From: Lars Ingebrigtsen @ 2021-05-12 17:24 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: 39886, stefan

Philip Kaludercic <philipk@posteo.net> writes:

> No, that must have been a mistake. Should it fix it?

Yes, a patch for that would be appreciated.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 19+ messages in thread

* bug#39886: [PATCH] Add EPA keyserver client
  2021-05-12 17:24                     ` Lars Ingebrigtsen
@ 2021-05-12 17:34                       ` Philip Kaludercic
  2021-05-12 17:52                       ` Philip Kaludercic
  1 sibling, 0 replies; 19+ messages in thread
From: Philip Kaludercic @ 2021-05-12 17:34 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 39886, stefan

Lars Ingebrigtsen <larsi@gnus.org> writes:

> Philip Kaludercic <philipk@posteo.net> writes:
>
>> No, that must have been a mistake. Should it fix it?
>
> Yes, a patch for that would be appreciated.

I requested access to the savannah repo a few months ago, if nobody
minds, I could also push the fixes directly (among other issues I have
also noticed).

-- 
	Philip K.





^ permalink raw reply	[flat|nested] 19+ messages in thread

* bug#39886: [PATCH] Add EPA keyserver client
  2021-05-12 17:24                     ` Lars Ingebrigtsen
  2021-05-12 17:34                       ` Philip Kaludercic
@ 2021-05-12 17:52                       ` Philip Kaludercic
  2021-05-12 18:00                         ` Lars Ingebrigtsen
  1 sibling, 1 reply; 19+ messages in thread
From: Philip Kaludercic @ 2021-05-12 17:52 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 39886, stefan

[-- Attachment #1: Type: text/plain, Size: 249 bytes --]

Lars Ingebrigtsen <larsi@gnus.org> writes:

> Philip Kaludercic <philipk@posteo.net> writes:
>
>> No, that must have been a mistake. Should it fix it?
>
> Yes, a patch for that would be appreciated.

This should be more consistent:

-- 
	Philip K.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Don-t-mark-interactive-commands-as-internal-function.patch --]
[-- Type: text/x-diff, Size: 2484 bytes --]

From 6ef0a95dcd7f4344b563788a57abf9e504364c11 Mon Sep 17 00:00:00 2001
From: Philip K <philipk@posteo.net>
Date: Wed, 12 May 2021 19:27:54 +0200
Subject: [PATCH] Don't mark interactive commands as internal functions

---
 lisp/epa-ks.el | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/lisp/epa-ks.el b/lisp/epa-ks.el
index af2398c128..a33025b112 100644
--- a/lisp/epa-ks.el
+++ b/lisp/epa-ks.el
@@ -68,9 +68,9 @@ epa-ks-last-query
 (defvar epa-ks-search-mode-map
   (let ((map (make-sparse-keymap)))
     (suppress-keymap map)
-    (define-key map (kbd "f") #'epa-ks--mark-key-to-fetch)
-    (define-key map (kbd "i") #'epa-ks--inspect-key-to-fetch)
-    (define-key map (kbd "u") #'epa-ks--unmark-key-to-fetch)
+    (define-key map (kbd "f") #'epa-ks-mark-key-to-fetch)
+    (define-key map (kbd "i") #'epa-ks-inspect-key-to-fetch)
+    (define-key map (kbd "u") #'epa-ks-unmark-key-to-fetch)
     (define-key map (kbd "x") #'epa-ks-do-key-to-fetch)
     map))
 
@@ -89,19 +89,19 @@ epa-ks-search-mode
             nil t)
   (tabulated-list-init-header))
 
-(defun epa-ks--inspect-key-to-fetch ()
+(defun epa-ks-inspect-key-to-fetch ()
   "Display full ID of key under point in the minibuffer."
   (interactive)
   (message "Full ID: %s" (epa-ks-key-id (car (tabulated-list-get-id)))))
 
-(defun epa-ks--unmark-key-to-fetch ()
+(defun epa-ks-unmark-key-to-fetch ()
   "Remove fetch mark for key under point.
 
 If a region is active, unmark all keys in active region."
   (interactive)
-  (epa-ks--mark-key-to-fetch ""))
+  (epa-ks-mark-key-to-fetch ""))
 
-(defun epa-ks--mark-key-to-fetch (tag)
+(defun epa-ks-mark-key-to-fetch (tag)
   "Add fetch-mark to key under point.
 
 If a region is active, mark all keys in active region.
@@ -109,7 +109,7 @@ epa-ks--mark-key-to-fetch
 When all keys have been selected, use \\[epa-ks-do-key-to-fetch] to
 actually import the keys.
 
-When called interactively, `epa-ks--mark-key-to-fetch' will always
+When called interactively, `epa-ks-mark-key-to-fetch' will always
 add a \"F\" tag.  Non-interactivly the tag must be specified by
 setting the TAG parameter."
   (interactive (list "F"))
@@ -125,7 +125,7 @@ epa-ks--mark-key-to-fetch
 (defun epa-ks-do-key-to-fetch ()
   "Fetch all marked keys from keyserver and import them.
 
-Keys are marked using `epa-ks--mark-key-to-fetch'."
+Keys are marked using `epa-ks-mark-key-to-fetch'."
   (interactive)
   (save-excursion
     (let (keys)
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* bug#39886: [PATCH] Add EPA keyserver client
  2021-05-12 17:52                       ` Philip Kaludercic
@ 2021-05-12 18:00                         ` Lars Ingebrigtsen
  0 siblings, 0 replies; 19+ messages in thread
From: Lars Ingebrigtsen @ 2021-05-12 18:00 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: 39886, stefan

Philip Kaludercic <philipk@posteo.net> writes:

>> Yes, a patch for that would be appreciated.
>
> This should be more consistent:

Thanks; applied now.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2021-05-12 18:00 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-03 16:23 bug#39886: [PATCH] Add EPA keyserver client Philip K
     [not found] ` <CADwFkm=iPrhJaBhntAFcQPnRerHSsTY1Lc1gihMR06fVrVR_cQ@mail.gmail.com>
2020-05-19 10:08   ` Philip K.
2020-05-19 13:50     ` Stefan Kangas
2020-08-08 13:59     ` Lars Ingebrigtsen
2020-08-08 14:42       ` Stefan Kangas
2020-08-08 14:51       ` Colin Baxter
2020-08-08 17:20       ` Philip K.
2020-08-09  9:52         ` Lars Ingebrigtsen
2020-08-09 11:28           ` Philip K.
2020-08-09 19:41             ` Lars Ingebrigtsen
2021-05-12 16:45               ` Lars Ingebrigtsen
2021-05-12 16:52                 ` Philip Kaludercic
2021-05-12 16:57                   ` Lars Ingebrigtsen
2021-05-12 17:10                 ` Eli Zaretskii
2021-05-12 17:23                   ` Philip Kaludercic
2021-05-12 17:24                     ` Lars Ingebrigtsen
2021-05-12 17:34                       ` Philip Kaludercic
2021-05-12 17:52                       ` Philip Kaludercic
2021-05-12 18:00                         ` Lars Ingebrigtsen

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).