gnu: Add "guile3.0-" package variants.
[jackhill/guix/guix.git] / gnu / packages / gnupg.scm
index c095a96..58def3d 100644 (file)
@@ -1,19 +1,19 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013, 2015, 2018 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2014, 2018 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
-;;; Copyright © 2015, 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Christopher Allan Webber <cwebber@dustycloud.org>
-;;; Copyright © 2016, 2017 Nils Gillmann <ng0@n0.is>
+;;; Copyright © 2016, 2017 ng0 <ng0@n0.is>
 ;;; Copyright © 2016 Christopher Baines <mail@cbaines.net>
 ;;; Copyright © 2016 Mike Gerwitz <mtg@gnu.org>
 ;;; Copyright © 2016 Troy Sankey <sankeytms@gmail.com>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Petter <petter@mykolab.ch>
-;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
   #:use-module (gnu packages curl)
   #:use-module (gnu packages crypto)
   #:use-module (gnu packages emacs)
+  #:use-module (gnu packages enlightenment)
+  #:use-module (gnu packages gettext)
+  #:use-module (gnu packages guile)
   #:use-module (gnu packages openldap)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages perl-check)
   #:use-module (gnu packages pth)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages compression)
-  #:use-module (gnu packages databases)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages security-token)
+  #:use-module (gnu packages sqlite)
   #:use-module (gnu packages swig)
+  #:use-module (gnu packages texinfo)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages tor)
   #:use-module (gnu packages web)
   #:use-module (guix git-download)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
-  #:use-module (guix build-system python))
+  #:use-module (guix build-system python)
+  #:use-module (srfi srfi-1))
 
 (define-public libgpg-error
   (package
     (name "libgpg-error")
-    (version "1.28")
+    (version "1.32")
     (source
      (origin
       (method url-fetch)
@@ -78,8 +84,7 @@
                           version ".tar.bz2"))
       (sha256
        (base32
-        "0jfsfnh9bxlxiwxws60yah4ybjw2hshmvqp31pri4m4h8ivrbnry"))
-      (patches (search-patches "libgpg-error-aarch64-logging-fix.patch"))))
+        "1jj08ns4sh1hmafqp1giskvdicdz18la516va26jycy27kkwaif3"))))
     (build-system gnu-build-system)
     (home-page "https://gnupg.org")
     (synopsis "Library of error values for GnuPG components")
@@ -92,32 +97,19 @@ Daemon and possibly more in the future.")
     (properties '((ftp-server . "ftp.gnupg.org")
                   (ftp-directory . "/gcrypt/libgpg-error")))))
 
