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