gnu: Rename module gnutls to tls.
[jackhill/guix/guix.git] / gnu / packages / gnupg.scm
CommitLineData
233e7676 1;;; GNU Guix --- Functional package management for GNU
9041d935 2;;; Copyright © 2012, 2013, 2014, 2015 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>
751be9a0 5;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
8d1939e4 6;;;
233e7676 7;;; This file is part of GNU Guix.
8d1939e4 8;;;
233e7676 9;;; GNU Guix is free software; you can redistribute it and/or modify it
8d1939e4
LC
10;;; under the terms of the GNU General Public License as published by
11;;; the Free Software Foundation; either version 3 of the License, or (at
12;;; your option) any later version.
13;;;
233e7676 14;;; GNU Guix is distributed in the hope that it will be useful, but
8d1939e4
LC
15;;; WITHOUT ANY WARRANTY; without even the implied warranty of
16;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17;;; GNU General Public License for more details.
18;;;
19;;; You should have received a copy of the GNU General Public License
233e7676 20;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
8d1939e4 21
1ffa7090 22(define-module (gnu packages gnupg)
07157e8a 23 #:use-module ((guix licenses) #:prefix license:)
01e11826
AE
24 #:use-module (gnu packages curl)
25 #:use-module (gnu packages openldap)
ea4d96c6 26 #:use-module (gnu packages perl)
1ffa7090 27 #:use-module (gnu packages pth)
ea4d96c6 28 #:use-module (gnu packages python)
1ffa7090 29 #:use-module (gnu packages readline)
07157e8a 30 #:use-module (gnu packages compression)
40d806af
LC
31 #:use-module (gnu packages gtk)
32 #:use-module (gnu packages glib)
33 #:use-module (gnu packages pkg-config)
34 #:use-module (gnu packages ncurses)
a7fd7b68 35 #:use-module (gnu packages tls)
8d1939e4 36 #:use-module (guix packages)
87f5d366 37 #:use-module (guix download)
8d1939e4
LC
38 #:use-module (guix build-system gnu))
39
40(define-public libgpg-error
41 (package
42 (name "libgpg-error")
a02ee3d7 43 (version "1.18")
8d1939e4
LC
44 (source
45 (origin
87f5d366 46 (method url-fetch)
0db342a5 47 (uri (string-append "mirror://gnupg/libgpg-error/libgpg-error-"
8d1939e4
LC
48 version ".tar.bz2"))
49 (sha256
50 (base32
a02ee3d7 51 "0408v19h3h0q6w61g51hgbdg6cyw81nyzkh70qfprvsc3pkddwcz"))))
8d1939e4
LC
52 (build-system gnu-build-system)
53 (home-page "http://gnupg.org")
35b9e423 54 (synopsis "Library of error values for GnuPG components")
8d1939e4
LC
55 (description
56 "Libgpg-error is a small library that defines common error values
57for all GnuPG components. Among these are GPG, GPGSM, GPGME,
58GPG-Agent, libgcrypt, Libksba, DirMngr, Pinentry, SmartCard
59Daemon and possibly more in the future.")
07157e8a 60 (license license:lgpl2.0+)))
8d1939e4
LC
61
62(define-public libgcrypt
63 (package
64 (name "libgcrypt")
751be9a0 65 (version "1.6.3")
84a3e3b7
LC
66 (source (origin
67 (method url-fetch)
68 (uri (string-append "mirror://gnupg/libgcrypt/libgcrypt-"
69 version ".tar.bz2"))
70 (sha256
71 (base32
751be9a0 72 "0pq2nwfqgggrsh8rk84659d80vfnlkbphwqjwahccd5fjdxr3d21"))))
8d1939e4
LC
73 (build-system gnu-build-system)
74 (propagated-inputs
e0932742 75 `(("libgpg-error-host" ,libgpg-error)))
e766f699
JD
76 (native-inputs
77 ;; Needed here for the 'gpg-error' program.
e0932742 78 `(("libgpg-error-native" ,libgpg-error)))
e766f699
JD
79 (arguments
80 ;; The '--with-gpg-error-prefix' argument is needed because otherwise
81 ;; 'configure' uses 'gpg-error-config' to determine the '-L' flag, and
82 ;; the 'gpg-error-config' it runs is the native one---i.e., the wrong one.
83 `(#:configure-flags
84 (list (string-append "--with-gpg-error-prefix="
e0932742 85 (assoc-ref %build-inputs "libgpg-error-host")))))
40fed2d8 86 (outputs '("out" "debug"))
8d1939e4 87 (home-page "http://gnupg.org/")
f50d2669 88 (synopsis "Cryptographic function library")
8d1939e4 89 (description
a22dc0c4
LC
90 "Libgcrypt is a general-purpose cryptographic library. It provides the
91standard cryptographic building blocks such as symmetric ciphers, hash
92algorithms, public key algorithms, large integer functions and random number
93generation.")
07157e8a 94 (license license:lgpl2.0+)))
8d1939e4 95
a53421fd
AE
96(define-public libgcrypt-1.5
97 (package (inherit libgcrypt)
460f97f8 98 (version "1.5.4")
a53421fd
AE
99 (source
100 (origin
101 (method url-fetch)
102 (uri (string-append "mirror://gnupg/libgcrypt/libgcrypt-"
103 version ".tar.bz2"))
104 (sha256
105 (base32
460f97f8 106 "0czvqxkzd5y872ipy6s010ifwdwv29sqbnqc4pf56sd486gqvy6m"))))))
a53421fd 107
8d1939e4
LC
108(define-public libassuan
109 (package
110 (name "libassuan")
2b8ae65e 111 (version "2.2.0")
8d1939e4
LC
112 (source
113 (origin
87f5d366 114 (method url-fetch)
0db342a5 115 (uri (string-append "mirror://gnupg/libassuan/libassuan-"
8d1939e4
LC
116 version ".tar.bz2"))
117 (sha256
118 (base32
2b8ae65e 119 "1ikf9whfi7rg71qa610ynyv12qrw20zkn7zxgvvr9dp41gbqxxbx"))))
8d1939e4
LC
120 (build-system gnu-build-system)
121 (propagated-inputs
122 `(("libgpg-error" ,libgpg-error) ("pth" ,pth)))
123 (home-page "http://gnupg.org")
124 (synopsis
35b9e423 125 "IPC library used by GnuPG and related software")
8d1939e4
LC
126 (description
127 "Libassuan is a small library implementing the so-called Assuan
128protocol. This protocol is used for IPC between most newer
129GnuPG components. Both, server and client side functions are
130provided.")
07157e8a 131 (license license:lgpl2.0+)))
8d1939e4
LC
132
133(define-public libksba
134 (package
135 (name "libksba")
6eef465e 136 (version "1.3.2")
8d1939e4
LC
137 (source
138 (origin
87f5d366 139 (method url-fetch)
8d1939e4 140 (uri (string-append
0db342a5 141 "mirror://gnupg/libksba/libksba-"
8d1939e4
LC
142 version ".tar.bz2"))
143 (sha256
144 (base32
6eef465e 145 "01l4hvcknk9nb4bvyb6aqaid19jg0wv3ik54j1b89hnzamwm75gb"))))
8d1939e4
LC
146 (build-system gnu-build-system)
147 (propagated-inputs
148 `(("libgpg-error" ,libgpg-error)))
e766f699
JD
149 (native-inputs
150 `(("libgpg-error" ,libgpg-error)))
151 (arguments
152 `(#:configure-flags
153 (list ,@(if (%current-target-system)
154 '("CC_FOR_BUILD=gcc")
155 '())
156 (string-append "--with-gpg-error-prefix="
157 (assoc-ref %build-inputs "libgpg-error")))))
8d1939e4 158 (home-page "http://www.gnupg.org")
35b9e423 159 (synopsis "CMS and X.509 access library")
8d1939e4
LC
160 (description
161 "KSBA (pronounced Kasbah) is a library to make X.509 certificates
162as well as the CMS easily accessible by other applications. Both
163specifications are building blocks of S/MIME and TLS.")
07157e8a 164 (license license:gpl3+)))
8d1939e4 165
c18ea90f
AE
166(define-public npth
167 (package
168 (name "npth")
169 (version "1.1")
170 (source
171 (origin
172 (method url-fetch)
173 (uri (string-append
174 "mirror://gnupg/npth/npth-"
175 version ".tar.bz2"))
176 (sha256
177 (base32
178 "0zyzwmk4mp6pas87jz35zx0jvwdz7x5b13w225gs73gcn8g5cv49"))))
179 (build-system gnu-build-system)
180 (home-page "http://www.gnupg.org")
181 (synopsis "Non-preemptive thread library")
182 (description
183 "Npth is a library to provide the GNU Pth API and thus a non-preemptive
184threads implementation.
185
186In contrast to GNU Pth is is based on the system's standard threads
187implementation. This allows the use of libraries which are not
188compatible to GNU Pth.")
07157e8a 189 (license (list license:lgpl3+ license:gpl2+)))) ; dual license
c18ea90f 190
8d1939e4
LC
191(define-public gnupg
192 (package
193 (name "gnupg")
5e5fa28e 194 (version "2.1.6")
58970d6a
LC
195 (source (origin
196 (method url-fetch)
197 (uri (string-append "mirror://gnupg/gnupg/gnupg-" version
198 ".tar.bz2"))
199 (sha256
200 (base32
5e5fa28e 201 "1zcj5vsrc64zyq7spnx2xlxlq6wxaf5bilpf6gbkp7qr8barlnay"))))
8d1939e4 202 (build-system gnu-build-system)
08fa45b1
MW
203 (native-inputs
204 `(("pkg-config" ,pkg-config)))
8d1939e4 205 (inputs
07157e8a 206 `(("bzip2" ,bzip2)
01e11826 207 ("curl" ,curl)
08fa45b1 208 ("gnutls" ,gnutls)
8d1939e4
LC
209 ("libassuan" ,libassuan)
210 ("libgcrypt" ,libgcrypt)
01e11826 211 ("libgpg-error" ,libgpg-error)
8d1939e4 212 ("libksba" ,libksba)
cd064df7 213 ("npth" ,npth)
01e11826 214 ("openldap" ,openldap)
07157e8a 215 ("zlib" ,zlib)
8d1939e4 216 ("readline" ,readline)))
30e9cbb4
AE
217 (arguments
218 `(#:phases
d4bf49b1
EB
219 (alist-cons-before
220 'configure 'patch-config-files
221 (lambda _
cd064df7
AE
222 (substitute* "tests/openpgp/defs.inc"
223 (("/bin/pwd") (which "pwd"))))
30e9cbb4 224 %standard-phases)))
8d1939e4 225 (home-page "http://gnupg.org/")
f50d2669 226 (synopsis "GNU Privacy Guard")
8d1939e4 227 (description
a22dc0c4
LC
228 "The GNU Privacy Guard is a complete implementation of the OpenPGP
229standard. It is used to encrypt and sign data and communication. It
230features powerful key management and the ability to access public key
79c311b8 231servers. It includes several libraries: libassuan (IPC between GnuPG
58970d6a
LC
232components), libgpg-error (centralized GnuPG error values), and
233libskba (working with X.509 certificates and CMS data).")
07157e8a 234 (license license:gpl3+)))
ea4d96c6 235
cd064df7
AE
236(define-public gnupg-2.0
237 (package (inherit gnupg)
de8a1818 238 (version "2.0.28")
cd064df7
AE
239 (source (origin
240 (method url-fetch)
241 (uri (string-append "mirror://gnupg/gnupg/gnupg-" version
242 ".tar.bz2"))
243 (sha256
244 (base32
de8a1818 245 "0k2k399fnhfhhr4dvm8d6vs4ihq6gg06191lzfwikzaqmgj2w2ff"))))
08fa45b1 246 (native-inputs '())
cd064df7 247 (inputs
07157e8a 248 `(("bzip2" ,bzip2)
cd064df7
AE
249 ("curl" ,curl)
250 ("libassuan" ,libassuan)
251 ("libgcrypt" ,libgcrypt)
252 ("libgpg-error" ,libgpg-error)
253 ("libksba" ,libksba)
254 ("pth" ,pth)
255 ("openldap" ,openldap)
07157e8a 256 ("zlib" ,zlib)
cd064df7
AE
257 ("readline" ,readline)))
258 (arguments
259 `(#:phases
260 (alist-cons-before
261 'configure 'patch-config-files
262 (lambda _
263 (substitute* "tests/openpgp/Makefile.in"
264 (("/bin/sh") (which "bash"))))
265 %standard-phases)))))
266
5249045c
MW
267(define-public gnupg-1
268 (package (inherit gnupg)
9041d935 269 (version "1.4.19")
58970d6a
LC
270 (source (origin
271 (method url-fetch)
272 (uri (string-append "mirror://gnupg/gnupg/gnupg-" version
273 ".tar.bz2"))
274 (sha256
275 (base32
9041d935 276 "11pxx26sfilh0vswylh9mhiifw5yffw7nn733zknw3sb0jfk22bz"))))
08fa45b1 277 (native-inputs '())
5249045c 278 (inputs
07157e8a
LC
279 `(("zlib" ,zlib)
280 ("bzip2" ,bzip2)
5249045c
MW
281 ("curl" ,curl)
282 ("readline" ,readline)
283 ("libgpg-error" ,libgpg-error)))
284 (arguments
285 `(#:phases (alist-cons-after
286 'unpack 'patch-check-sh
287 (lambda _
288 (substitute* "checks/Makefile.in"
289 (("/bin/sh") (which "bash"))))
290 %standard-phases)))))
291
09d5c166
AE
292(define-public gpgme
293 (package
294 (name "gpgme")
c5143851 295 (version "1.5.4")
09d5c166
AE
296 (source
297 (origin
298 (method url-fetch)
299 (uri (string-append "mirror://gnupg/gpgme/gpgme-" version
300 ".tar.bz2"))
301 (sha256
302 (base32
c5143851 303 "0v7azxazsfakvhrxzj5ysvcxma0892c89d27c17fkj8mi3nc0f5v"))))
09d5c166 304 (build-system gnu-build-system)
68640c3c
MW
305 (propagated-inputs
306 ;; Needs to be propagated because gpgme.h includes gpg-error.h.
307 `(("libgpg-error" ,libgpg-error)))
09d5c166 308 (inputs
ae3bded6 309 `(("gnupg" ,gnupg-2.0)
68640c3c 310 ("libassuan" ,libassuan)))
e6a83df1 311 (arguments '(#:make-flags '("GPG=gpg2")))
09d5c166 312 (home-page "http://www.gnupg.org/related_software/gpgme/")
35b9e423 313 (synopsis "Library providing simplified access to GnuPG functionality")
09d5c166
AE
314 (description
315 "GnuPG Made Easy (GPGME) is a library designed to make access to GnuPG
316easier for applications. It provides a High-Level Crypto API for encryption,
317decryption, signing, signature verification and key management. Currently
318it uses GnuPG as its backend but the API isn't restricted to this engine.
319
320Because the direct use of GnuPG from an application can be a complicated
321programming task, it is suggested that all software should try to use GPGME
322instead. This way bug fixes or improvements can be done at a central place
323and every application benefits from this.")
07157e8a 324 (license license:lgpl2.1+)))
09d5c166 325
ea4d96c6
AE
326(define-public pius
327 (package
328 (name "pius")
2249a168 329 (version "2.0.11")
ea4d96c6
AE
330 (source (origin
331 (method url-fetch)
332 (uri (string-append "mirror://sourceforge/pgpius/pius/"
333 version "/pius-"
334 version ".tar.bz2"))
335 (sha256 (base32
2249a168 336 "0pdbyqz6k0bm182cz81ss7yckmpms5qhrrw0wcr4a1srzcjyzf5f"))))
ea4d96c6
AE
337 (build-system gnu-build-system)
338 (inputs `(("perl" ,perl)
31fbf4b6
LC
339 ("python" ,python-2) ;uses the Python 2 'print' syntax
340 ("gpg" ,gnupg-2.0))) ;2.1 fails to talk to gpg-agent 2.0
ea4d96c6
AE
341 (arguments
342 `(#:tests? #f
343 #:phases
d4bf49b1 344 (alist-delete
ea4d96c6 345 'configure
d4bf49b1 346 (alist-delete
ea4d96c6 347 'build
ea4d96c6
AE
348 (alist-replace
349 'install
9eed6f9b
LC
350 (lambda* (#:key inputs outputs #:allow-other-keys)
351 (let* ((out (assoc-ref outputs "out"))
352 (gpg (string-append (assoc-ref inputs "gpg")
353 "/bin/gpg2")))
ea4d96c6
AE
354 (mkdir out)
355 (mkdir (string-append out "/bin"))
9eed6f9b
LC
356 (for-each (lambda (file)
357 (substitute* file
358 (("/usr/bin/gpg") gpg))
359 (copy-file file (string-append out "/bin/" file)))
360 '("pius" "pius-keyring-mgr" "pius-party-worksheet"))))
ea4d96c6 361 %standard-phases)))))
9eed6f9b 362 (synopsis "Programs to simplify GnuPG key signing")
ea4d96c6
AE
363 (description
364 "Pius (PGP Individual UID Signer) helps attendees of PGP keysigning
35b9e423
EB
365parties. It is the main utility and makes it possible to quickly and easily
366sign each UID on a set of PGP keys. It is designed to take the pain out of
ea4d96c6
AE
367the sign-all-the-keys part of PGP Keysigning Party while adding security
368to the process.
369
370pius-keyring-mgr and pius-party-worksheet help organisers of
371PGP keysigning parties.")
07157e8a 372 (license license:gpl2)
ea4d96c6 373 (home-page "http://www.phildev.net/pius/index.shtml")))
96be765c
AE
374
375(define-public signing-party
376 (package
377 (name "signing-party")
378 (version "1.1.4")
379 (source (origin
380 (method url-fetch)
381 (uri (string-append "http://ftp.debian.org/debian/pool/main/s/signing-party/signing-party_"
382 version ".orig.tar.gz"))
383 (sha256 (base32
384 "188gp0prbh8qs29lq3pbf0qibfd6jq4fk7i0pfrybl8aahvm84rx"))))
385 (build-system gnu-build-system)
386 (inputs `(("perl" ,perl)))
387 (arguments
388 `(#:tests? #f
389 #:phases
d4bf49b1
EB
390 (alist-cons-after
391 'unpack 'remove-spurious-links
392 (lambda _ (delete-file "keyanalyze/pgpring/depcomp"))
96be765c
AE
393 (alist-replace
394 'configure
395 (lambda* (#:key outputs #:allow-other-keys)
396 (let ((out (assoc-ref outputs "out")))
397 (substitute* "keyanalyze/Makefile"
398 (("LDLIBS") (string-append "CC=" (which "gcc") "\nLDLIBS")))
399 (substitute* "keyanalyze/Makefile"
400 (("./configure") (string-append "./configure --prefix=" out)))
401 (substitute* "keyanalyze/pgpring/configure"
402 (("/bin/sh") (which "bash")))
403 (substitute* "gpgwrap/Makefile"
404 (("\\} clean") (string-append "} clean\ninstall:\n\tinstall -D bin/gpgwrap "
405 out "/bin/gpgwrap\n")))
406 (substitute* '("gpgsigs/Makefile" "keyanalyze/Makefile"
407 "keylookup/Makefile" "sig2dot/Makefile"
408 "springgraph/Makefile")
409 (("/usr") out))))
410 (alist-replace
411 'install
412 (lambda* (#:key outputs #:allow-other-keys #:rest args)
413 (let ((out (assoc-ref outputs "out"))
414 (install (assoc-ref %standard-phases 'install)))
415 (apply install args)
416 (for-each
417 (lambda (dir file)
418 (copy-file (string-append dir "/" file)
419 (string-append out "/bin/" file)))
420 '("caff" "caff" "caff" "gpgdir" "gpg-key2ps"
421 "gpglist" "gpg-mailkeys" "gpgparticipants")
422 '("caff" "pgp-clean" "pgp-fixkey" "gpgdir" "gpg-key2ps"
423 "gpglist" "gpg-mailkeys" "gpgparticipants"))
424 (for-each
425 (lambda (dir file)
426 (copy-file (string-append dir "/" file)
427 (string-append out "/share/man/man1/" file)))
428 '("caff" "caff" "caff" "gpgdir"
429 "gpg-key2ps" "gpglist" "gpg-mailkeys"
430 "gpgparticipants" "gpgsigs" "gpgwrap/doc"
431 "keyanalyze" "keyanalyze/pgpring" "keyanalyze")
432 '("caff.1" "pgp-clean.1" "pgp-fixkey.1" "gpgdir.1"
433 "gpg-key2ps.1" "gpglist.1" "gpg-mailkeys.1"
434 "gpgparticipants.1" "gpgsigs.1" "gpgwrap.1"
435 "process_keys.1" "pgpring.1" "keyanalyze.1"))))
436 %standard-phases)))))
35b9e423 437 (synopsis "Collection of scripts for simplifying gnupg key signing")
96be765c 438 (description
35b9e423 439 "Signing-party is a collection for all kinds of PGP/GnuPG related things,
96be765c
AE
440including tools for signing keys, keyring analysis, and party preparation.
441
442 * caff: CA - Fire and Forget signs and mails a key
c5143851 443
96be765c
AE
444 * pgp-clean: removes all non-self signatures from key
445
446 * pgp-fixkey: removes broken packets from keys
447
448 * gpg-mailkeys: simply mail out a signed key to its owner
449
450 * gpg-key2ps: generate PostScript file with fingerprint paper strips
451
452 * gpgdir: recursive directory encryption tool
453
454 * gpglist: show who signed which of your UIDs
455
456 * gpgsigs: annotates list of GnuPG keys with already done signatures
457
458 * gpgparticipants: create list of party participants for the organiser
459
460 * gpgwrap: a passphrase wrapper
461
462 * keyanalyze: minimum signing distance (MSD) analysis on keyrings
463
464 * keylookup: ncurses wrapper around gpg --search
465
466 * sig2dot: converts a list of GnuPG signatures to a .dot file
467
468 * springgraph: creates a graph from a .dot file")
469 ;; gpl2+ for almost all programs, except for keyanalyze: gpl2
470 ;; and caff and gpgsigs: bsd-3, see
471 ;; http://packages.debian.org/changelogs/pool/main/s/signing-party/current/copyright
07157e8a 472 (license license:gpl2)
96be765c 473 (home-page "http://pgp-tools.alioth.debian.org/")))
40d806af
LC
474
475(define-public pinentry
476 (package
477 (name "pinentry")
3e74dcd0 478 (version "0.9.0")
40d806af
LC
479 (source (origin
480 (method url-fetch)
481 (uri (string-append "mirror://gnupg/pinentry/pinentry-"
482 version ".tar.bz2"))
483 (sha256
484 (base32
3e74dcd0 485 "1awhajq21hcjgqfxg9czaxg555gij4bba6axrwg8w6lfmc3ml14h"))))
40d806af
LC
486 (build-system gnu-build-system)
487 (inputs
488 `(("ncurses" ,ncurses)
489 ("gtk+" ,gtk+-2)
490 ("glib" ,glib)))
491 (native-inputs
492 `(("pkg-config" ,pkg-config)))
493 (home-page "http://gnupg.org/aegypten2/")
494 (synopsis "GnuPG's interface to passphrase input")
495 (description
496 "Pinentry provides a console and a GTK+ GUI that allows users to
497enter a passphrase when `gpg' or `gpg2' is run and needs it.")
07157e8a 498 (license license:gpl2+)))
4380a7b4
EB
499
500(define-public paperkey
501 (package
502 (name "paperkey")
503 (version "1.3")
504 (source (origin
505 (method url-fetch)
506 (uri (string-append "http://www.jabberwocky.com/"
507 "software/paperkey/paperkey-"
508 version ".tar.gz"))
509 (sha256
510 (base32
511 "1yybj8bj68v4lxwpn596b6ismh2fyixw5vlqqg26byrn4d9dfmsv"))))
512 (build-system gnu-build-system)
513 (arguments
514 `(#:phases
d4bf49b1
EB
515 (alist-cons-before
516 'check 'patch-check-scripts
517 (lambda _
518 (substitute* '("checks/roundtrip.sh"
519 "checks/roundtrip-raw.sh")
520 (("/bin/echo") "echo")))
4380a7b4
EB
521 %standard-phases)))
522 (home-page "http://www.jabberwocky.com/software/paperkey/")
523 (synopsis "Backup OpenPGP keys to paper")
524 (description
525 "Paperkey extracts the secret bytes from an OpenPGP (GnuPG, PGP, etc) key
526for printing with paper and ink, which have amazingly long retention
527qualities. To reconstruct a secret key, you re-enter those
528bytes (whether by hand, OCR, QR code, or the like) and paperkey can use
529them to transform your existing public key into a secret key.")
07157e8a 530 (license license:gpl2+)))