gnu: fontconfig: Add replacement with font-dejavu instead of gs-fonts.
[jackhill/guix/guix.git] / gnu / packages / gnupg.scm
CommitLineData
233e7676 1;;; GNU Guix --- Functional package management for GNU
e4257138 2;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
a92d9726 3;;; Copyright © 2013, 2015, 2018 Andreas Enge <andreas@enge.fr>
c8e3651a 4;;; Copyright © 2014, 2018 Eric Bavier <bavier@member.fsf.org>
3a7261bf 5;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
5dabdb75 6;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
9d14a67d 7;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
1d7b8a24 8;;; Copyright © 2015, 2016, 2017, 2019 Ricardo Wurmus <rekado@elephly.net>
a05d1d82 9;;; Copyright © 2016 Christopher Allan Webber <cwebber@dustycloud.org>
3c986a7d 10;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
41edb23f 11;;; Copyright © 2016 Christopher Baines <mail@cbaines.net>
cd9ed6c1 12;;; Copyright © 2016 Mike Gerwitz <mtg@gnu.org>
0f391063 13;;; Copyright © 2016 Troy Sankey <sankeytms@gmail.com>
e5b44b06 14;;; Copyright © 2017, 2020 Leo Famulari <leo@famulari.name>
5aeb6611 15;;; Copyright © 2017 Petter <petter@mykolab.ch>
7e0f9df9 16;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
24496210 17;;; Copyright © 2018, 2019 Marius Bakke <mbakke@fastmail.com>
02d83c24 18;;; Copyright © 2018 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
891fd849 19;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
8d1939e4 20;;;
233e7676 21;;; This file is part of GNU Guix.
8d1939e4 22;;;
233e7676 23;;; GNU Guix is free software; you can redistribute it and/or modify it
8d1939e4
LC
24;;; under the terms of the GNU General Public License as published by
25;;; the Free Software Foundation; either version 3 of the License, or (at
26;;; your option) any later version.
27;;;
233e7676 28;;; GNU Guix is distributed in the hope that it will be useful, but
8d1939e4
LC
29;;; WITHOUT ANY WARRANTY; without even the implied warranty of
30;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
31;;; GNU General Public License for more details.
32;;;
33;;; You should have received a copy of the GNU General Public License
233e7676 34;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
8d1939e4 35
1ffa7090 36(define-module (gnu packages gnupg)
07157e8a 37 #:use-module ((guix licenses) #:prefix license:)
a05d1d82 38 #:use-module (gnu packages)
7b40296f 39 #:use-module (gnu packages adns)
c9ce8e17 40 #:use-module (gnu packages autotools)
34ef5755 41 #:use-module (gnu packages base)
01e11826 42 #:use-module (gnu packages curl)
c9ce8e17 43 #:use-module (gnu packages crypto)
abc4a332 44 #:use-module (gnu packages emacs)
5e369f8a
EF
45 #:use-module (gnu packages enlightenment)
46 #:use-module (gnu packages gettext)
b0cb92b2 47 #:use-module (gnu packages guile)
01e11826 48 #:use-module (gnu packages openldap)
ea4d96c6 49 #:use-module (gnu packages perl)
5ccde207 50 #:use-module (gnu packages perl-check)
1ffa7090 51 #:use-module (gnu packages pth)
ea4d96c6 52 #:use-module (gnu packages python)
44d10b1f 53 #:use-module (gnu packages python-xyz)
54df7558 54 #:use-module (gnu packages qt)
1ffa7090 55 #:use-module (gnu packages readline)
07157e8a 56 #:use-module (gnu packages compression)
40d806af
LC
57 #:use-module (gnu packages gtk)
58 #:use-module (gnu packages glib)
d1d75c6a 59 #:use-module (gnu packages gnome)
40d806af
LC
60 #:use-module (gnu packages pkg-config)
61 #:use-module (gnu packages ncurses)
cd9ed6c1 62 #:use-module (gnu packages security-token)
cd0322a3 63 #:use-module (gnu packages sqlite)
e3dd1f0c 64 #:use-module (gnu packages swig)
b0cb92b2 65 #:use-module (gnu packages texinfo)
a7fd7b68 66 #:use-module (gnu packages tls)
15b08442
P
67 #:use-module (gnu packages tor)
68 #:use-module (gnu packages web)
2e6618fc 69 #:use-module (gnu packages xorg)
15b08442 70 #:use-module (gnu packages xml)
8d1939e4 71 #:use-module (guix packages)
87f5d366 72 #:use-module (guix download)
0f391063 73 #:use-module (guix git-download)
14e2e44d 74 #:use-module (guix build-system gnu)
34ef5755 75 #:use-module (guix build-system perl)
c8e3651a
EB
76 #:use-module (guix build-system python)
77 #:use-module (srfi srfi-1))
8d1939e4
LC
78
79(define-public libgpg-error
80 (package
81 (name "libgpg-error")
9640cd97 82 (version "1.37")
8d1939e4
LC
83 (source
84 (origin
87f5d366 85 (method url-fetch)
0db342a5 86 (uri (string-append "mirror://gnupg/libgpg-error/libgpg-error-"
8d1939e4
LC
87 version ".tar.bz2"))
88 (sha256
89 (base32
9640cd97 90 "0qwpx8mbc2l421a22l0l1hpzkip9jng06bbzgxwpkkvk5bvnybdk"))))
8d1939e4 91 (build-system gnu-build-system)
e373adc1
MO
92 (arguments
93 (if (%current-target-system)
94 `(#:modules ((ice-9 match)
95 (guix build gnu-build-system)
96 (guix build utils))
97 #:phases
98 (modify-phases %standard-phases
99 ;; When cross-compiling, some platform specific properties cannot
100 ;; be detected. Create a symlink to the appropriate platform
101 ;; file. See Cross-Compiling section at:
102 ;; https://github.com/gpg/libgpg-error/blob/master/README
103 (add-after 'unpack 'cross-symlinks
104 (lambda* (#:key target inputs #:allow-other-keys)
105 (let ((triplet
106 (match (string-take target
107 (string-index target #\-))
108 ("armhf" "arm-unknown-linux-gnueabi")
109 (x
110 (string-append x "-unknown-linux-gnu")))))
111 (symlink
112 (string-append "lock-obj-pub." triplet ".h")
113 "src/syscfg/lock-obj-pub.linux-gnu.h"))
114 #t))))
115 '()))
116 (native-inputs `(("gettext" ,gettext-minimal)))
72fb1b24 117 (home-page "https://gnupg.org")
35b9e423 118 (synopsis "Library of error values for GnuPG components")
8d1939e4
LC
119 (description
120 "Libgpg-error is a small library that defines common error values
121for all GnuPG components. Among these are GPG, GPGSM, GPGME,
122GPG-Agent, libgcrypt, Libksba, DirMngr, Pinentry, SmartCard
123Daemon and possibly more in the future.")
63e8bb12
LC
124 (license license:lgpl2.0+)
125 (properties '((ftp-server . "ftp.gnupg.org")
126 (ftp-directory . "/gcrypt/libgpg-error")))))
8d1939e4
LC
127
128(define-public libgcrypt
129 (package
130 (name "libgcrypt")
ba600876 131 (version "1.8.5")
84a3e3b7
LC
132 (source (origin
133 (method url-fetch)
134 (uri (string-append "mirror://gnupg/libgcrypt/libgcrypt-"
135 version ".tar.bz2"))
136 (sha256
137 (base32
ba600876 138 "1hvsazms1bfd769q0ngl0r9g5i4m9mpz9jmvvrdzyzk3rfa2ljiv"))))
8d1939e4
LC
139 (build-system gnu-build-system)
140 (propagated-inputs
e0932742 141 `(("libgpg-error-host" ,libgpg-error)))
e766f699
JD
142 (native-inputs
143 ;; Needed here for the 'gpg-error' program.
e0932742 144 `(("libgpg-error-native" ,libgpg-error)))
e766f699
JD
145 (arguments
146 ;; The '--with-gpg-error-prefix' argument is needed because otherwise
147 ;; 'configure' uses 'gpg-error-config' to determine the '-L' flag, and
148 ;; the 'gpg-error-config' it runs is the native one---i.e., the wrong one.
149 `(#:configure-flags
150 (list (string-append "--with-gpg-error-prefix="
7e7033d1
JN
151 (assoc-ref %build-inputs "libgpg-error-host"))
152 ;; When cross-compiling, _gcry_mpih_lshift etc are undefined
153 ,@(if (%current-target-system) '("--disable-asm")
154 '()))))
40fed2d8 155 (outputs '("out" "debug"))
72fb1b24 156 (home-page "https://gnupg.org/")
f50d2669 157 (synopsis "Cryptographic function library")
8d1939e4 158 (description
a22dc0c4
LC
159 "Libgcrypt is a general-purpose cryptographic library. It provides the
160standard cryptographic building blocks such as symmetric ciphers, hash
161algorithms, public key algorithms, large integer functions and random number
162generation.")
63e8bb12
LC
163 (license license:lgpl2.0+)
164 (properties '((ftp-server . "ftp.gnupg.org")
165 (ftp-directory . "/gcrypt/libgcrypt")))))
8d1939e4
LC
166
167(define-public libassuan
168 (package
169 (name "libassuan")
0988191f 170 (version "2.5.3")
8d1939e4
LC
171 (source
172 (origin
87f5d366 173 (method url-fetch)
0db342a5 174 (uri (string-append "mirror://gnupg/libassuan/libassuan-"
8d1939e4
LC
175 version ".tar.bz2"))
176 (sha256
177 (base32
0988191f 178 "00p7cpvzf0q3qwcgg51r9d0vbab4qga2xi8wpk2fgd36710b1g4i"))))
8d1939e4
LC
179 (build-system gnu-build-system)
180 (propagated-inputs
5965b083
LF
181 `(("libgpg-error" ,libgpg-error)
182 ("pth" ,pth)))
72fb1b24 183 (home-page "https://gnupg.org")
8d1939e4 184 (synopsis
35b9e423 185 "IPC library used by GnuPG and related software")
8d1939e4
LC
186 (description
187 "Libassuan is a small library implementing the so-called Assuan
188protocol. This protocol is used for IPC between most newer
189GnuPG components. Both, server and client side functions are
190provided.")
63e8bb12
LC
191 (license license:lgpl2.0+)
192 (properties '((ftp-server . "ftp.gnupg.org")
193 (ftp-directory . "/gcrypt/libassuan")))))
8d1939e4
LC
194
195(define-public libksba
196 (package
197 (name "libksba")
c95f7160 198 (version "1.3.5")
8d1939e4
LC
199 (source
200 (origin
87f5d366 201 (method url-fetch)
8d1939e4 202 (uri (string-append
0db342a5 203 "mirror://gnupg/libksba/libksba-"
8d1939e4
LC
204 version ".tar.bz2"))
205 (sha256
206 (base32
c95f7160 207 "0h53q4sns1jz1pkmhcz5wp9qrfn9f5g9i3vjv6dafwzzlvblyi21"))))
8d1939e4
LC
208 (build-system gnu-build-system)
209 (propagated-inputs
210 `(("libgpg-error" ,libgpg-error)))
e766f699
JD
211 (native-inputs
212 `(("libgpg-error" ,libgpg-error)))
213 (arguments
214 `(#:configure-flags
215 (list ,@(if (%current-target-system)
216 '("CC_FOR_BUILD=gcc")
217 '())
218 (string-append "--with-gpg-error-prefix="
219 (assoc-ref %build-inputs "libgpg-error")))))
72fb1b24 220 (home-page "https://www.gnupg.org")
35b9e423 221 (synopsis "CMS and X.509 access library")
8d1939e4
LC
222 (description
223 "KSBA (pronounced Kasbah) is a library to make X.509 certificates
224as well as the CMS easily accessible by other applications. Both
225specifications are building blocks of S/MIME and TLS.")
63e8bb12
LC
226 (license license:gpl3+)
227 (properties '((ftp-server . "ftp.gnupg.org")
228 (ftp-directory . "/gcrypt/libksba")))))
8d1939e4 229
c18ea90f
AE
230(define-public npth
231 (package
232 (name "npth")
b593f264 233 (version "1.6")
c18ea90f
AE
234 (source
235 (origin
b593f264
TGR
236 (method url-fetch)
237 (uri (string-append "mirror://gnupg/npth/npth-" version ".tar.bz2"))
238 (sha256
239 (base32 "1lg2lkdd3z1s3rpyf88786l243adrzyk9p4q8z9n41ygmpcsp4qk"))))
c18ea90f 240 (build-system gnu-build-system)
72fb1b24 241 (home-page "https://www.gnupg.org")
c18ea90f
AE
242 (synopsis "Non-preemptive thread library")
243 (description
244 "Npth is a library to provide the GNU Pth API and thus a non-preemptive
245threads implementation.
246
247In contrast to GNU Pth is is based on the system's standard threads
248implementation. This allows the use of libraries which are not
249compatible to GNU Pth.")
ec3f88af
EF
250 (license (list license:lgpl3+ license:gpl2+)) ; dual license
251 (properties '((ftp-server . "ftp.gnupg.org")
252 (ftp-directory . "/gcrypt/npth")))))
c18ea90f 253
8d1939e4
LC
254(define-public gnupg
255 (package
256 (name "gnupg")
7e0f9df9 257 (version "2.2.20")
58970d6a
LC
258 (source (origin
259 (method url-fetch)
260 (uri (string-append "mirror://gnupg/gnupg/gnupg-" version
261 ".tar.bz2"))
e5b44b06 262 (patches (search-patches "gnupg-default-pinentry.patch"))
58970d6a
LC
263 (sha256
264 (base32
e4257138 265 "0c6a4v9p6qzhsw1pfcwc459bxpc8hma0w9z8iqb9khvligack9q4"))))
8d1939e4 266 (build-system gnu-build-system)
08fa45b1
MW
267 (native-inputs
268 `(("pkg-config" ,pkg-config)))
8d1939e4 269 (inputs
f02d254a 270 `(("gnutls" ,gnutls)
8d1939e4
LC
271 ("libassuan" ,libassuan)
272 ("libgcrypt" ,libgcrypt)
01e11826 273 ("libgpg-error" ,libgpg-error)
8d1939e4 274 ("libksba" ,libksba)
cd064df7 275 ("npth" ,npth)
01e11826 276 ("openldap" ,openldap)
cd9ed6c1 277 ("pcsc-lite" ,pcsc-lite)
2d12284d
EF
278 ("readline" ,readline)
279 ("sqlite" ,sqlite)
280 ("zlib" ,zlib)))
30e9cbb4 281 (arguments
10756b9e 282 `(#:configure-flags '(;; Otherwise, the test suite looks for the `gpg`
f11275c9
LF
283 ;; executable in its installation directory in
284 ;; /gnu/store before it has been installed.
e184de57
EF
285 "--enable-gnupg-builddir-envvar"
286 "--enable-all-tests")
163708a6 287 #:phases
45477c6a 288 (modify-phases %standard-phases
cd9ed6c1
MG
289 (add-before 'configure 'patch-paths
290 (lambda* (#:key inputs #:allow-other-keys)
cd9ed6c1
MG
291 (substitute* "scd/scdaemon.c"
292 (("\"(libpcsclite\\.so[^\"]*)\"" _ name)
293 (string-append "\"" (assoc-ref inputs "pcsc-lite")
294 "/lib/" name "\"")))
7deb5ee8
LF
295 #t))
296 (add-after 'build 'patch-scheme-tests
297 (lambda _
298 (substitute* (find-files "tests" ".\\.scm$")
299 (("/usr/bin/env gpgscm")
764c5662
LF
300 (string-append (getcwd) "/tests/gpgscm/gpgscm")))
301 #t))
f11275c9 302 (add-before 'build 'patch-test-paths
92cc6a58
EF
303 (lambda _
304 (substitute* '("tests/inittests"
305 "tests/pkits/inittests"
306 "tests/Makefile"
307 "tests/pkits/common.sh"
308 "tests/pkits/Makefile")
309 (("/bin/pwd") (which "pwd")))
310 (substitute* "common/t-exectool.c"
311 (("/bin/cat") (which "cat"))
312 (("/bin/true") (which "true"))
313 (("/bin/false") (which "false")))
314 #t)))))
72fb1b24 315 (home-page "https://gnupg.org/")
f50d2669 316 (synopsis "GNU Privacy Guard")
8d1939e4 317 (description
a22dc0c4
LC
318 "The GNU Privacy Guard is a complete implementation of the OpenPGP
319standard. It is used to encrypt and sign data and communication. It
320features powerful key management and the ability to access public key
79c311b8 321servers. It includes several libraries: libassuan (IPC between GnuPG
58970d6a
LC
322components), libgpg-error (centralized GnuPG error values), and
323libskba (working with X.509 certificates and CMS data).")
63e8bb12
LC
324 (license license:gpl3+)
325 (properties '((ftp-server . "ftp.gnupg.org")
326 (ftp-directory . "/gcrypt/gnupg")))))
ea4d96c6 327
cd064df7
AE
328(define-public gnupg-2.0
329 (package (inherit gnupg)
b5afe6f0 330 (version "2.0.30")
cd064df7
AE
331 (source (origin
332 (method url-fetch)
333 (uri (string-append "mirror://gnupg/gnupg/gnupg-" version
334 ".tar.bz2"))
335 (sha256
336 (base32
b5afe6f0 337 "0wax4cy14hh0h7kg9hj0hjn9424b71z8lrrc5kbsasrn9xd7hag3"))))
08fa45b1 338 (native-inputs '())
cd064df7 339 (inputs
7b40296f
EF
340 `(("adns" ,adns)
341 ("bzip2" ,bzip2)
cd064df7
AE
342 ("curl" ,curl)
343 ("libassuan" ,libassuan)
344 ("libgcrypt" ,libgcrypt)
345 ("libgpg-error" ,libgpg-error)
346 ("libksba" ,libksba)
347 ("pth" ,pth)
348 ("openldap" ,openldap)
07157e8a 349 ("zlib" ,zlib)
cd064df7
AE
350 ("readline" ,readline)))
351 (arguments
352 `(#:phases
80c47cf8 353 (modify-phases %standard-phases
6b547d22
LC
354 (add-before 'configure 'patch-config-files
355 (lambda _
356 (substitute* "tests/openpgp/Makefile.in"
3a534f42 357 (("/bin/sh") (which "sh")))
bc85b127
LC
358 #t))
359 (add-after 'install 'rename-v2-commands
360 (lambda* (#:key outputs #:allow-other-keys)
361 ;; Upstream suggests removing the trailing '2' from command names:
362 ;; <http://debbugs.gnu.org/cgi/bugreport.cgi?bug=22883#58>.
363 (let ((out (assoc-ref outputs "out")))
364 (with-directory-excursion (string-append out "/bin")
365 (rename-file "gpgv2" "gpgv")
366 (rename-file "gpg2" "gpg")
367
368 ;; Keep the old name around to ease transition.
369 (symlink "gpgv" "gpgv2")
370 (symlink "gpg" "gpg2")
806e891e
LF
371 #t)))))))
372 (properties `((superseded . ,gnupg)))))
cd064df7 373
5249045c
MW
374(define-public gnupg-1
375 (package (inherit gnupg)
b6c675c6 376 (version "1.4.23")
58970d6a
LC
377 (source (origin
378 (method url-fetch)
379 (uri (string-append "mirror://gnupg/gnupg/gnupg-" version
380 ".tar.bz2"))
381 (sha256
382 (base32
b6c675c6 383 "1fkq4sqldvf6a25mm2qz95swv1qjg464736091w51djiwqbjyin9"))))
08fa45b1 384 (native-inputs '())
5249045c 385 (inputs
07157e8a
LC
386 `(("zlib" ,zlib)
387 ("bzip2" ,bzip2)
5249045c
MW
388 ("curl" ,curl)
389 ("readline" ,readline)
390 ("libgpg-error" ,libgpg-error)))
391 (arguments
29d90757
LF
392 `(#:phases
393 (modify-phases %standard-phases
394 (add-after 'unpack 'patch-check-sh
395 (lambda _
396 (substitute* "checks/Makefile.in"
b17f7238
MW
397 (("/bin/sh") (which "sh")))
398 #t)))))))
5249045c 399
09d5c166
AE
400(define-public gpgme
401 (package
402 (name "gpgme")
4286a6b0 403 (version "1.13.1")
09d5c166
AE
404 (source
405 (origin
406 (method url-fetch)
4286a6b0 407 (uri (string-append "mirror://gnupg/gpgme/gpgme-" version ".tar.bz2"))
09d5c166 408 (sha256
4286a6b0 409 (base32 "0imyjfryvvjdbai454p70zcr95m94j9xnzywrlilqdw2fqi0pqy4"))))
09d5c166 410 (build-system gnu-build-system)
dde3f551
TGR
411 (arguments
412 `(#:phases
413 (modify-phases %standard-phases
414 (add-before 'check 'disable-failing-test
415 ;; XXX gnupg@2.2.20 breaks the expected JSON response for this test.
416 (lambda _
417 (substitute* "tests/json/t-json.c"
418 (("\"t-keylist-secret\", ") ""))
419 #t)))))
b3ecb3fe
LF
420 (native-inputs
421 `(("gnupg" ,gnupg)))
68640c3c
MW
422 (propagated-inputs
423 ;; Needs to be propagated because gpgme.h includes gpg-error.h.
7de44023 424 `(("libgpg-error" ,libgpg-error)))
09d5c166 425 (inputs
b3ecb3fe 426 `(("libassuan" ,libassuan)))
72fb1b24 427 (home-page "https://www.gnupg.org/related_software/gpgme/")
35b9e423 428 (synopsis "Library providing simplified access to GnuPG functionality")
09d5c166
AE
429 (description
430 "GnuPG Made Easy (GPGME) is a library designed to make access to GnuPG
431easier for applications. It provides a High-Level Crypto API for encryption,
432decryption, signing, signature verification and key management. Currently
433it uses GnuPG as its backend but the API isn't restricted to this engine.
434
435Because the direct use of GnuPG from an application can be a complicated
436programming task, it is suggested that all software should try to use GPGME
437instead. This way bug fixes or improvements can be done at a central place
438and every application benefits from this.")
11450f15
EF
439 (license license:lgpl2.1+)
440 (properties '((ftp-server . "ftp.gnupg.org")
441 (ftp-directory . "/gcrypt/gpgme")))))
09d5c166 442
6b982a78
HG
443(define-public qgpgme
444 (package
445 (inherit gpgme)
446 (name "qgpgme")
447 (arguments
448 `(#:phases
449 (modify-phases %standard-phases
450 (add-before 'build 'chdir-and-symlink
451 (lambda* (#:key inputs #:allow-other-keys)
452 (let ((gpgme (assoc-ref inputs "gpgme")))
453 (symlink (string-append gpgme "/lib/libgpgmepp.la")
454 "lang/cpp/src/libgpgmepp.la")
455 (symlink (string-append gpgme "/lib/libgpgme.la")
456 "src/libgpgme.la"))
457 (chdir "lang/qt")
458 #t)))))
459 (native-inputs
0684f1d6
LF
460 `(("pkg-config" ,pkg-config)
461 ,@(package-native-inputs gpgme)))
6b982a78
HG
462 (inputs
463 `(("gpgme" ,gpgme)
464 ("qtbase" ,qtbase)
465 ,@(package-inputs gpgme)))
466 (synopsis "Qt API bindings for gpgme")
467 (description "QGpgme provides a very high level Qt API around GpgMEpp.
468
469QGpgME was originally developed as part of libkleo and incorporated into
470gpgpme starting with version 1.7.")
471 (license license:gpl2+))) ;; Note: this differs from gpgme
472
b0cb92b2
LC
473(define-public guile-gcrypt
474 (package
475 (name "guile-gcrypt")
6704e88d 476 (version "0.2.1")
b0cb92b2
LC
477 (home-page "https://notabug.org/cwebber/guile-gcrypt")
478 (source (origin
479 (method git-fetch)
480 (uri (git-reference
481 (url (string-append home-page ".git"))
482 (commit (string-append "v" version))))
483 (sha256
484 (base32
6704e88d 485 "0n232iyayc46f7hywmjw0jr7pbmmz5h4b04jskhkzz9gxz0ci99c"))
d47f9630 486 (file-name (git-file-name name version))))
b0cb92b2 487 (build-system gnu-build-system)
891fd849
MO
488 (arguments
489 ;; When cross-compiling, the bash script libgcrypt-config provided by
490 ;; libgcrypt must be accessible during configure phase.
491 `(,@(if (%current-target-system)
492 '(#:phases
493 (modify-phases %standard-phases
494 (add-before 'configure 'add-libgrypt-config
495 (lambda _
496 (setenv "PATH" (string-append
497 (assoc-ref %build-inputs "libgcrypt")
498 "/bin:"
499 (getenv "PATH")))
500 #t))))
501 '())))
b0cb92b2
LC
502 (native-inputs
503 `(("pkg-config" ,pkg-config)
504 ("autoconf" ,autoconf)
505 ("automake" ,automake)
891fd849 506 ("texinfo" ,texinfo)
cfa4de76 507 ("guile" ,guile-3.0)))
b0cb92b2 508 (inputs
b6bee63b 509 `(("guile" ,guile-3.0)
b0cb92b2 510 ("libgcrypt" ,libgcrypt)))
b0cb92b2
LC
511 (synopsis "Cryptography library for Guile using Libgcrypt")
512 (description
513 "Guile-Gcrypt provides a Guile 2.x interface to a subset of the
514GNU Libgcrypt crytographic library. It provides modules for cryptographic
515hash functions, message authentication codes (MAC), public-key cryptography,
516strong randomness, and more. It is implemented using the foreign function
517interface (FFI) of Guile.")
518 (license license:gpl3+)))
519
c8e3651a
EB
520(define-public guile2.0-gcrypt
521 (package (inherit guile-gcrypt)
522 (name "guile2.0-gcrypt")
c7d9abf8
EF
523 (native-inputs
524 `(("guile" ,guile-2.0)
525 ,@(alist-delete "guile" (package-native-inputs guile-gcrypt))))
c8e3651a
EB
526 (inputs
527 `(("guile" ,guile-2.0)
528 ,@(alist-delete "guile" (package-inputs guile-gcrypt))))))
529
b6bee63b 530(define-public guile2.2-gcrypt
89a99d53
LC
531 (package
532 (inherit guile-gcrypt)
b6bee63b 533 (name "guile2.2-gcrypt")
cfa4de76
MB
534 (native-inputs
535 `(("guile" ,guile-2.2)
536 ,@(alist-delete "guile" (package-native-inputs guile-gcrypt))))
89a99d53 537 (inputs
b6bee63b 538 `(("guile" ,guile-2.2)
89a99d53
LC
539 ,@(alist-delete "guile" (package-inputs guile-gcrypt))))))
540
b6bee63b
LC
541(define-public guile3.0-gcrypt
542 (deprecated-package "guile3.0-gcrypt" guile-gcrypt))
543
e3dd1f0c
LF
544(define-public python-gpg
545 (package
546 (name "python-gpg")
fb4fcfab 547 (version "1.10.0")
e3dd1f0c
LF
548 (source (origin
549 (method url-fetch)
550 (uri (pypi-uri "gpg" version))
551 (sha256
552 (base32
fb4fcfab 553 "1ji3ynhp36m1ccx7bmaq75dhij9frpn19v9mpi4aajn8csl194il"))))
e3dd1f0c
LF
554 (build-system python-build-system)
555 (arguments
fb4fcfab
EF
556 '(#:phases
557 (modify-phases %standard-phases
558 (add-before 'build 'set-environment
559 (lambda _
560 (substitute* "setup.py"
561 (("cc") (which "gcc")))
562 #t)))
563 #:tests? #f)) ; No test suite.
e3dd1f0c
LF
564 (inputs
565 `(("gpgme" ,gpgme)))
566 (native-inputs
567 `(("swig" ,swig)))
568 (home-page (package-home-page gpgme))
569 (synopsis "Python bindings for GPGME GnuPG cryptography library")
570 (description "This package provides Python bindings to the GPGME GnuPG
571cryptographic library. It is developed in the GPGME source code, and then
572distributed separately.")
573 (license license:lgpl2.1+)))
574
575(define-public python2-gpg
576 (package-with-python2 python-gpg))
577
a05d1d82
CAW
578(define-public python-pygpgme
579 (package
580 (name "python-pygpgme")
581 (version "0.3")
582 (source
583 (origin
584 (method url-fetch)
585 (uri (pypi-uri "pygpgme" version))
586 (sha256
587 (base32
588 "1q82p3gs6lwq8j8dxk4pvrwk3jpww1zqcjrzznl9clh10z28gn2z"))
589 ;; Unfortunately, we have to disable some tests due to some gpg-agent
590 ;; goofiness... see:
591 ;; https://bugs.launchpad.net/pygpgme/+bug/999949
1c9cea74
LF
592 (patches (search-patches "pygpgme-disable-problematic-tests.patch"
593 "python-pygpgme-fix-pinentry-tests.patch"))))
a05d1d82
CAW
594 (arguments
595 `(#:phases
596 (modify-phases %standard-phases
597 (add-before 'build 'make-build
9a425d68 598 (lambda _ (invoke "make" "build")))
a05d1d82 599 (replace 'check
9a425d68 600 (lambda _ (invoke "make" "check"))))))
a05d1d82 601 (build-system python-build-system)
e6f63412
LF
602 (native-inputs
603 `(("gnupg" ,gnupg-1)))
a05d1d82 604 (inputs
e6f63412 605 `(("gpgme" ,gpgme)))
a05d1d82
CAW
606 (home-page "https://launchpad.net/pygpgme")
607 (synopsis "Python module for working with OpenPGP messages")
608 (description
609 "PyGPGME is a Python module that lets you sign, verify, encrypt and
610decrypt messages using the OpenPGP format by making use of GPGME.")
611 (license license:lgpl2.1+)))
612
613(define-public python2-pygpgme
5c31f4aa 614 (package-with-python2 python-pygpgme))
a05d1d82 615
22af9029
RW
616(define-public python-gnupg
617 (package
618 (name "python-gnupg")
ba704797 619 (version "0.4.4")
22af9029
RW
620 (source
621 (origin
622 (method url-fetch)
5b669ba1 623 (uri (pypi-uri "python-gnupg" version))
22af9029
RW
624 (sha256
625 (base32
ba704797 626 "03pvjyp6q9pr8qa22i38az06ddzhvzy5kj192hxa3gbhnchg1nj5"))))
22af9029
RW
627 (build-system python-build-system)
628 (arguments
629 `(#:phases
630 (modify-phases %standard-phases
631 (replace 'check
ec089763
RW
632 (lambda _
633 (substitute* "test_gnupg.py"
ec089763
RW
634 ;; Unsure why this test fails.
635 (("'test_search_keys'") "True")
636 (("def test_search_keys") "def disabled__search_keys"))
637 (setenv "USERNAME" "guixbuilder")
638 ;; The doctests are extremely slow and sometimes time out,
639 ;; so we disable them.
b262aba7
TGR
640 (invoke "python"
641 "test_gnupg.py" "--no-doctests"))))))
22af9029
RW
642 (native-inputs
643 `(("gnupg" ,gnupg-1)))
72fb1b24 644 (home-page "https://packages.python.org/python-gnupg/index.html")
22af9029
RW
645 (synopsis "Wrapper for the GNU Privacy Guard")
646 (description
647 "This module allows easy access to GnuPG’s key management, encryption
648and signature functionality from Python programs.")
649 (license license:bsd-3)))
650
651(define-public python2-gnupg
652 (package-with-python2 python-gnupg))
653
34ef5755
CB
654(define-public perl-gnupg-interface
655 (package
656 (name "perl-gnupg-interface")
657 (version "0.52")
9c2d0a03
RW
658 (source (origin
659 (method url-fetch)
660 (uri (string-append "mirror://cpan/authors/id/A/AL/ALEXMV/"
661 "GnuPG-Interface-" version ".tar.gz"))
662 (sha256
663 (base32
664 "0dgx8yhdsmhkazcrz14n4flrk1afv7azgl003hl4arxvi1d9yyi4"))))
34ef5755
CB
665 (build-system perl-build-system)
666 (arguments
9c2d0a03
RW
667 `(#:phases
668 (modify-phases %standard-phases
669 ;; FIXME: This test fails for unknown reasons
670 (add-after 'unpack 'delete-broken-test
671 (lambda _
672 (delete-file "t/encrypt_symmetrically.t")
673 #t)))))
34ef5755 674 (inputs
9c2d0a03 675 `(("gnupg" ,gnupg-1)))
34ef5755
CB
676 (propagated-inputs
677 `(("perl-moo" ,perl-moo)
9c2d0a03
RW
678 ("perl-moox-handlesvia" ,perl-moox-handlesvia)
679 ("perl-moox-late" ,perl-moox-late)))
680 (native-inputs
681 `(("which" ,which)
682 ("perl-module-install" ,perl-module-install)))
9aba9b12 683 (home-page "https://metacpan.org/release/GnuPG-Interface")
34ef5755 684 (synopsis "Perl interface to GnuPG")
9c2d0a03
RW
685 (description "@code{GnuPG::Interface} and its associated modules are
686designed to provide an object-oriented method for interacting with GnuPG,
687being able to perform functions such as but not limited to encrypting,
688signing, decryption, verification, and key-listing parsing.")
34ef5755
CB
689 (license license:perl-license)))
690
ea4d96c6 691(define-public pius
cda0ef04
TS
692 (package
693 (name "pius")
4f4b37df 694 (version "2.2.7")
cda0ef04
TS
695 (source (origin
696 (method url-fetch)
697 (uri (string-append
698 "https://github.com/jaymzh/pius/releases/download/v"
699 version "/pius-" version ".tar.bz2"))
700 (sha256
701 (base32
4f4b37df 702 "1nsl7czicv95j0gfz4s82ys3g3h2mwr6cq3ilid8bpz3iy7z4ipy"))))
cda0ef04 703 (build-system python-build-system)
4f4b37df 704 (inputs `(("perl" ,perl) ; for 'pius-party-worksheet'
fcb1dd99
AE
705 ("gpg" ,gnupg)
706 ("python-six" ,python2-six)))
cda0ef04
TS
707 (arguments
708 `(#:tests? #f
4f4b37df 709 #:python ,python-2 ; uses the Python 2 'print' syntax
cda0ef04
TS
710 #:phases
711 (modify-phases %standard-phases
712 (add-before
713 'build 'set-gpg-file-name
714 (lambda* (#:key inputs outputs #:allow-other-keys)
715 (let* ((gpg (string-append (assoc-ref inputs "gpg")
716 "/bin/gpg")))
717 (substitute* "libpius/constants.py"
718 (("/usr/bin/gpg2") gpg))
719 #t))))))
720 (synopsis "Programs to simplify GnuPG key signing")
721 (description
722 "Pius (PGP Individual UID Signer) helps attendees of PGP keysigning
35b9e423
EB
723parties. It is the main utility and makes it possible to quickly and easily
724sign each UID on a set of PGP keys. It is designed to take the pain out of
ea4d96c6
AE
725the sign-all-the-keys part of PGP Keysigning Party while adding security
726to the process.
727
728pius-keyring-mgr and pius-party-worksheet help organisers of
729PGP keysigning parties.")
cda0ef04
TS
730 (license license:gpl2)
731 (home-page "https://www.phildev.net/pius/index.shtml")))
96be765c
AE
732
733(define-public signing-party
33678041
EF
734 (package
735 (name "signing-party")
cbebccbe 736 (version "2.10")
ca64945e 737 (home-page "https://salsa.debian.org/signing-party-team/signing-party")
33678041
EF
738 (source (origin
739 (method git-fetch)
740 (uri (git-reference
741 (url home-page)
cbebccbe 742 (commit (string-append "v" version))))
33678041
EF
743 (file-name (git-file-name name version))
744 (sha256
745 (base32
cbebccbe 746 "0lq8nmwjmysry0n4jg6vb7bh0lagbyb9pa11ii3s41p1mhzchf2r"))))
33678041
EF
747 (build-system gnu-build-system)
748 (native-inputs
749 `(("autoconf" ,autoconf-wrapper)
750 ("automake" ,automake)))
751 (inputs `(("perl" ,perl)
752 ("perl-text-template" ,perl-text-template)
753 ("perl-mime-tools" ,perl-mime-tools)
754 ("perl-gnupg-interface" ,perl-gnupg-interface)
755 ("perl-net-idn-encode" ,perl-net-idn-encode)
756 ("libmd" ,libmd)))
757 (arguments
cbebccbe 758 `(#:tests? #f ; no test suite
33678041
EF
759 #:phases
760 (modify-phases %standard-phases
761 (replace 'configure
762 (lambda* (#:key outputs #:allow-other-keys)
763 (let ((out (assoc-ref outputs "out")))
764 (substitute* "keyanalyze/Makefile"
765 (("LDLIBS") (string-append "CC=" (which "gcc") "\nLDLIBS")))
766 (substitute* "keyanalyze/Makefile"
767 (("\\./configure") (string-append "./configure --prefix=" out)))
768 (substitute* "gpgwrap/Makefile"
769 (("\\} clean")
770 (string-append "} clean\ninstall:\n\tinstall -D bin/gpgwrap "
771 out "/bin/gpgwrap\n")))
772 (substitute* '("gpgsigs/Makefile" "keyanalyze/Makefile"
773 "keylookup/Makefile" "sig2dot/Makefile"
774 "springgraph/Makefile")
775 (("/usr") out))
776 (setenv "CONFIG_SHELL" (which "sh")))
777 #t))
778 (replace 'install
779 (lambda* (#:key outputs #:allow-other-keys #:rest args)
780 (let ((out (assoc-ref outputs "out"))
781 (install (assoc-ref %standard-phases 'install)))
782 (apply install args)
783 (for-each
784 (lambda (dir file)
785 (copy-file (string-append dir "/" file)
786 (string-append out "/bin/" file)))
787 '("caff" "caff" "caff" "gpgdir" "gpg-key2ps"
788 "gpglist" "gpg-mailkeys" "gpgparticipants")
789 '("caff" "pgp-clean" "pgp-fixkey" "gpgdir" "gpg-key2ps"
790 "gpglist" "gpg-mailkeys" "gpgparticipants"))
791 (for-each
792 (lambda (dir file)
793 (copy-file (string-append dir "/" file)
794 (string-append out "/share/man/man1/" file)))
795 '("caff" "caff" "caff" "gpgdir"
796 "gpg-key2ps" "gpglist" "gpg-mailkeys"
797 "gpgparticipants" "gpgsigs" "gpgwrap/doc"
798 "keyanalyze" "keyanalyze/pgpring" "keyanalyze")
799 '("caff.1" "pgp-clean.1" "pgp-fixkey.1" "gpgdir.1"
800 "gpg-key2ps.1" "gpglist.1" "gpg-mailkeys.1"
801 "gpgparticipants.1" "gpgsigs.1" "gpgwrap.1"
802 "process_keys.1" "pgpring.1" "keyanalyze.1")))
803 #t))
804 (add-after 'install 'wrap-programs
805 (lambda* (#:key outputs #:allow-other-keys)
806 (let* ((out (assoc-ref outputs "out")))
807 (wrap-program
808 (string-append out "/bin/caff")
809 `("PERL5LIB" ":" prefix (,(getenv "PERL5LIB")))))
810 #t)))))
811 (synopsis "Collection of scripts for simplifying gnupg key signing")
812 (description
813 "Signing-party is a collection for all kinds of PGP/GnuPG related things,
96be765c 814including tools for signing keys, keyring analysis, and party preparation.
7ac53403
EF
815@enumerate
816@item caff: CA - Fire and Forget signs and mails a key
817@item pgp-clean: removes all non-self signatures from key
818@item pgp-fixkey: removes broken packets from keys
819@item gpg-mailkeys: simply mail out a signed key to its owner
820@item gpg-key2ps: generate PostScript file with fingerprint paper strips
821@item gpgdir: recursive directory encryption tool
822@item gpglist: show who signed which of your UIDs
823@item gpgsigs: annotates list of GnuPG keys with already done signatures
824@item gpgparticipants: create list of party participants for the organiser
825@item gpgwrap: a passphrase wrapper
826@item keyanalyze: minimum signing distance (MSD) analysis on keyrings
827@item keylookup: ncurses wrapper around gpg --search
828@item sig2dot: converts a list of GnuPG signatures to a .dot file
829@item springgraph: creates a graph from a .dot file
830@end enumerate")
33678041
EF
831 ;; gpl2+ for almost all programs, except for keyanalyze: gpl2
832 ;; and caff and gpgsigs: bsd-3, see
833 ;; http://packages.debian.org/changelogs/pool/main/s/signing-party/current/copyright
834 (license license:gpl2)))
40d806af 835
c607b701 836(define-public pinentry-tty
40d806af 837 (package
c607b701 838 (name "pinentry-tty")
4498cbd7 839 (version "1.1.0")
40d806af
LC
840 (source (origin
841 (method url-fetch)
842 (uri (string-append "mirror://gnupg/pinentry/pinentry-"
843 version ".tar.bz2"))
844 (sha256
845 (base32
4498cbd7 846 "0w35ypl960pczg5kp6km3dyr000m1hf0vpwwlh72jjkjza36c1v8"))))
40d806af 847 (build-system gnu-build-system)
c607b701
EF
848 (arguments
849 `(#:configure-flags '("--enable-pinentry-tty")))
40d806af
LC
850 (inputs
851 `(("ncurses" ,ncurses)
18ed97d6 852 ("libassuan" ,libassuan)
c607b701 853 ("libsecret" ,libsecret "out")))
40d806af
LC
854 (native-inputs
855 `(("pkg-config" ,pkg-config)))
547cb17d 856 (home-page "https://gnupg.org/aegypten2/")
40d806af
LC
857 (synopsis "GnuPG's interface to passphrase input")
858 (description
c607b701 859 "Pinentry provides a console that allows users to enter a passphrase when
9614897b 860@code{gpg} is run and needs it.")
f8457932
LC
861 (license license:gpl2+)
862 (properties '((ftp-server . "ftp.gnupg.org")
863 (ftp-directory . "/gcrypt/pinentry")
864 (upstream-name . "pinentry")))))
4380a7b4 865
abc4a332
PN
866(define-public pinentry-emacs
867 (package
868 (inherit pinentry-tty)
869 (name "pinentry-emacs")
870 (arguments
871 `(#:configure-flags '("--enable-pinentry-emacs")))
872 (description
873 "Pinentry provides a console and an Emacs interface that allows users to
874enter a passphrase when required by @code{gpg} or other software.")))
875
c607b701
EF
876(define-public pinentry-gtk2
877 (package
878 (inherit pinentry-tty)
879 (name "pinentry-gtk2")
880 (inputs
881 `(("gtk+" ,gtk+-2)
882 ("glib" ,glib)
883 ,@(package-inputs pinentry-tty)))
884 (description
885 "Pinentry provides a console and a GTK+ GUI that allows users to enter a
9614897b 886passphrase when @code{gpg} is run and needs it.")))
c607b701 887
41edb23f
CB
888(define-public pinentry-gnome3
889 (package
890 (inherit pinentry-tty)
891 (name "pinentry-gnome3")
892 (inputs
893 `(("gtk+" ,gtk+-2)
894 ("gcr" ,gcr)
895 ("glib" ,glib)
896 ,@(package-inputs pinentry-tty)))
897 (arguments
898 `(#:configure-flags '("--enable-pinentry-gnome3")))
899 (description
900 "Pinentry provides a console and a GUI designed for use with GNOME@tie{}3
901that allows users to enter a passphrase when required by @code{gpg} or other
902software.")))
c607b701 903
54df7558
EF
904(define-public pinentry-qt
905 (package
906 (inherit pinentry-tty)
907 (name "pinentry-qt")
908 (inputs
e2788cef 909 `(("qtbase" ,qtbase)
54df7558
EF
910 ,@(package-inputs pinentry-tty)))
911 (description
912 "Pinentry provides a console and a Qt GUI that allows users to enter a
9614897b 913passphrase when @code{gpg} is run and needs it.")))
54df7558 914
5e369f8a
EF
915(define-public pinentry-efl
916 (package
917 (inherit pinentry-tty)
918 (name "pinentry-efl")
919 (source
920 (origin
921 (inherit (package-source pinentry-tty))
922 (patches (search-patches "pinentry-efl.patch"))))
923 (arguments
924 '(#:configure-flags '("--enable-pinentry-efl")
925 #:phases
926 (modify-phases %standard-phases
927 (replace 'bootstrap
928 (lambda _
929 (invoke "sh" "autogen.sh"))))))
930 (native-inputs
931 `(("autoconf" ,autoconf)
932 ("automake" ,automake)
933 ("gettext" ,gettext-minimal)
934 ,@(package-native-inputs pinentry-tty)))
935 (inputs
936 `(("efl" ,efl)
937 ,@(package-inputs pinentry-tty)))
938 (description
939 "Pinentry provides a console and a graphical interface for the
940@dfn{Enlightenment Foundation Libraries} (EFL) that allows users to enter a
941passphrase when @code{gpg} is run and needs it.")))
942
940f8d39
EF
943(define-public pinentry
944 (package (inherit pinentry-gtk2)
945 (name "pinentry")))
946
4380a7b4
EB
947(define-public paperkey
948 (package
949 (name "paperkey")
abe08256 950 (version "1.6")
4380a7b4
EB
951 (source (origin
952 (method url-fetch)
9530c4bf 953 (uri (string-append "https://www.jabberwocky.com/"
4380a7b4
EB
954 "software/paperkey/paperkey-"
955 version ".tar.gz"))
956 (sha256
957 (base32
abe08256 958 "1xq5gni6gksjkd5avg0zpd73vsr97appksfx0gx2m38s4w9zsid2"))))
4380a7b4
EB
959 (build-system gnu-build-system)
960 (arguments
961 `(#:phases
e379d85c
EF
962 (modify-phases %standard-phases
963 (add-before 'check 'patch-check-scripts
964 (lambda _
965 (substitute* '("checks/roundtrip.sh"
966 "checks/roundtrip-raw.sh")
967 (("/bin/echo") "echo"))
968 #t)))))
9530c4bf 969 (home-page "https://www.jabberwocky.com/software/paperkey/")
4380a7b4
EB
970 (synopsis "Backup OpenPGP keys to paper")
971 (description
972 "Paperkey extracts the secret bytes from an OpenPGP (GnuPG, PGP, etc) key
973for printing with paper and ink, which have amazingly long retention
974qualities. To reconstruct a secret key, you re-enter those
975bytes (whether by hand, OCR, QR code, or the like) and paperkey can use
976them to transform your existing public key into a secret key.")
07157e8a 977 (license license:gpl2+)))
8384499c 978
ba7bd6c6
VC
979(define-public pgpdump
980 (package
981 (name "pgpdump")
982 (version "0.33")
983 (source
984 (origin
985 (method url-fetch)
986 (uri (string-append "https://www.mew.org/~kazu/proj/pgpdump/pgpdump-"
987 version ".tar.gz"))
988 (sha256
989 (base32 "1j001jra2m89n6cys3n0hs574bipjdzfxhzpnd4jfyv95mqwl7n4"))))
990 (build-system gnu-build-system)
991 (arguments
992 `(#:tests? #f ; no make check
993 #:configure-flags (list "--prefix=/")
994 #:make-flags (list "CC=gcc"
995 (string-append "DESTDIR=" (assoc-ref %outputs "out")))))
996 (inputs
997 `(("zlib" ,zlib)))
998 (home-page "https://www.mew.org/~kazu/proj/pgpdump/en/")
999 (synopsis "PGP packet visualizer")
1000 (description "pgpdump displays the sequence of OpenPGP or PGP version 2
1001packets from a file.
1002
1003The output of this command is similar to GnuPG's list packets command,
1004however, pgpdump produces more detailed and easier to understand output.")
1005 (license license:bsd-3)))
1006
8384499c 1007(define-public gpa
1008 (package
1009 (name "gpa")
ee755b70 1010 (version "0.10.0")
8384499c 1011 (source (origin
1012 (method url-fetch)
1013 (uri (string-append "mirror://gnupg/gpa/"
1014 name "-" version ".tar.bz2"))
1015 (sha256
1016 (base32
ee755b70 1017 "1cbpc45f8qbdkd62p12s3q2rdq6fa5xdzwmcwd3xrj55bzkspnwm"))))
8384499c 1018 (build-system gnu-build-system)
ea2a180f
BW
1019 (arguments
1020 `(#:phases
1021 (modify-phases %standard-phases
1022 (add-after 'install 'wrap-program
1023 (lambda* (#:key inputs outputs #:allow-other-keys)
1024 (let ((out (assoc-ref outputs "out"))
1025 (gnupg (assoc-ref inputs "gnupg")))
1026 (wrap-program (string-append out "/bin/gpa")
1027 `("PATH" ":" prefix (,(string-append gnupg "/bin"))))
1028 #t))))))
8384499c 1029 (native-inputs
1030 `(("pkg-config" ,pkg-config)))
1031 (inputs
1032 `(("gnupg" ,gnupg)
1033 ("gpgme" ,gpgme)
1034 ("libassuan" ,libassuan)
1035 ("libgpg-error" ,libgpg-error)
1036 ("gtk+-2" ,gtk+-2)))
1037 (home-page "https://gnupg.org/software/gpa/")
1038 (synopsis "Graphical user interface for GnuPG")
1039 (description
1040 "GPA, the GNU Privacy Assistant, is a graphical user interface for
1041@uref{https://gnupg.org, GnuPG}. It can be used to encrypt, decrypt, and sign
1042files, to verify signatures, and to manage the private and public keys.")
9a451a67
EF
1043 (license license:gpl3+)
1044 (properties '((ftp-server . "ftp.gnupg.org")
1045 (ftp-directory . "/gcrypt/gpa")))))
5aeb6611 1046
15b08442
P
1047(define-public parcimonie
1048 (package
1049 (name "parcimonie")
2e6618fc 1050 (version "0.11.0")
15b08442
P
1051 (source (origin
1052 (method url-fetch)
9062fde4
EF
1053 (uri (string-append "https://gaffer.boum.org/intrigeri/files/"
1054 "parcimonie/App-Parcimonie-"
15b08442
P
1055 version ".tar.gz"))
1056 (sha256
1057 (base32
2e6618fc 1058 "14pvapvzrxh1yh8zgcj1llmc2dd8g1fgzskxlja21gmw8c88aqdk"))))
15b08442
P
1059 (build-system perl-build-system)
1060 (inputs
2e6618fc 1061 `(("gnupg" ,gnupg)
15b08442
P
1062 ("perl-config-general" ,perl-config-general)
1063 ("perl-clone" ,perl-clone)
1064 ("perl-data" ,perl-data)
1065 ("perl-exporter-tiny" ,perl-exporter-tiny)
1066 ("perl-file-homedir" ,perl-file-homedir)
1067 ("perl-file-sharedir" ,perl-file-sharedir)
1068 ("perl-file-which" ,perl-file-which)
1069 ("perl-getopt-long-descriptive" ,perl-getopt-long-descriptive)
1070 ("perl-gnupg-interface" ,perl-gnupg-interface)
1071 ("perl-ipc-system-simple" ,perl-ipc-system-simple)
1072 ("perl-list-moreutils" ,perl-list-moreutils)
1073 ("perl-libintl-perl" ,perl-libintl-perl) ; Locale::TextDomain
1074 ("perl-lwp-online" ,perl-lwp-online)
1075 ("perl-module-build" ,perl-module-build)
1076 ("perl-module-pluggable-object" ,perl-module-pluggable)
1077 ("perl-moo" ,perl-moo)
1078 ("perl-moox-handlesvia" ,perl-moox-handlesvia)
1079 ("perl-moox-late" ,perl-moox-late)
1080 ("perl-moox-options" ,perl-moox-options)
2e6618fc 1081 ("perl-moox-strictconstructor" ,perl-moox-strictconstructor)
15b08442
P
1082 ("perl-namespace-clean" ,perl-namespace-clean)
1083 ("perl-net-dbus" ,perl-net-dbus)
1084 ("perl-net-dbus-glib" ,perl-net-dbus-glib)
1085 ("perl-path-tiny" ,perl-path-tiny)
2e6618fc 1086 ("perl-strictures" ,perl-strictures-2)
15b08442
P
1087 ("perl-test-most" ,perl-test-most)
1088 ("perl-test-trap" ,perl-test-trap)
1089 ("perl-time-duration" ,perl-time-duration)
1090 ("perl-time-duration-parse" ,perl-time-duration-parse)
1091 ("perl-try-tiny" ,perl-try-tiny)
1092 ("perl-type-tiny" ,perl-type-tiny)
1093 ("perl-types-path-tiny" ,perl-types-path-tiny)
1094 ("perl-unicode-linebreak" ,perl-unicode-linebreak)
1095 ("perl-xml-parser" ,perl-xml-parser)
1096 ("perl-xml-twig" ,perl-xml-twig)
1097 ("torsocks" ,torsocks)))
2e6618fc 1098 (native-inputs
ff337525 1099 `(("xorg-server" ,xorg-server-for-tests)))
15b08442
P
1100 (arguments
1101 `(#:phases
1102 (modify-phases %standard-phases
1103 ;; Needed for using gpg-connect-agent during tests.
2e6618fc
EF
1104 (add-before 'check 'prepare-for-tests
1105 (lambda* (#:key inputs #:allow-other-keys)
1106 (let ((xorg-server (assoc-ref inputs "xorg-server")))
1107 (system (string-append xorg-server "/bin/Xvfb :1 &"))
1108 (setenv "DISPLAY" ":1")
1109 (setenv "HOME" "/tmp")
1110 ;; These tests are known to fail
1111 (delete-file "t/32-keyserver_defined_on_command_line.t")
1112 (delete-file "t/33-checkGpgHasDefinedKeyserver.t")
1113 ;; The applet is deprecated upstream.
1114 (delete-file "t/00-load_all.t")
1115 #t)))
15b08442
P
1116 (add-before 'install 'fix-references
1117 (lambda* (#:key inputs outputs #:allow-other-keys)
1118 (substitute* "lib/App/Parcimonie/GnuPG/Interface.pm"
15b08442 1119 ;; Skip check whether dependencies are in the PATH
2e6618fc 1120 (("defined which.*") ""))
15b08442
P
1121 #t))
1122 (add-after 'install 'wrap-program
1123 (lambda* (#:key inputs outputs #:allow-other-keys)
1124 (let* ((out (assoc-ref outputs "out"))
1125 (perllib (string-append out "/lib/perl5/site_perl/"
1126 ,(package-version perl))))
1127 (wrap-program (string-append out "/bin/parcimonie")
1128 `("PERL5LIB" ":"
1129 prefix (,(string-append perllib ":" (getenv "PERL5LIB")))))
1130 #t))))))
9062fde4 1131 (home-page "https://gaffer.boum.org/intrigeri/code/parcimonie/")
15b08442
P
1132 (synopsis "Incrementally refreshes a GnuPG keyring")
1133 (description "Parcimonie incrementaly refreshes a GnuPG keyring in a way
1134that makes it hard to correlate the keyring content to an individual, and
1135makes it hard to locate an individual based on an identifying subset of her
1136keyring content. Parcimonie is a daemon that fetches one key at a time using
1137the Tor network, waits a bit, changes the Tor circuit being used, and starts
1138over.")
1139 (license license:gpl1+)))
607d280e
EF
1140
1141(define-public jetring
1142 (package
1143 (name "jetring")
7da1e8f9 1144 (version "0.29")
607d280e
EF
1145 (source
1146 (origin
7da1e8f9
EF
1147 (method git-fetch)
1148 (uri (git-reference
1149 (url "https://salsa.debian.org/debian/jetring")
1150 (commit (string-append "debian/" version))))
1151 (file-name (git-file-name name version))
607d280e
EF
1152 (sha256
1153 (base32
7da1e8f9 1154 "1acbx2vnbkms1c0wgcnh05d4g359sg5z0aiw541vx2qq9sgdhlv6"))))
607d280e
EF
1155 (build-system gnu-build-system)
1156 (arguments
1157 '(#:phases
1158 (modify-phases %standard-phases
1159 (delete 'configure) ; no configure script
1160 (add-before 'install 'hardlink-gnupg
1161 (lambda* (#:key inputs #:allow-other-keys)
1162 (let ((gpg (string-append (assoc-ref inputs "gnupg")
1163 "/bin/gpg")))
1164 (substitute* (find-files "." "jetring-[[:alpha:]]+$")
1165 (("gpg -") (string-append gpg " -"))
1166 (("\\\"gpg\\\"") (string-append "\"" gpg "\"")))
1167 #t)))
1168 (replace 'install
1169 (lambda* (#:key outputs #:allow-other-keys)
1170 (let* ((out (assoc-ref outputs "out"))
1171 (man (string-append out "/share/man")))
1172 (for-each (lambda (file)
1173 (install-file file (string-append out "/bin/")))
1174 (find-files "." "jetring-[[:alpha:]]+$"))
1175 (for-each (lambda (file)
1176 (install-file file (string-append man "/man1/")))
1177 (find-files "." ".*\\.1$"))
1178 (install-file "jetring.7" (string-append man "/man7/"))
1179 #t))))
1180 #:tests? #f)) ; no test phase
1181 (inputs
1182 `(("gnupg" ,gnupg)
1183 ("perl" ,perl)))
1184 (home-page "https://joeyh.name/code/jetring/")
1185 (synopsis "GnuPG keyring maintenance using changesets")
1186 (description
1187 "Jetring is a collection of tools that allow for gpg keyrings to be
1188maintained using changesets. It was developed with the Debian keyring in mind,
1189and aims to solve the problem that a gpg keyring is a binary blob that's hard
1190for multiple people to collaboratively edit.
1191
1192With jetring, changesets can be submitted, reviewed to see exactly what they
1193will do, applied, and used to build a keyring. The origin of every change made
1194to the keyring is available for auditing, and gpg signatures can be used for
1195integrity guarantees.")
1196 (license license:gpl2+)))