-;; Some packages (e.g. GPGME) require a newer libgpg-error to deal with
-;; error codes from recent GnuPG.  Remove this in the next rebuild cycle.
-(define-public libgpg-error-1.31
-  (package
-    (inherit libgpg-error)
-    (version "1.31")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnupg/libgpg-error/libgpg-error-"
-                                  version ".tar.bz2"))
-              (sha256
-               (base32
-                "1vx4nw6rxh2biy3h8n96fyr86q29h8gjl6837437i51jr4isil20"))))))
-
 (define-public libgcrypt
   (package
-    (replacement libgcrypt/fixed)
     (name "libgcrypt")
-    (version "1.8.2")
+    (version "1.8.3")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnupg/libgcrypt/libgcrypt-"
                                  version ".tar.bz2"))
              (sha256
               (base32
-               "01sca9m8hm6b5v8hmqsfdjhyz013869p1f0fxw9ln52qfnp4q1n8"))))
+               "0z5gs1khzyknyfjr19k8gk4q148s6q987ya85cpn0iv70fz91v36"))
+             (patches
+              (search-patches "libgcrypt-make-yat2m-reproducible.patch"))))
     (build-system gnu-build-system)
     (propagated-inputs
      `(("libgpg-error-host" ,libgpg-error)))
@@ -143,23 +135,10 @@ generation.")
     (properties '((ftp-server . "ftp.gnupg.org")
                   (ftp-directory . "/gcrypt/libgcrypt")))))
 
-(define libgcrypt/fixed
-  (package
-    (inherit libgcrypt)
-    (name "libgcrypt")
-    (version "1.8.3")
-    (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://gnupg/libgcrypt/libgcrypt-"
-                                 version ".tar.bz2"))
-             (sha256
-              (base32
-               "0z5gs1khzyknyfjr19k8gk4q148s6q987ya85cpn0iv70fz91v36"))))))
-
 (define-public libassuan
   (package
     (name "libassuan")
-    (version "2.5.1")
+    (version "2.5.3")
     (source
      (origin
       (method url-fetch)
@@ -167,7 +146,7 @@ generation.")
                           version ".tar.bz2"))
       (sha256
        (base32
-        "0jb4nb4nrjr949gd3lw8lh4v5d6qigxaq6xwy24w5apjnhvnrya7"))))
+        "00p7cpvzf0q3qwcgg51r9d0vbab4qga2xi8wpk2fgd36710b1g4i"))))
     (build-system gnu-build-system)
     (propagated-inputs
      `(("libgpg-error" ,libgpg-error)
@@ -222,14 +201,13 @@ specifications are building blocks of S/MIME and TLS.")
 (define-public npth
   (package
     (name "npth")
-    (version "1.5")
+    (version "1.6")
     (source
      (origin
-      (method url-fetch)
-      (uri (string-append "mirror://gnupg/npth/npth-" version ".tar.bz2"))
-      (sha256
-       (base32
-        "1hmkkp6vzyrh8v01c2ynzf9vwikyagp7p1lxhbnr4ysk3w66jji9"))))
+       (method url-fetch)
+       (uri (string-append "mirror://gnupg/npth/npth-" version ".tar.bz2"))
+       (sha256
+        (base32 "1lg2lkdd3z1s3rpyf88786l243adrzyk9p4q8z9n41ygmpcsp4qk"))))
     (build-system gnu-build-system)
     (home-page "https://www.gnupg.org")
     (synopsis "Non-preemptive thread library")
@@ -240,19 +218,21 @@ threads implementation.
 In contrast to GNU Pth is is based on the system's standard threads
 implementation.  This allows the use of libraries which are not
 compatible to GNU Pth.")
-    (license (list license:lgpl3+ license:gpl2+)))) ; dual license
+    (license (list license:lgpl3+ license:gpl2+)) ; dual license
+    (properties '((ftp-server . "ftp.gnupg.org")
+                  (ftp-directory . "/gcrypt/npth")))))
 
 (define-public gnupg
   (package
     (name "gnupg")
-    (version "2.2.9")
+    (version "2.2.17")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnupg/gnupg/gnupg-" version
                                   ".tar.bz2"))
               (sha256
                (base32
-                "0r11mx8nkh7ysrnshs560amha5csx8zcaggb5kxcksx1zymyly32"))))
+                "056mgy09lvsi03531a437qj58la1j2x1y1scvfi53diris3658mg"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -390,21 +370,19 @@ libskba (working with X.509 certificates and CMS data).")
 (define-public gpgme
   (package
     (name "gpgme")
-    (version "1.11.1")
+    (version "1.13.1")
     (source
      (origin
       (method url-fetch)
-      (uri (string-append "mirror://gnupg/gpgme/gpgme-" version
-                          ".tar.bz2"))
+      (uri (string-append "mirror://gnupg/gpgme/gpgme-" version ".tar.bz2"))
       (sha256
-       (base32
-        "0vxx5xaag3rhp4g2arp5qm77gvz4kj0m3hnpvhkdvqyjfhbi26rd"))))
+       (base32 "0imyjfryvvjdbai454p70zcr95m94j9xnzywrlilqdw2fqi0pqy4"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("gnupg" ,gnupg)))
     (propagated-inputs
      ;; Needs to be propagated because gpgme.h includes gpg-error.h.
-     `(("libgpg-error" ,libgpg-error-1.31)))
+     `(("libgpg-error" ,libgpg-error)))
     (inputs
      `(("libassuan" ,libassuan)))
     (home-page "https://www.gnupg.org/related_software/gpgme/")
@@ -419,7 +397,9 @@ Because the direct use of GnuPG from an application can be a complicated
 programming task, it is suggested that all software should try to use GPGME
 instead.  This way bug fixes or improvements can be done at a central place
 and every application benefits from this.")
-    (license license:lgpl2.1+)))
+    (license license:lgpl2.1+)
+    (properties '((ftp-server . "ftp.gnupg.org")
+                  (ftp-directory . "/gcrypt/gpgme")))))
 
 (define-public qgpgme
   (package
@@ -451,19 +431,73 @@ QGpgME was originally developed as part of libkleo and incorporated into
 gpgpme starting with version 1.7.")
     (license license:gpl2+))) ;; Note: this differs from gpgme
 
+(define-public guile-gcrypt
+  (package
+    (name "guile-gcrypt")
+    (version "0.2.0")
+    (home-page "https://notabug.org/cwebber/guile-gcrypt")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url (string-append home-page ".git"))
+                    (commit (string-append "v" version))))
+              (sha256
+               (base32
+                "1mhc5m4xygkfj7x18f8apiqpfdn9mrql0am5sk13cf5xn8x1r63z"))
+              (file-name (string-append name "-" version "-checkout"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("texinfo" ,texinfo)))
+    (inputs
+     `(("guile" ,guile-2.2)
+       ("libgcrypt" ,libgcrypt)))
+    (synopsis "Cryptography library for Guile using Libgcrypt")
+    (description
+     "Guile-Gcrypt provides a Guile 2.x interface to a subset of the
+GNU Libgcrypt crytographic library.  It provides modules for cryptographic
+hash functions, message authentication codes (MAC), public-key cryptography,
+strong randomness, and more.  It is implemented using the foreign function
+interface (FFI) of Guile.")
+    (license license:gpl3+)))
+
+(define-public guile2.0-gcrypt
+  (package (inherit guile-gcrypt)
+    (name "guile2.0-gcrypt")
+    (inputs
+     `(("guile" ,guile-2.0)
+       ,@(alist-delete "guile" (package-inputs guile-gcrypt))))))
+
+(define-public guile3.0-gcrypt
+  (package
+    (inherit guile-gcrypt)
+    (name "guile3.0-gcrypt")
+    (inputs
+     `(("guile" ,guile-next)
+       ,@(alist-delete "guile" (package-inputs guile-gcrypt))))))
+
 (define-public python-gpg
   (package
     (name "python-gpg")
-    (version "1.8.0")
+    (version "1.10.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "gpg" version))
               (sha256
                (base32
-                "1x74i6q713c0bckls7rdm8kgsmllf9qvy9x62jghszlhgjkyh9nd"))))
+                "1ji3ynhp36m1ccx7bmaq75dhij9frpn19v9mpi4aajn8csl194il"))))
     (build-system python-build-system)
     (arguments
-     '(#:tests? #f)) ; No test suite.
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'set-environment
+           (lambda _
+             (substitute* "setup.py"
+               (("cc") (which "gcc")))
+             #t)))
+       #:tests? #f)) ; No test suite.
     (inputs
      `(("gpgme" ,gpgme)))
     (native-inputs
@@ -498,11 +532,9 @@ distributed separately.")
      `(#:phases
        (modify-phases %standard-phases
          (add-before 'build 'make-build
-           (lambda _
-             (zero? (system* "make" "build"))))
+           (lambda _ (invoke "make" "build")))
          (replace 'check
-           (lambda _
-             (zero? (system* "make" "check")))))))
+           (lambda _ (invoke "make" "check"))))))
     (build-system python-build-system)
     (native-inputs
      `(("gnupg" ,gnupg-1)))
@@ -521,14 +553,14 @@ decrypt messages using the OpenPGP format by making use of GPGME.")
 (define-public python-gnupg
   (package
     (name "python-gnupg")
-    (version "0.4.3")
+    (version "0.4.4")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "python-gnupg" version))
        (sha256
         (base32
-         "03dc8whhvk7ccspbk8vzfhkxli8cd9zfbss5p597g4jldgy8s59d"))))
+         "03pvjyp6q9pr8qa22i38az06ddzhvzy5kj192hxa3gbhnchg1nj5"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -585,7 +617,7 @@ and signature functionality from Python programs.")
     (native-inputs
      `(("which" ,which)
        ("perl-module-install" ,perl-module-install)))
