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