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