-    (home-page "http://search.cpan.org/dist/GnuPG-Interface/")
+    (home-page "https://metacpan.org/release/GnuPG-Interface")
     (synopsis "Perl interface to GnuPG")
     (description "@code{GnuPG::Interface} and its associated modules are
 designed to provide an object-oriented method for interacting with GnuPG,
@@ -596,7 +628,7 @@ signing, decryption, verification, and key-listing parsing.")
 (define-public pius
   (package
    (name "pius")
-   (version "2.2.6")
+   (version "2.2.7")
    (source (origin
             (method url-fetch)
             (uri (string-append
@@ -604,15 +636,14 @@ signing, decryption, verification, and key-listing parsing.")
                   version "/pius-" version ".tar.bz2"))
             (sha256
              (base32
-              "1893hzpx3zv724drqv48csrn0cm98xw4ymb1zmhs2jvjj1778zfj"))
-            (patches (search-patches "pius.patch"))))
+              "1nsl7czicv95j0gfz4s82ys3g3h2mwr6cq3ilid8bpz3iy7z4ipy"))))
    (build-system python-build-system)
-   (inputs `(("perl" ,perl)                ;for 'pius-party-worksheet'
+   (inputs `(("perl" ,perl)             for 'pius-party-worksheet'
              ("gpg" ,gnupg)
              ("python-six" ,python2-six)))
    (arguments
     `(#:tests? #f
-      #:python ,python-2                     ;uses the Python 2 'print' syntax
+      #:python ,python-2                uses the Python 2 'print' syntax
       #:phases
       (modify-phases %standard-phases
         (add-before
@@ -637,87 +668,86 @@ PGP keysigning parties.")
    (home-page "https://www.phildev.net/pius/index.shtml")))
 
 (define-public signing-party
-  ;; Upstream moved from alioth.debian.org to salsa.debian.org but the
-  ;; automatic svn import did not preserve tags apparently, so there's no real
-  ;; version number.
-  (let ((commit "d6f2296325605ee96ddf9f5b156e5e3f667a6df3")
-        (revision "0"))
-    (package
-      (name "signing-party")
-      (version (git-version "2.6" revision commit))
-      (home-page "https://salsa.debian.org/stappers/pgp-tools")
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url home-page)
-                      (commit commit)))
-                (sha256
-                 (base32
-                  "00f7zasbwcbjzd92br2j10pyjxv0aw1qb4540qfz2dxzxgmdscrz"))))
-      (build-system gnu-build-system)
-      (native-inputs
-       `(("autoconf" ,autoconf-wrapper)
-         ("automake" ,automake)))
-      (inputs `(("perl" ,perl)
-                ("perl-text-template" ,perl-text-template)
-                ("perl-mime-tools" ,perl-mime-tools)
-                ("perl-gnupg-interface" ,perl-gnupg-interface)
-                ("perl-net-idn-encode" ,perl-net-idn-encode)
-                ("libmd" ,libmd)))
-      (arguments
-       `(#:tests? #f
-         #:phases
-         (modify-phases %standard-phases
-           (replace 'configure
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let ((out (assoc-ref outputs "out")))
-                 (substitute* "keyanalyze/Makefile"
-                   (("LDLIBS") (string-append "CC=" (which "gcc") "\nLDLIBS")))
-                 (substitute* "keyanalyze/Makefile"
-                   (("\\./configure") (string-append "./configure --prefix=" out)))
-                 (substitute* "gpgwrap/Makefile"
-                   (("\\} clean")
-                    (string-append "} clean\ninstall:\n\tinstall -D bin/gpgwrap "
-                                   out "/bin/gpgwrap\n")))
-                 (substitute* '("gpgsigs/Makefile" "keyanalyze/Makefile"
-                                "keylookup/Makefile" "sig2dot/Makefile"
-                                "springgraph/Makefile")
-                   (("/usr") out))
-                 (setenv "CONFIG_SHELL" (which "sh")))))
-           (replace 'install
-             (lambda* (#:key outputs #:allow-other-keys #:rest args)
-               (let ((out (assoc-ref outputs "out"))
-                     (install (assoc-ref %standard-phases 'install)))
-                 (apply install args)
-                 (for-each
-                  (lambda (dir file)
-                    (copy-file (string-append dir "/" file)
-                               (string-append out "/bin/" file)))
-                  '("caff" "caff" "caff" "gpgdir" "gpg-key2ps"
-                    "gpglist" "gpg-mailkeys" "gpgparticipants")
-                  '("caff" "pgp-clean" "pgp-fixkey" "gpgdir" "gpg-key2ps"
-                    "gpglist" "gpg-mailkeys" "gpgparticipants"))
-                 (for-each
-                  (lambda (dir file)
-                    (copy-file (string-append dir "/" file)
-                               (string-append out "/share/man/man1/" file)))
-                  '("caff" "caff" "caff" "gpgdir"
-                    "gpg-key2ps" "gpglist" "gpg-mailkeys"
-                    "gpgparticipants" "gpgsigs" "gpgwrap/doc"
-                    "keyanalyze" "keyanalyze/pgpring" "keyanalyze")
-                  '("caff.1" "pgp-clean.1" "pgp-fixkey.1" "gpgdir.1"
-                    "gpg-key2ps.1" "gpglist.1" "gpg-mailkeys.1"
-                    "gpgparticipants.1" "gpgsigs.1" "gpgwrap.1"
-                    "process_keys.1" "pgpring.1" "keyanalyze.1")))))
-           (add-after 'install 'wrap-programs
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let* ((out (assoc-ref outputs "out")))
-                 (wrap-program
-                     (string-append out "/bin/caff")
-                   `("PERL5LIB" ":" prefix (,(getenv "PERL5LIB"))))))))))
-      (synopsis "Collection of scripts for simplifying gnupg key signing")
-      (description
-       "Signing-party is a collection for all kinds of PGP/GnuPG related things,
+  (package
+    (name "signing-party")
+    (version "2.10")
+    (home-page "https://salsa.debian.org/signing-party-team/signing-party")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url home-page)
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0lq8nmwjmysry0n4jg6vb7bh0lagbyb9pa11ii3s41p1mhzchf2r"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("autoconf" ,autoconf-wrapper)
+       ("automake" ,automake)))
+    (inputs `(("perl" ,perl)
+              ("perl-text-template" ,perl-text-template)
+              ("perl-mime-tools" ,perl-mime-tools)
+              ("perl-gnupg-interface" ,perl-gnupg-interface)
+              ("perl-net-idn-encode" ,perl-net-idn-encode)
+              ("libmd" ,libmd)))
+    (arguments
+     `(#:tests? #f ; no test suite
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (substitute* "keyanalyze/Makefile"
+                 (("LDLIBS") (string-append "CC=" (which "gcc") "\nLDLIBS")))
+               (substitute* "keyanalyze/Makefile"
+                 (("\\./configure") (string-append "./configure --prefix=" out)))
+               (substitute* "gpgwrap/Makefile"
+                 (("\\} clean")
+                  (string-append "} clean\ninstall:\n\tinstall -D bin/gpgwrap "
+                                 out "/bin/gpgwrap\n")))
+               (substitute* '("gpgsigs/Makefile" "keyanalyze/Makefile"
+                              "keylookup/Makefile" "sig2dot/Makefile"
+                              "springgraph/Makefile")
+                 (("/usr") out))
+               (setenv "CONFIG_SHELL" (which "sh")))
+             #t))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys #:rest args)
+             (let ((out (assoc-ref outputs "out"))
+                   (install (assoc-ref %standard-phases 'install)))
+               (apply install args)
+               (for-each
+                (lambda (dir file)
+                  (copy-file (string-append dir "/" file)
+                             (string-append out "/bin/" file)))
+                '("caff" "caff" "caff" "gpgdir" "gpg-key2ps"
+                  "gpglist" "gpg-mailkeys" "gpgparticipants")
+                '("caff" "pgp-clean" "pgp-fixkey" "gpgdir" "gpg-key2ps"
+                  "gpglist" "gpg-mailkeys" "gpgparticipants"))
+               (for-each
+                (lambda (dir file)
+                  (copy-file (string-append dir "/" file)
+                             (string-append out "/share/man/man1/" file)))
+                '("caff" "caff" "caff" "gpgdir"
+                  "gpg-key2ps" "gpglist" "gpg-mailkeys"
+                  "gpgparticipants" "gpgsigs" "gpgwrap/doc"
+                  "keyanalyze" "keyanalyze/pgpring" "keyanalyze")
+                '("caff.1" "pgp-clean.1" "pgp-fixkey.1" "gpgdir.1"
+                  "gpg-key2ps.1" "gpglist.1" "gpg-mailkeys.1"
+                  "gpgparticipants.1" "gpgsigs.1" "gpgwrap.1"
+                  "process_keys.1" "pgpring.1" "keyanalyze.1")))
+             #t))
+         (add-after 'install 'wrap-programs
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out")))
+               (wrap-program
+                   (string-append out "/bin/caff")
+                 `("PERL5LIB" ":" prefix (,(getenv "PERL5LIB")))))
+             #t)))))
+    (synopsis "Collection of scripts for simplifying gnupg key signing")
+    (description
+     "Signing-party is a collection for all kinds of PGP/GnuPG related things,
 including tools for signing keys, keyring analysis, and party preparation.
 @enumerate
 @item caff: CA - Fire and Forget signs and mails a key
@@ -735,10 +765,10 @@ including tools for signing keys, keyring analysis, and party preparation.
 @item sig2dot: converts a list of GnuPG signatures to a .dot file
 @item springgraph: creates a graph from a .dot file
 @end enumerate")
-      ;; gpl2+ for almost all programs, except for keyanalyze: gpl2
-      ;; and caff and gpgsigs: bsd-3, see
-      ;; http://packages.debian.org/changelogs/pool/main/s/signing-party/current/copyright
-      (license license:gpl2))))
+    ;; gpl2+ for almost all programs, except for keyanalyze: gpl2
+    ;; and caff and gpgsigs: bsd-3, see
+    ;; http://packages.debian.org/changelogs/pool/main/s/signing-party/current/copyright
+    (license license:gpl2)))
 
 (define-public pinentry-tty
   (package
@@ -821,6 +851,34 @@ software.")))
    "Pinentry provides a console and a Qt GUI that allows users to enter a
 passphrase when @code{gpg} is run and needs it.")))
 
+(define-public pinentry-efl
+  (package
+    (inherit pinentry-tty)
+    (name "pinentry-efl")
+    (source
+      (origin
+        (inherit (package-source pinentry-tty))
+        (patches (search-patches "pinentry-efl.patch"))))
+    (arguments
+     '(#:configure-flags '("--enable-pinentry-efl")
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'bootstrap
+           (lambda _
+             (invoke "sh" "autogen.sh"))))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("gettext" ,gettext-minimal)
+       ,@(package-native-inputs pinentry-tty)))
+    (inputs
+     `(("efl" ,efl)
+       ,@(package-inputs pinentry-tty)))
+    (description
+   "Pinentry provides a console and a graphical interface for the
+@dfn{Enlightenment Foundation Libraries} (EFL) that allows users to enter a
+passphrase when @code{gpg} is run and needs it.")))
+
 (define-public pinentry
   (package (inherit pinentry-gtk2)
     (name "pinentry")))
@@ -857,17 +915,45 @@ bytes (whether by hand, OCR, QR code, or the like) and paperkey can use
 them to transform your existing public key into a secret key.")
     (license license:gpl2+)))
 
+(define-public pgpdump
+  (package
+    (name "pgpdump")
+    (version "0.33")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.mew.org/~kazu/proj/pgpdump/pgpdump-"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "1j001jra2m89n6cys3n0hs574bipjdzfxhzpnd4jfyv95mqwl7n4"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; no make check
+       #:configure-flags (list "--prefix=/")
+       #:make-flags (list "CC=gcc"
+                          (string-append "DESTDIR=" (assoc-ref %outputs "out")))))
+    (inputs
+     `(("zlib" ,zlib)))
+    (home-page "https://www.mew.org/~kazu/proj/pgpdump/en/")
+    (synopsis "PGP packet visualizer")
+    (description "pgpdump displays the sequence of OpenPGP or PGP version 2
+packets from a file.
+
+The output of this command is similar to GnuPG's list packets command,
+however, pgpdump produces more detailed and easier to understand output.")
+    (license license:bsd-3)))
+
 (define-public gpa
   (package
     (name "gpa")
-    (version "0.9.10")
+    (version "0.10.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnupg/gpa/"
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "09xphbi2456qynwqq5n0yh0zdmdi2ggrj3wk4hsyh5lrzlvcrff3"))))
+                "1cbpc45f8qbdkd62p12s3q2rdq6fa5xdzwmcwd3xrj55bzkspnwm"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -883,7 +969,9 @@ them to transform your existing public key into a secret key.")
      "GPA, the GNU Privacy Assistant, is a graphical user interface for
 @uref{https://gnupg.org, GnuPG}.  It can be used to encrypt, decrypt, and sign
 files, to verify signatures, and to manage the private and public keys.")
-    (license license:gpl3+)))
+    (license license:gpl3+)
+    (properties '((ftp-server . "ftp.gnupg.org")
+                  (ftp-directory . "/gcrypt/gpa")))))
 
 (define-public parcimonie
   (package
@@ -891,8 +979,8 @@ files, to verify signatures, and to manage the private and public keys.")
     (version "0.10.3")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://gaffer.ptitcanardnoir.org/"
-                                  "intrigeri/files/parcimonie/App-Parcimonie-"
+              (uri (string-append "https://gaffer.boum.org/intrigeri/files/"
+                                  "parcimonie/App-Parcimonie-"
                                   version ".tar.gz"))
               (sha256
                (base32
@@ -962,7 +1050,7 @@ files, to verify signatures, and to manage the private and public keys.")
                  `("PERL5LIB" ":"
                    prefix (,(string-append perllib ":" (getenv "PERL5LIB")))))
                #t))))))
-    (home-page "https://gaffer.ptitcanardnoir.org/intrigeri/code/parcimonie/")
+    (home-page "https://gaffer.boum.org/intrigeri/code/parcimonie/")
     (synopsis "Incrementally refreshes a GnuPG keyring")
     (description "Parcimonie incrementaly refreshes a GnuPG keyring in a way
 that makes it hard to correlate the keyring content to an individual, and