projects/guix·blob javascript-team · refs

1502 lines · 57.3 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2014, 2021 Ludovic Courtès <[email protected]>
3;;; Copyright © 2016, 2021, 2022 Efraim Flashner <[email protected]>
4;;; Copyright © 2016 Mike Gerwitz <[email protected]>
5;;; Copyright © 2016 Marius Bakke <[email protected]>
6;;; Copyright © 2017 Thomas Danckaert <[email protected]>
7;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <[email protected]>
8;;; Copyright © 2017, 2019, 2023 Ricardo Wurmus <[email protected]>
9;;; Copyright © 2018, 2019 Chris Marusich <[email protected]>
10;;; Copyright © 2018 Arun Isaac <[email protected]>
11;;; Copyright © 2020 Raphaël Mélotte <[email protected]>
12;;; Copyright © 2021 Maxime Devos <[email protected]>
13;;; Copyright © 2021 Antero Mejr <[email protected]>
14;;; Copyright © 2021 Brice Waegeneire <[email protected]>
15;;; Copyright © 2021 Sergey Trofimov <[email protected]>
16;;; Copyright © 2021 Dhruvin Gandhi <[email protected]>
17;;; Copyright © 2021, 2026 Ahmad Jarara <[email protected]>
18;;; Copyright © 2022, 2023 John Kehayias <[email protected]>
19;;; Copyright © 2022 Petr Hodina <[email protected]>
20;;; Copyright © 2022 Denis 'GNUtoo' Carikli <[email protected]>
21;;; Copyright © 2023 Jake Leporte <[email protected]>
22;;; Copyright © 2023 Timotej Lazar <[email protected]>
23;;; Copyright © 2023, 2025 Maxim Cournoyer <[email protected]>
24;;; Copyright © 2023 Pierre Langlois <[email protected]>
25;;; Copyright © 2024 Janneke Nieuwenhuizen <[email protected]>
26;;; Copyright © 2025 Robin Templeton <[email protected]>
27;;; Copyright © 2025 Laura Kirsch <[email protected]>
28;;; Copyright © 2025 Cayetano Santos <[email protected]>
29;;;
30;;; This file is part of GNU Guix.
31;;;
32;;; GNU Guix is free software; you can redistribute it and/or modify it
33;;; under the terms of the GNU General Public License as published by
34;;; the Free Software Foundation; either version 3 of the License, or (at
35;;; your option) any later version.
36;;;
37;;; GNU Guix is distributed in the hope that it will be useful, but
38;;; WITHOUT ANY WARRANTY; without even the implied warranty of
39;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
40;;; GNU General Public License for more details.
41;;;
42;;; You should have received a copy of the GNU General Public License
43;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
44
45(define-module (gnu packages security-token)
46 #:use-module (gnu packages)
47 #:use-module ((guix licenses) #:prefix license:)
48 #:use-module (guix packages)
49 #:use-module (guix download)
50 #:use-module (guix gexp)
51 #:use-module (guix utils)
52 #:use-module (guix git-download)
53 #:use-module (guix build-system cargo)
54 #:use-module (guix build-system cmake)
55 #:use-module (guix build-system gnu)
56 #:use-module (guix build-system glib-or-gtk)
57 #:use-module (guix build-system meson)
58 #:use-module (guix build-system pyproject)
59 #:use-module (guix build-system qt)
60 #:use-module (gnu packages autotools)
61 #:use-module (gnu packages base)
62 #:use-module (gnu packages bash)
63 #:use-module (gnu packages curl)
64 #:use-module (gnu packages check)
65 #:use-module (gnu packages compression)
66 #:use-module (gnu packages crypto)
67 #:use-module (gnu packages docbook)
68 #:use-module (gnu packages documentation)
69 #:use-module (gnu packages dns)
70 #:use-module (gnu packages compiler-tools)
71 #:use-module (gnu packages gettext)
72 #:use-module (gnu packages glib)
73 #:use-module (gnu packages graphviz)
74 #:use-module (gnu packages gnome)
75 #:use-module (gnu packages gnupg)
76 #:use-module (gnu packages gtk)
77 #:use-module (gnu packages libusb)
78 #:use-module (gnu packages libffi)
79 #:use-module (gnu packages linux)
80 #:use-module (gnu packages lua)
81 #:use-module (gnu packages man)
82 #:use-module (gnu packages networking)
83 #:use-module (gnu packages cyrus-sasl)
84 #:use-module (gnu packages openldap)
85 #:use-module (gnu packages popt)
86 #:use-module (gnu packages readline)
87 #:use-module (gnu packages qt)
88 #:use-module (gnu packages serialization)
89 #:use-module (gnu packages time)
90 #:use-module (gnu packages tls)
91 #:use-module (gnu packages tex)
92 #:use-module (gnu packages perl)
93 #:use-module (gnu packages pkg-config)
94 #:use-module (gnu packages polkit)
95 #:use-module (gnu packages protobuf)
96 #:use-module (gnu packages python)
97 #:use-module (gnu packages python-build)
98 #:use-module (gnu packages python-check)
99 #:use-module (gnu packages python-crypto)
100 #:use-module (gnu packages python-web)
101 #:use-module (gnu packages python-xyz)
102 #:use-module (gnu packages swig)
103 #:use-module (gnu packages suckless)
104 #:use-module (gnu packages web)
105 #:use-module (gnu packages xdisorg)
106 #:use-module (gnu packages xml))
107
108(define-public ccid
109 (package
110 (name "ccid")
111 (version "1.8.3")
112 (source
113 (origin
114 (method git-fetch)
115 (uri (git-reference
116 (url "https://salsa.debian.org/rousseau/CCID")
117 (commit version)))
118 (file-name (git-file-name name version))
119 (sha256
120 (base32 "1618rfnhzirlxy407a1dnk27z32davxsqnm4gxh4mv9xpszmn736"))))
121 (build-system meson-build-system)
122 (arguments
123 (list
124 #:phases
125 #~(modify-phases %standard-phases
126 (add-after 'unpack 'patch-data-paths
127 (lambda _
128 (substitute* "meson.build"
129 (("pcsc_dep\\.get_variable\\('usbdropdir'\\)")
130 (string-append "'" #$output "/pcsc/drivers'"))
131 (("udev\\.get_variable\\(pkgconfig: 'udevdir'\\)")
132 (string-append "'" #$output "/lib/udev/'"))))))))
133 (native-inputs
134 (list flex
135 perl
136 pkg-config))
137 (inputs
138 (list libusb pcsc-lite eudev zlib))
139 (home-page "https://ccid.apdu.fr/")
140 (synopsis "PC/SC driver for USB smart card devices")
141 (description
142 "This package provides a PC/SC IFD handler implementation for devices
143compliant with the CCID and ICCD protocols. It supports a wide range of
144readers and is needed to communicate with such devices through the
145@command{pcscd} resource manager.")
146 (license license:lgpl2.1+)))
147
148(define-public eid-mw
149 (package
150 (name "eid-mw")
151 (version "5.1.19")
152 (source
153 (origin
154 (method git-fetch)
155 (uri (git-reference
156 (url "https://github.com/Fedict/eid-mw")
157 (commit (string-append "v" version))))
158 (file-name (git-file-name name version))
159 (sha256
160 (base32 "12hhr5v4shsg47wg10p7l03xhzpc1yk46h4bfxq5c224cbf4qrs8"))))
161 (build-system glib-or-gtk-build-system)
162 (native-inputs
163 (list autoconf
164 autoconf-archive
165 automake
166 gettext-minimal
167 libassuan
168 libtool
169 perl
170 pkg-config))
171 (inputs
172 (list curl
173 openssl
174 gtk+
175 pcsc-lite
176 p11-kit
177 libproxy
178 libxml2
179 cyrus-sasl))
180 (arguments
181 `(#:configure-flags
182 (list "--disable-static"
183
184 ;; With the (prettier) pinentry enabled, eid-viewer will skip
185 ;; crucial dialogue when used with card readers with built-in
186 ;; keypads such as the Digipass 870, and possibly others too.
187 "--disable-pinentry")
188 #:phases
189 (modify-phases %standard-phases
190 (replace 'bootstrap
191 (lambda _
192 ;; configure.ac relies on ‘git --describe’ to get the version.
193 ;; Patch it to just return the real version number directly.
194 (substitute* "scripts/build-aux/genver.sh"
195 (("/bin/sh") (which "sh"))
196 (("^(GITDESC=).*" _ match) (string-append match ,version "\n")))
197 (invoke "sh" "./bootstrap.sh"))))))
198 (synopsis "Belgian electronic identity card (eID) middleware")
199 (description "The Belgian eID middleware is required to authenticate with
200online services and sign digital documents with Belgian identity cards.
201
202It requires a running pcscd service and a compatible card reader.")
203 (home-page "https://github.com/Fedict/eid-mw")
204 (license license:lgpl3)))
205
206(define-public libyubikey
207 (package
208 (name "libyubikey")
209 (version "1.13")
210 (source (origin
211 (method url-fetch)
212 (uri (string-append
213 "https://developers.yubico.com/yubico-c/Releases/"
214 name "-" version ".tar.gz"))
215 (sha256
216 (base32
217 "009l3k2zyn06dbrlja2d4p2vfnzjhlcqxi88v02mlrnb17mx1v84"))))
218 (build-system gnu-build-system)
219 (synopsis "Development kit for the YubiKey authentication device")
220 (description
221 "This package contains a C library and command-line tools that make up
222the low-level development kit for the Yubico YubiKey authentication device.")
223 (home-page "https://developers.yubico.com/yubico-c/")
224 (license license:bsd-2)))
225
226(define-public softhsm
227 (package
228 (name "softhsm")
229 (version "2.7.0")
230 (source (origin
231 (method git-fetch)
232 (uri (git-reference
233 (url "https://github.com/softhsm/SoftHSMv2.git")
234 (commit version)))
235 (file-name (git-file-name name version))
236 (sha256
237 (base32
238 "0km7pnwp1ny7k317srpagwp3mnb5f5b1d82fj07hqgcmc209s2l3"))))
239 (build-system gnu-build-system)
240 (arguments
241 (list #:configure-flags
242 #~(list "--disable-gost" ;TODO Missing the OpenSSL engine for GOST
243 (string-append "--with-p11-kit="
244 #$output "/share/p11-kit/modules"))))
245 (inputs (list openssl))
246 (native-inputs
247 (list autoconf
248 automake
249 cppunit
250 libtool
251 pkg-config))
252 (synopsis "Software implementation of a generic cryptographic device")
253 (description
254 "SoftHSM 2 is a software implementation of a generic cryptographic device
255with a PKCS #11 Cryptographic Token Interface.")
256 (home-page "https://www.opendnssec.org/softhsm/")
257 (license license:bsd-2)))
258
259(define-public pcsc-lite
260 (package
261 (name "pcsc-lite")
262 (version "2.5.0")
263 (source (origin
264 (method url-fetch)
265 (uri (string-append "https://pcsclite.apdu.fr/files/"
266 "pcsc-lite-" version ".tar.xz"))
267 (sha256
268 (base32
269 "14nvalmvj2vpf89qkl3xgqhylm5d8vpv7dfyirljicjapssw9csr"))))
270 (build-system meson-build-system)
271 (arguments
272 (list
273 #:configure-flags #~(list "-Dusbdropdir=/var/lib/pcsc/drivers"
274 "-Dlibsystemd=false")
275 #:phases
276 #~(modify-phases %standard-phases
277 (add-after 'unpack 'set-policy-dir
278 (lambda _
279 (substitute* "meson.build"
280 (("install_dir : polkit_dep\\.get_variable\\('policydir'\\)")
281 (string-append "install_dir : '"
282 #$output "/share/polkit-1/actions'")))
283 (substitute* "src/libredirect.c"
284 (("libpcsclite_real.so.1")
285 (string-append #$output "/lib/libpcsclite_real.so.1")))
286 (substitute* "src/spy/libpcscspy.c"
287 (("libpcsclite_real.so.1")
288 (string-append #$output "/lib/libpcsclite_real.so.1"))))))))
289 (native-inputs
290 (list flex
291 perl ;for pod2man
292 pkg-config))
293 (inputs
294 (list python eudev polkit))
295 (home-page "https://pcsclite.apdu.fr/")
296 (synopsis "Middleware to access a smart card using PC/SC")
297 (description
298 "pcsc-lite provides an interface to communicate with smartcards and
299readers using the SCard API. pcsc-lite is used to connect to the PC/SC daemon
300from a client application and provide access to the desired reader.")
301 (license (list license:bsd-3 ; pcsc-lite
302 license:isc ; src/strlcat.c src/strlcpy.c
303 license:gpl3+)))) ; src/spy/*
304
305(define-public pcsc-tools
306 (package
307 (name "pcsc-tools")
308 (version "1.7.5")
309 (source (origin
310 (method git-fetch)
311 (uri (git-reference
312 (url "https://salsa.debian.org/rousseau/pcsc-tools.git/")
313 (commit version)))
314 (file-name (git-file-name name version))
315 (sha256
316 (base32
317 "1bps3lg5g14hkfnh6fxkrl5lilss502c7c4x5n9glrgc3k00kaf5"))))
318 (build-system gnu-build-system)
319 (arguments
320 (list
321 #:phases #~(modify-phases %standard-phases
322 (add-after 'patch-shebangs 'wrap-programs
323 (lambda _
324 (for-each
325 (lambda (prog)
326 (wrap-program (string-append #$output "/bin/" prog)
327 `("PERL5LIB" = (,(getenv "PERL5LIB")))))
328 '("ATR_analysis" "gscriptor" "scriptor"))
329 (wrap-program (string-append #$output "/bin/gscriptor")
330 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))))))))
331 (native-inputs
332 (list autoconf
333 autoconf-archive
334 automake
335 libtool
336 pkg-config
337 python-minimal-wrapper))
338 (inputs (list bash-minimal ;for wrap-program
339 perl
340 perl-gtk3
341 pcsc-lite
342 perl-pcsc))
343 (synopsis "Smart cards and PC/SC tools")
344 (description "This package provides the @command{pcsc_scan},
345@command{ATR_analysis}, @command{scriptor}, and @command{gscriptor} commands,
346which are useful tools to test a PC/SC driver, card or reader or send commands
347in a friendly environment (text or graphical user interface).")
348 (home-page "https://pcsc-tools.apdu.fr/")
349 (license license:gpl2+)))
350
351(define-public ykclient
352 (package
353 (name "ykclient")
354 (version "2.15")
355 (source (origin
356 (method url-fetch)
357 (uri (string-append
358 "https://developers.yubico.com/yubico-c-client/Releases/"
359 name "-" version ".tar.gz"))
360 (sha256
361 (base32
362 "05jhx9waj3pl120ddnwap1v3bjrnbfhvf3lxs2xmhpcmwzpwsqgl"))))
363 (build-system gnu-build-system)
364
365 ;; There's just one test, and it requires network access to access
366 ;; yubico.com, so skip it.
367 (arguments '(#:tests? #f))
368
369 (native-inputs (list pkg-config help2man))
370 (inputs (list curl))
371 (synopsis "C library to validate one-time-password YubiKeys")
372 (description
373 "YubiKey C Client Library (libykclient) is a C library used to validate a
374one-time-password (OTP) YubiKey against Yubico’s servers. See the Yubico
375website for more information about Yubico and the YubiKey.")
376 (home-page "https://developers.yubico.com/yubico-c-client/")
377 (license license:bsd-2)))
378
379(define-public libp11
380 (package
381 (name "libp11")
382 (version "0.4.21")
383 (source (origin
384 (method git-fetch)
385 (uri (git-reference
386 (url "https://github.com/OpenSC/libp11")
387 (commit (string-append "libp11-" version))))
388 (file-name (git-file-name name version))
389 (sha256
390 (base32
391 "03x9wlj1z4dv4xlzx2b9p9prhgc8j9cl361g8fsnl1hmkcy3v9sf"))))
392 (build-system gnu-build-system)
393 (arguments
394 (list #:configure-flags
395 #~(list "--disable-static"
396 (string-append "--with-enginesdir="
397 #$output "/lib/engines-3")
398 (string-append "--with-modulesdir="
399 #$output "/lib/ossl-modules"))))
400 (native-inputs (list autoconf automake libtool pkg-config))
401 (inputs (list openssl))
402 (home-page "https://github.com/OpenSC/libp11")
403 (synopsis "PKCS#11 wrapper library")
404 (description "This package provides two libraries:
405@table @code
406@item libp11
407provides a higher-level (compared to the PKCS#11 library) interface to access
408PKCS#11 objects. It is designed to integrate with applications that use
409OpenSSL.
410@item pkcs11prov
411OpenSSL provider module that allows accessing PKCS#11 modules in a
412semi-transparent way.
413@end table")
414 (license license:lgpl2.1+)))
415
416(define-public pkcs11-provider
417 (package
418 (name "pkcs11-provider")
419 (version "1.2.0")
420 (source
421 (origin
422 (method git-fetch)
423 (uri (git-reference
424 (url "https://github.com/latchset/pkcs11-provider/")
425 (commit (string-append "v" version))))
426 (file-name (git-file-name name version))
427 (sha256
428 (base32
429 "1k4hcdh748x4lyrb1gq69wm28909d0qw6rb2fpxhxsd07k0mxpi4"))))
430 (build-system meson-build-system)
431 (arguments
432 (list #:phases
433 #~(modify-phases %standard-phases
434 (add-after 'unpack 'adjust-provider-path
435 ;; By default, the modulesdir variable from libcrypto.pc is
436 ;; used, which points to OpenSSL's installation prefix.
437 (lambda _
438 (substitute* "meson.build"
439 (("provider_path =.*")
440 (format #f "provider_path = '~a/lib/ossl-modules'~%"
441 #$output))))))))
442 (native-inputs (list pkg-config)) ;for PKG_CONFIG_PATH
443 (inputs (list openssl p11-kit))
444 (home-page "https://github.com/latchset/pkcs11-provider")
445 (synopsis "Pkcs#11 provider for OpenSSL")
446 (description "This is an OpenSSL provider to access hardware and software
447tokens using the PKCS#11 cryptographic token interface. Access to tokens
448depends on loading an appropriate PKCS#11 driver that knows how to talk to the
449specific token. The PKCS#11 provider is a connector that allows OpenSSL to
450make proper use of such drivers.")
451 (license license:asl2.0)))
452
453(define-public opensc
454 (package
455 (name "opensc")
456 (version "0.27.1")
457 (source (origin
458 (method url-fetch)
459 (uri (string-append
460 "https://github.com/OpenSC/OpenSC/releases/download/"
461 version "/opensc-" version ".tar.gz"))
462 (sha256
463 (base32
464 "19zcwpmaxgs5c7q7k6lwh8yqq6lppy0aqyis5hd7lfgkx8illvwp"))))
465 (build-system gnu-build-system)
466 (arguments
467 (list
468 #:phases
469 #~(modify-phases %standard-phases
470 ;; By setting an absolute path here, we arrange for OpenSC to
471 ;; successfully dlopen libpcsclite.so.1 by default. The user can
472 ;; still override this if they want to, by specifying a custom OpenSC
473 ;; configuration file at runtime.
474 (add-after 'unpack 'set-default-libpcsclite.so.1-path
475 (lambda* (#:key inputs #:allow-other-keys)
476 (let ((libpcsclite (search-input-file inputs "/lib/libpcsclite.so.1")))
477 (substitute* "configure"
478 (("DEFAULT_PCSC_PROVIDER=\"libpcsclite\\.so\\.1\"")
479 (string-append "DEFAULT_PCSC_PROVIDER=\"" libpcsclite "\"")))))))))
480 (inputs
481 (list readline openssl pcsc-lite ccid))
482 (native-inputs
483 (list libxslt docbook-xsl pkg-config))
484 (home-page "https://github.com/OpenSC/OpenSC/wiki")
485 (synopsis "Tools and libraries related to smart cards")
486 (description
487 "OpenSC is a set of software tools and libraries to work with smart
488cards, with the focus on smart cards with cryptographic capabilities. OpenSC
489facilitate the use of smart cards in security applications such as
490authentication, encryption and digital signatures. OpenSC implements the PKCS
491#15 standard and the PKCS #11 API.")
492 (license license:lgpl2.1+)))
493
494(define-public pkcs11-helper
495 (package
496 (name "pkcs11-helper")
497 (version "1.31.0")
498 (source
499 (origin
500 (method url-fetch)
501 (uri (string-append
502 "https://github.com/OpenSC/pkcs11-helper/releases/download/pkcs11-helper-"
503 version "/pkcs11-helper-" version ".tar.bz2"))
504 (sha256
505 (base32 "1ygy6ca87fx89js804pwnqpybfbja5vwm2wbz0l2rgnprixhdw26"))))
506 (build-system gnu-build-system)
507 (inputs (list openssl pcsc-lite))
508 (native-inputs (list pkg-config))
509 (home-page "https://github.com/OpenSC/pkcs11-helper")
510 (synopsis "Library that simplifies the interaction with PKCS#11 providers")
511 (description
512 "Pkcs11-helper is a library that simplifies the interaction with PKCS#11
513providers for end-user applications. PKCS#11 is published standard. PKCS#11
514is the de-facto standard to access cryptographic devices")
515 (license (list license:gpl2 license:bsd-3))))
516
517
518(define-public yubico-piv-tool
519 (package
520 (name "yubico-piv-tool")
521 (version "2.7.3")
522 (source (origin
523 (method git-fetch)
524 (uri (git-reference
525 (url "https://github.com/Yubico/yubico-piv-tool/")
526 (commit (string-append name "-" version))))
527 (file-name (git-file-name name version))
528 (sha256
529 (base32
530 "0dq81nn2j3xh7p01ix1l87v7x0jqlahbmj9r3lppn7xds73jqxh5"))))
531 (build-system cmake-build-system)
532 (inputs
533 (list gengetopt perl pcsc-lite openssl zlib))
534 (native-inputs
535 (list check
536 doxygen
537 graphviz
538 help2man
539 pkg-config
540 (texlive-local-tree)))
541 (home-page "https://developers.yubico.com/yubico-piv-tool/")
542 (synopsis "Interact with the PIV application on a YubiKey")
543 (description
544 "The Yubico PIV tool is used for interacting with the Privilege and
545Identification Card (PIV) application on a YubiKey. With it you may generate
546keys on the device, import keys and certificates, create certificate requests,
547and other operations. It includes a library and a command-line tool.")
548 ;; The file ykcs11/pkcs11.h also declares an additional, very short free
549 ;; license for that one file. Please see it for details. The vast
550 ;; majority of files are licensed under bsd-2.
551 (license license:bsd-2)))
552
553(define-public python-nethsm
554 (package
555 (name "python-nethsm")
556 (version "3.0.0")
557 (source
558 (origin
559 (method git-fetch)
560 (uri (git-reference
561 (url "https://github.com/Nitrokey/nethsm-sdk-py")
562 (commit (string-append "v" version))))
563 (file-name (git-file-name name version))
564 (sha256
565 (base32 "1lfz62l8pcaxhgs08g2r0jl5jqqs36zf3vw8zsi755nqvf87zrlh"))))
566 (build-system pyproject-build-system)
567 (arguments
568 (list
569 #:test-flags
570 #~(list
571 ;; These tests need a running docker daemon.
572 "--ignore" "tests/test_nethsm_config.py"
573 "--ignore" "tests/test_nethsm_keys.py"
574 "--ignore" "tests/test_nethsm_namespaces.py"
575 "--ignore" "tests/test_nethsm_other.py"
576 "--ignore" "tests/test_nethsm_system.py"
577 "--ignore" "tests/test_nethsm_users.py")
578 #:phases
579 #~(modify-phases %standard-phases
580 ;; Remove test-only dependency on python-docker and python-podman
581 ;; (which is not packaged). These tests are disabled anyway.
582 (add-after 'unpack 'remove-unused-imports
583 (lambda _
584 (substitute* "tests/utilities.py"
585 (("import (docker|podman).*") "")))))))
586 (propagated-inputs (list python-certifi
587 python-cryptography
588 python-pycryptodome
589 python-dateutil
590 python-typing-extensions
591 python-urllib3))
592 (native-inputs (list python-poetry-core python-pytest python-requests))
593 (home-page "https://github.com/Nitrokey/nethsm-sdk-py")
594 (synopsis "SDK for NetHSM")
595 (description "Client-side Python library for managing Nitrokey
596NetHSM @acronym{HSM, Hardware Security Modules}s.")
597 (license license:asl2.0)))
598
599(define-public python-nitrokey
600 (package
601 (name "python-nitrokey")
602 (version "0.4.2")
603 (source
604 (origin
605 (method git-fetch)
606 (uri (git-reference
607 (url "https://github.com/Nitrokey/nitrokey-sdk-py")
608 (commit (string-append "v" version))))
609 (file-name (git-file-name name version))
610 (sha256
611 (base32 "1s68jy284fi33af09aj80pndsn1x9gxx253hgi91xnqyg2lhv4yx"))))
612 (build-system pyproject-build-system)
613 (propagated-inputs (list python-crcmod
614 python-cryptography
615 python-fido2
616 python-hidapi
617 python-protobuf
618 python-pyserial
619 python-requests
620 python-semver
621 python-tlv8))
622 (native-inputs (list python-poetry-core))
623 (home-page "https://github.com/Nitrokey/nitrokey-sdk-py")
624 (synopsis "Nitrokey Python SDK")
625 (description "Python SDK for using and configuring Nitrokey devices.")
626 (license (list license:asl2.0 license:expat))))
627
628(define-public python-nkdfu
629 (package
630 (name "python-nkdfu")
631 (version "0.2")
632 (source
633 (origin
634 (method git-fetch)
635 (uri (git-reference
636 (url "https://github.com/Nitrokey/nkdfu")
637 (commit (string-append "v" version))))
638 (file-name (git-file-name name version))
639 (sha256
640 (base32 "1252gdpbfxd4bfzr6wqzcfvc0lyr8kkx1293s4b1cwqfxv1gbp0c"))))
641 (build-system pyproject-build-system)
642 (arguments
643 (list
644 #:tests? #f)) ;No tests
645 (propagated-inputs (list python-fire python-intelhex python-libusb1
646 python-tqdm))
647 (native-inputs (list python-flit-core))
648 (home-page "https://github.com/Nitrokey/nkdfu")
649 (synopsis "Firmware upgrade tool")
650 (description "@acronym{DFU, Device Firmware Upgrade} tool for updating
651Nitrokey token firmware.")
652 (license license:gpl2)))
653
654(define-public python-pynitrokey
655 (package
656 (name "python-pynitrokey")
657 (version "0.13.0")
658 (source
659 (origin
660 (method git-fetch)
661 (uri (git-reference
662 (url "https://github.com/Nitrokey/pynitrokey")
663 (commit (string-append "v" version))))
664 (file-name (git-file-name name version))
665 (sha256
666 (base32 "0pg8f5756a9vvvc30f37cc9g8kvwcl0bay6qc2r5l7p8d3rvy1gd"))))
667 (build-system pyproject-build-system)
668 (propagated-inputs (list python-cffi
669 python-click
670 python-cryptography
671 python-fido2
672 python-hidapi
673 python-intelhex
674 python-libusb1
675 python-nethsm
676 python-nitrokey
677 python-nkdfu
678 python-pyscard
679 python-pyserial
680 python-pyusb
681 python-requests
682 python-semver
683 python-tlv8
684 python-tqdm))
685 (native-inputs (list python-poetry-core python-pytest))
686 (home-page "https://github.com/Nitrokey/pynitrokey")
687 (synopsis "Python client for Nitrokey devices")
688 (description "Python client application for managing Nitrokey devices
689with the @code{nitropy} CLI application.")
690 (license (list license:gpl3+ license:lgpl3 license:asl2.0))))
691
692(define-public python-yubico
693 (package
694 (name "python-yubico")
695 (version "1.3.3")
696 (source
697 (origin
698 (method git-fetch)
699 (uri (git-reference
700 (url "https://github.com/Yubico/python-yubico")
701 (commit (string-append name "-" version))))
702 (file-name (git-file-name name version))
703 (sha256
704 (base32
705 "1bn1v3b0cdjziaz9qiix52z3f8yw74m9mxbv0n18np1lc4cbjyvk"))))
706 (build-system pyproject-build-system)
707 (arguments
708 (list
709 #:test-flags
710 #~(list "--ignore=test/usb/test_yubikey_usb_hid.py")))
711 (propagated-inputs (list python-pyusb))
712 (native-inputs (list python-setuptools
713 python-pytest))
714 (home-page "https://github.com/Yubico/python-yubico")
715 (synopsis "Python library for Yubico's YubiKeys")
716 (description "This package provides a python library for talking to Yubico's
717@code{YubiKeys}.")
718 (license license:bsd-2)))
719
720(define-public yubikey-personalization
721 (package
722 (name "yubikey-personalization")
723 (version "1.20.0")
724 (source (origin
725 (method url-fetch)
726 (uri (string-append
727 "https://developers.yubico.com/" name
728 "/Releases/ykpers-" version ".tar.gz"))
729 (sha256
730 (base32
731 "14wvlwqnwj0gllkpvfqiy8ns938bwvjsz8x1hmymmx32m074vj0f"))
732 (modules '((guix build utils)))
733 (snippet
734 ;; Fix build with GCC 10, remove for versions > 1.20.0.
735 '(begin
736 (substitute* "ykpers-args.h"
737 (("^const char")
738 "extern const char"))))))
739 (build-system gnu-build-system)
740 (arguments
741 '(#:configure-flags (list (string-append "--with-udevrulesdir="
742 (assoc-ref %outputs "out")
743 "/lib/udev/rules.d"))))
744 (inputs
745 (list json-c-0.13 libusb
746 ;; The library "libyubikey" is also known as "yubico-c".
747 libyubikey))
748 (native-inputs
749 (list pkg-config eudev))
750 (home-page "https://developers.yubico.com/yubikey-personalization/")
751 (synopsis "Library and tools to personalize YubiKeys")
752 (description
753 "The YubiKey Personalization package contains a C library and command
754line tools for personalizing YubiKeys. You can use these to set an AES key,
755retrieve a YubiKey's serial number, and so forth.")
756 (license license:bsd-2)))
757
758(define-public python-pyscard
759 (package
760 (name "python-pyscard")
761 (version "2.3.1")
762 (source (origin
763 (method git-fetch)
764 (uri (git-reference
765 (url "https://github.com/LudovicRousseau/pyscard")
766 (commit version)))
767 (file-name (git-file-name name version))
768 (sha256
769 (base32
770 "1qxfps4rfj9s3a0a9rnwdbmjslki3v0rma4kzrcbgz6snj1w4vri"))))
771 (build-system pyproject-build-system)
772 (arguments
773 `(#:phases
774 (modify-phases %standard-phases
775 ;; Tell pyscard where to find the PCSC include directory.
776 (add-after 'unpack 'patch-platform-include-dirs
777 (lambda* (#:key inputs #:allow-other-keys)
778 (let ((pcsc-include-dir (search-input-directory
779 inputs "/include/PCSC")))
780 (substitute* "setup.py"
781 (("platform_include_dirs = \\[.*?\\]")
782 (string-append
783 "platform_include_dirs = ['" pcsc-include-dir "']"))))))
784 ;; pyscard wants to dlopen libpcsclite, so tell it where it is.
785 (add-after 'unpack 'patch-dlopen
786 (lambda* (#:key inputs #:allow-other-keys)
787 (substitute* "src/smartcard/scard/winscarddll.c"
788 (("lib = \"libpcsclite\\.so\\.1\";")
789 (simple-format
790 #f
791 "lib = \"~a\";"
792 (search-input-file inputs "/lib/libpcsclite.so.1")))))))))
793 (inputs
794 (list pcsc-lite))
795 (native-inputs
796 (list python-pytest
797 python-setuptools
798 swig-4.4))
799 (home-page "https://github.com/LudovicRousseau/pyscard")
800 (synopsis "Smart card library for Python")
801 (description
802 "The pyscard smart card library is a framework for building smart card
803aware applications in Python. The smart card module is built on top of the
804PCSC API Python wrapper module.")
805 (license license:lgpl2.1+)))
806
807(define-public yubikey-oath-dmenu
808 (package
809 (name "yubikey-oath-dmenu")
810 (version "0.14.0")
811 (source
812 (origin
813 (method git-fetch)
814 (uri (git-reference
815 (url "https://github.com/emlun/yubikey-oath-dmenu")
816 (commit (string-append "v" version))))
817 (file-name (git-file-name name version))
818 (sha256
819 (base32
820 "0kiv5j67h66bm1d12ny6aw5sqnan33vbs2q4w4ms6f6a709c0xyl"))))
821 (build-system pyproject-build-system)
822 (arguments
823 (list
824 #:tests? #f ; there are no tests
825 #:phases
826 #~(modify-phases %standard-phases
827 (delete 'configure) ; no configure script
828 (delete 'build) ; or build
829 (add-after 'unpack 'fix-paths
830 (lambda* (#:key inputs #:allow-other-keys)
831 (substitute* "yubikey-oath-dmenu.py"
832 (("'(dmenu|notify-send|wl-copy|xclip|xdotool)" _ tool)
833 (string-append
834 "'"
835 (search-input-file inputs
836 (string-append "/bin/" tool)))))))
837 (replace 'install
838 (lambda _
839 (invoke "make" "install"
840 (string-append "PREFIX=" #$output)))))))
841 (native-inputs (list python-setuptools))
842 (inputs
843 (list dmenu
844 libnotify
845 python-click
846 python-yubikey-manager
847 ;; TODO add wtype, once packaged, for type support for Wayland
848 wl-clipboard ; optional clipboard support for Wayland
849 xclip ; optional clipboard support for X11
850 xdotool)) ; optional type support for X11
851 (home-page
852 "https://github.com/emlun/yubikey-oath-dmenu/")
853 (synopsis "Interface for getting OATH codes from a YubiKey using dmenu")
854 (description
855 "Yubikey-oath-demenu lets you pick an OATH credential from your YubiKey using
856dmenu, and copies the corresponding OTP to the clipboard. Alternatively, it
857can \"type\" the OTP using @code{xdotool} on X11.
858
859Notable features:
860
861@itemize
862@item Pick between all credentials on all connected YubiKeys
863@item No mouse interaction required
864@end itemize\n")
865 (license license:gpl3+)))
866
867(define-public libu2f-host
868 (package
869 (name "libu2f-host")
870 (version "1.1.10")
871 (source (origin
872 (method url-fetch)
873 (uri
874 (string-append
875 "https://developers.yubico.com"
876 "/libu2f-host/Releases/libu2f-host-" version ".tar.xz"))
877 (sha256
878 (base32
879 "0vrivl1dwql6nfi48z6dy56fwy2z13d7abgahgrs2mcmqng7hra2"))))
880 (build-system gnu-build-system)
881 (arguments
882 (list #:configure-flags
883 #~(list "--enable-gtk-doc"
884 (string-append "--with-udevrulesdir=" #$output
885 "/lib/udev/rules.d"))))
886 (inputs (list json-c-0.13 hidapi))
887 (native-inputs
888 (list help2man
889 gengetopt
890 pkg-config
891 gtk-doc/stable
892 docbook-xml-4.3
893 eudev))
894 (home-page "https://developers.yubico.com/libu2f-host/")
895 ;; TRANSLATORS: The U2F protocol has a "server side" and a "host side".
896 (synopsis "U2F host-side C library and tool")
897 (description
898 "Libu2f-host provides a C library and command-line tool that implements
899the host-side of the Universal 2nd Factor (U2F) protocol. There are APIs to
900talk to a U2F device and perform the U2F Register and U2F Authenticate
901operations.")
902 ;; Most files are LGPLv2.1+, but some files are GPLv3+.
903 (license (list license:lgpl2.1+ license:gpl3+))))
904
905(define-public libu2f-server
906 (package
907 (name "libu2f-server")
908 (version "1.1.0")
909 (source (origin
910 (method git-fetch)
911 (uri
912 (git-reference
913 (url "https://github.com/Yubico/libu2f-server")
914 (commit (string-append "libu2f-server-" version))))
915 (file-name (git-file-name name version))
916 (sha256
917 (base32
918 "1nmsfq372zza5y6j13ydincjf324bwfcjg950vykh166xkp6wiic"))))
919 (build-system gnu-build-system)
920 (arguments
921 `(#:configure-flags
922 (list "--enable-gtk-doc"
923 "--enable-tests")))
924 (inputs
925 (list json-c-0.13 libressl))
926 (native-inputs
927 (list autoconf
928 automake
929 libtool
930 check
931 gengetopt
932 help2man
933 pkg-config
934 gtk-doc/stable
935 which))
936 (home-page "https://developers.yubico.com/libu2f-server/")
937 ;; TRANSLATORS: The U2F protocol has a "server side" and a "host side".
938 (synopsis "U2F server-side C library")
939 (description
940 "This is a C library that implements the server-side of the
941@dfn{Universal 2nd Factor} (U2F) protocol. More precisely, it provides an API
942for generating the JSON blobs required by U2F devices to perform the U2F
943Registration and U2F Authentication operations, and functionality for
944verifying the cryptographic operations.")
945 (license license:bsd-2)))
946
947(define-public pam-u2f
948 (package
949 (name "pam-u2f")
950 (version "1.4.0")
951 (source
952 (origin
953 (method git-fetch)
954 (uri
955 (git-reference
956 (url "https://github.com/Yubico/pam-u2f")
957 (commit (string-append "pam_u2f-" version))))
958 (file-name (git-file-name name version))
959 (sha256
960 (base32 "01y2827anh9h9rgci9g3mamn9i4nkk57nmbb2vqcirc2jzkd6iaz"))))
961 (build-system gnu-build-system)
962 (arguments
963 (list
964 #:configure-flags
965 #~(list
966 (string-append "--with-pam-dir=" #$output"/lib/security"))))
967 (inputs
968 (list libfido2 linux-pam openssl))
969 (native-inputs
970 (list asciidoc autoconf automake libtool pkg-config))
971 (home-page "https://developers.yubico.com/pam-u2f/")
972 (synopsis "PAM module for U2F authentication")
973 (description
974 "This package provides a module implementing PAM over U2F, providing an
975easy way to integrate the YubiKey (or other U2F compliant authenticators) into
976your existing infrastructure.")
977 (license license:bsd-2)))
978
979(define-public python-fido2
980 (package
981 (name "python-fido2")
982 (version "2.2.1")
983 (source
984 (origin
985 (method git-fetch)
986 (uri (git-reference
987 (url "https://github.com/Yubico/python-fido2")
988 (commit version)))
989 (file-name (git-file-name name version))
990 (sha256
991 (base32 "0q9cs8gd0f663l5wxii1494ab1sh3cj1fq5ckbhpshwzr0w5lck2"))
992 (snippet
993 ;; Remove bundled dependency.
994 '(delete-file "fido2/public_suffix_list.dat"))))
995 (build-system pyproject-build-system)
996 (arguments
997 (list
998 ;; XXX: Tests timeout without this flag.
999 #:test-flags #~(list "--no-device")
1000 #:phases
1001 #~(modify-phases %standard-phases
1002 (add-after 'unpack 'install-public-suffix-list
1003 (lambda* (#:key inputs #:allow-other-keys)
1004 (copy-file
1005 (search-input-file inputs
1006 (string-append
1007 "/share/public-suffix-list-"
1008 #$(package-version public-suffix-list)
1009 "/public_suffix_list.dat"))
1010 "fido2/public_suffix_list.dat"))))))
1011 (propagated-inputs
1012 (list python-cryptography python-pyscard))
1013 (native-inputs
1014 (list python-poetry-core
1015 python-pytest
1016 public-suffix-list))
1017 (home-page "https://github.com/Yubico/python-fido2")
1018 (synopsis "Python library for communicating with FIDO devices over USB")
1019 (description
1020 "This Python library provides functionality for communicating with a Fast
1021IDentity Online (FIDO) device over Universal Serial Bus (USB) as well as
1022verifying attestation and assertion signatures. It aims to support the FIDO
1023Universal 2nd Factor (U2F) and FIDO 2.0 protocols for communicating with a USB
1024authenticator via the Client-to-Authenticator Protocol (CTAP 1 and 2). In
1025addition to this low-level device access, classes defined in the
1026@code{fido2.client} and @code{fido2.server} modules implement higher level
1027operations which are useful when interfacing with an Authenticator, or when
1028implementing a Relying Party.")
1029 ;; python-fido2 contains some derivative files originally from pyu2f
1030 ;; (https://github.com/google/pyu2f). These files are licensed under the
1031 ;; Apache License, version 2.0. The maintainers have customized these
1032 ;; files for internal use, so they are not really a bundled dependency.
1033 (license (list license:bsd-2 license:asl2.0))))
1034
1035(define-public python-pskc
1036 (package
1037 (name "python-pskc")
1038 (version "1.4")
1039 (source
1040 (origin
1041 (method git-fetch)
1042 (uri (git-reference
1043 (url "https://github.com/arthurdejong/python-pskc")
1044 (commit version)))
1045 (file-name (git-file-name name version))
1046 (sha256
1047 (base32 "1yqyz4ay7dl850ckddpqs1vlxh6yxa8yvf5kkz0amqa08b8546jq"))))
1048 (build-system pyproject-build-system)
1049 (arguments
1050 (list
1051 #:test-flags
1052 ;; Tests depending on optional python-signxm which is not packaged yet.
1053 #~(list (string-append "--deselect=tests/"
1054 "test_draft_ietf_keyprov_pskc_02.doctest"
1055 "::test_draft_ietf_keyprov_pskc_02.doctest")
1056 (string-append "--deselect=tests/test_draft_keyprov.doctest"
1057 "::test_draft_keyprov.doctest")
1058 "--deselect=tests/test_feitian.doctest::test_feitian.doctest"
1059 "--deselect=tests/test_misc.doctest::test_misc.doctest"
1060 "--deselect=tests/test_rfc6030.doctest::test_rfc6030.doctest"
1061 "--deselect=tests/test_signature.doctest::test_signature.doctest"
1062 "--deselect=tests/test_yubico.doctest::test_yubico.doctest")))
1063 (native-inputs
1064 (list python-pytest
1065 python-setuptools))
1066 (propagated-inputs
1067 (list python-cryptography
1068 python-dateutil
1069 ;; [optional]
1070 python-defusedxml
1071 python-lxml
1072 #;python-signxml)) ;not packaged yet in Guix
1073 (home-page "https://arthurdejong.org/python-pskc/")
1074 (synopsis "Python module for handling PSKC files")
1075 (description
1076 "This package provides a Python module to handle Portable Symmetric Key
1077Container (PSKC) files as defined in @url{https://tools.ietf.org/html/rfc6030,
1078RFC 6030}. PSKC files are used to transport and provision symmetric keys and
1079key meta data (seed files) to different types of crypto modules, commonly
1080one-time password systems or other authentication devices.")
1081 (license license:lgpl2.1+)))
1082
1083(define-public python-yubikey-manager
1084 (package
1085 (name "python-yubikey-manager")
1086 (version "5.9.2")
1087 (source
1088 (origin
1089 (method git-fetch)
1090 (uri (git-reference
1091 (url "https://github.com/Yubico/yubikey-manager")
1092 (commit version)))
1093 (file-name (git-file-name name version))
1094 (sha256
1095 (base32 "1b7xiwb3h3rg59939qkb8iafhqppp5c1p83hwqf8bp8hg66jqy7n"))))
1096 (build-system pyproject-build-system)
1097 (propagated-inputs
1098 (list python-click
1099 python-cryptography
1100 python-fido2
1101 python-keyring
1102 python-pskc
1103 python-pyopenssl
1104 python-pyscard
1105 python-pyusb))
1106 (inputs
1107 (list pcsc-lite))
1108 (native-inputs
1109 (list python-makefun
1110 python-poetry-core
1111 python-pytest
1112 swig-4.4))
1113 (home-page "https://developers.yubico.com/yubikey-manager/")
1114 (synopsis "Command line tool and library for configuring a YubiKey")
1115 (description
1116 "Python library and command line tool for configuring a YubiKey. Note
1117that after installing this package, you might still need to add appropriate
1118udev rules to your system configuration to be able to configure the YubiKey as
1119an unprivileged user.")
1120 (license license:bsd-2)))
1121
1122(define-public yubikey-manager-qt
1123 ;; XXX: EOF since <2025-02-20>, see: guix/guix#8013.
1124 (package
1125 (name "yubikey-manager-qt")
1126 (version "1.2.6")
1127 (source
1128 (origin
1129 (method git-fetch)
1130 (uri (git-reference
1131 (url "https://github.com/Yubico/yubikey-manager-qt")
1132 (commit (string-append "yubikey-manager-qt-" version))))
1133 (file-name (git-file-name name version))
1134 (sha256
1135 (base32 "1dqd7xpby6m1s1c8qmr7s7x2yr7f5phjhn2xda1kycw8x3izn2vz"))))
1136 (build-system qt-build-system)
1137 (arguments
1138 (list
1139 #:tests? #f ;no test suite
1140 #:modules '((guix build qt-build-system)
1141 ((guix build gnu-build-system) #:prefix gnu:)
1142 (guix build utils))
1143 #:phases
1144 #~(modify-phases %standard-phases
1145 (add-after 'unpack 'patch-paths
1146 (lambda _
1147 (substitute* "ykman-gui/deployment.pri"
1148 (("/usr/bin")
1149 (string-append #$output "/bin")))))
1150 (replace 'configure
1151 (lambda _
1152 (invoke "qmake")))
1153 (replace 'build (assoc-ref gnu:%standard-phases 'build))
1154 (replace 'install (assoc-ref gnu:%standard-phases 'install))
1155 (add-after 'install 'install-desktop-resources
1156 (lambda _
1157 (let ((datadir (string-append #$output "/share")))
1158 (with-directory-excursion "resources"
1159 (install-file "icons/ykman.png"
1160 (string-append datadir "/pixmaps"))
1161 (install-file "com.yubico.yubikey_manager.metainfo.xml"
1162 (string-append datadir "/metainfo"))
1163 (install-file "ykman-gui.desktop"
1164 (string-append datadir "/applications"))))))
1165 (add-after 'qt-wrap 'wrap-more
1166 (lambda _
1167 (wrap-program (string-append #$output "/bin/ykman-gui")
1168 ;; Wrap PYTHONPATH so that pyotherside can find the
1169 ;; yubikey-manager library.
1170 `("GUIX_PYTHONPATH" prefix
1171 (,(getenv "GUIX_PYTHONPATH")))))))))
1172 (native-inputs (list python-wrapper))
1173 (inputs (list pyotherside-for-qt5
1174 python-yubikey-manager
1175 qtdeclarative-5
1176 qtgraphicaleffects
1177 qtquickcontrols-5
1178 qtquickcontrols2-5
1179 qtsvg-5
1180 qtwayland-5))
1181 (home-page "https://developers.yubico.com/yubikey-manager-qt/")
1182 (synopsis "GUI for configuring any YubiKey over all USB interfaces")
1183 (description "YubiKey Manager (Qt) is a graphical application for
1184configuring any YubiKey over all USB interfaces. For a CLI alternative, refer
1185to the @code{python-yubikey-manager} package.")
1186 (license license:bsd-2)))
1187
1188(define-public libnitrokey
1189 (package
1190 (name "libnitrokey")
1191 (version "3.8")
1192 (source (origin
1193 (method git-fetch)
1194 (uri (git-reference
1195 (url "https://github.com/Nitrokey/libnitrokey")
1196 (commit (string-append "v" version))))
1197 (file-name (git-file-name name version))
1198 (sha256
1199 (base32
1200 "1b95l979y353rli54a79z18iya9bza83cymcjpndr01q1pb134zm"))))
1201 (build-system cmake-build-system)
1202 (arguments
1203 ;; These tests do not require any device to be connected
1204 '(#:configure-flags (list "-DCOMPILE_OFFLINE_TESTS=ON")))
1205 (native-inputs (list catch2-2 doxygen graphviz pkg-config))
1206 (inputs (list hidapi libusb))
1207 (home-page "https://github.com/Nitrokey/libnitrokey")
1208 (synopsis "Communication library for Nitrokey")
1209 (description "This package provides a communication library for Nitrokey.")
1210 (license license:lgpl3+)))
1211
1212(define-public cppcodec
1213 (package
1214 (name "cppcodec")
1215 (version "0.2")
1216 (source (origin
1217 (method git-fetch)
1218 (uri (git-reference
1219 (url "https://github.com/tplgy/cppcodec")
1220 (commit (string-append "v" version))))
1221 (file-name (git-file-name name version))
1222 (sha256
1223 (base32
1224 "0z39f8w0zvra874az0f67ck1al9kbpaidpilggbl8jnfs05010ck"))))
1225 (build-system cmake-build-system)
1226 (native-inputs (list pkg-config qttools-5))
1227 (inputs (list catch2-2))
1228 (home-page "https://github.com/tplgy/cppcodec")
1229 (synopsis "Header library to encode/decode base64, base64url, etc.")
1230 (description "This package provides library to encode/decode base64,
1231base64url, base32, base32hex and hex.")
1232 (license license:expat)))
1233
1234(define-public nitrokey-app
1235 (package
1236 (name "nitrokey-app")
1237 (version "1.4.2")
1238 (source (origin
1239 (method git-fetch)
1240 (uri (git-reference
1241 (url "https://github.com/Nitrokey/nitrokey-app")
1242 (commit (string-append "v" version))))
1243 (file-name (git-file-name name version))
1244 (sha256
1245 (base32
1246 "1imbvaf0yncz36ckjr99x94jwg2hnid49hsiqlxsv7ccxgk058bk"))))
1247 (build-system cmake-build-system)
1248 (arguments
1249 `(#:tests? #f)) ;no test suite
1250 (native-inputs (list pkg-config qttools-5))
1251 (inputs (list cppcodec
1252 hidapi
1253 libnitrokey
1254 libusb
1255 qtbase-5
1256 qtsvg-5))
1257 (home-page "https://github.com/Nitrokey/nitrokey-app")
1258 (synopsis "GUI tool for Nitrokey devices")
1259 (description
1260 "This package provides GUI tool that interfaces with Nitrokey Pro
1261v0.7/v0.8 and Nitrokey Storage devices.")
1262 (license license:gpl3+)))
1263
1264(define-public nitrocli
1265 (package
1266 (name "nitrocli")
1267 (version "0.4.1")
1268 (source (origin
1269 (method url-fetch)
1270 (uri (crate-uri "nitrocli" version))
1271 (file-name (string-append name "-" version ".tar.gz"))
1272 (sha256
1273 (base32
1274 "1djspfvcqjipg17v8hkph8xrhkdg1xqjhq5jk1sr8vr750yavidy"))))
1275 (build-system cargo-build-system)
1276 (arguments
1277 `(#:tests? #f ;; 2/164 tests fail, nitrocli-ext tests failing
1278 #:install-source? #f
1279 #:phases
1280 (modify-phases %standard-phases
1281 (add-after 'unpack 'use-system-deps
1282 (lambda _
1283 (setenv "USE_SYSTEM_LIBNITROKEY" "1"))))))
1284 (inputs
1285 (cons* hidapi libnitrokey gnupg (cargo-inputs 'nitrocli)))
1286 (home-page "https://github.com/d-e-s-o/nitrocli")
1287 (synopsis "Command line tool for Nitrokey devices")
1288 (description
1289 "nitrocli is a program that provides a command line interface
1290for interaction with Nitrokey Pro, Nitrokey Storage, and Librem Key
1291devices.")
1292 (license license:gpl3+)))
1293
1294(define-public ausweisapp
1295 (package
1296 (name "ausweisapp")
1297 (version "2.4.0")
1298 (source
1299 (origin
1300 (method git-fetch)
1301 (uri (git-reference
1302 (url "https://github.com/Governikus/AusweisApp/")
1303 (commit version)))
1304 (file-name (git-file-name name version))
1305 (sha256
1306 (base32 "0fm98wzf3l498yjg8y6p4rp3c0i7b1fpabka9j22xvx3hjfw5jxw"))))
1307 (build-system qt-build-system)
1308 (native-inputs
1309 (list qttools pkg-config python-wrapper))
1310 (inputs
1311 (list qtbase
1312 qtsvg
1313 qtscxml
1314 qtdeclarative
1315 qtshadertools
1316 qtwayland
1317 qtwebsockets
1318 qtgraphicaleffects
1319 pcsc-lite
1320 openssl
1321 eudev))
1322 (arguments
1323 (list
1324 #:qtbase qtbase
1325 #:phases
1326 #~(modify-phases %standard-phases
1327 (replace 'check
1328 (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
1329 (when tests?
1330 (invoke "ctest" "--output-on-failure" "-j"
1331 (if parallel-tests?
1332 (number->string (parallel-job-count))
1333 "1"))))))))
1334 (home-page "https://github.com/Governikus/AusweisApp")
1335 (synopsis
1336 "Authentication program for German ID cards and residence permits")
1337 (description
1338 "This application is developed and issued by the German government to be
1339used for online authentication with electronic German ID cards and residence
1340titles. To use this app, a supported RFID card reader or NFC-enabled smart
1341phone and a running pcscd service are required.")
1342 (license license:eupl1.2)))
1343
1344(define-public libfido2
1345 (package
1346 (name "libfido2")
1347 (version "1.17.0")
1348 (source
1349 (origin
1350 (method git-fetch)
1351 (uri (git-reference
1352 (url "https://github.com/Yubico/libfido2")
1353 (commit version)))
1354 (file-name (git-file-name name version))
1355 (sha256 (base32 "0nkdigwry5bwzkxk1piww89rrb0g3zwdvn1nk5iq8hw5d47r5npm"))))
1356 (native-inputs (list pkg-config))
1357 (inputs (list eudev libcbor openssl zlib))
1358 (build-system cmake-build-system)
1359 (arguments
1360 (list
1361 #:configure-flags
1362 #~(list
1363 (string-append "-DUDEV_RULES_DIR=" #$output "/lib/udev/rules.d"))))
1364 (synopsis "Library functionality and command-line tools for FIDO devices")
1365 (description "libfido2 provides library functionality and command-line
1366tools to communicate with a FIDO device over USB, and to verify attestation
1367and assertion signatures.
1368
1369libfido2 supports the FIDO U2F (CTAP 1) and FIDO 2.0 (CTAP 2) protocols.")
1370 (license license:bsd-2)
1371 (home-page "https://github.com/Yubico/libfido2")))
1372
1373(define-public cardpeek
1374 (package
1375 (name "cardpeek")
1376 (version "0.8.4")
1377 (source (origin
1378 (method git-fetch)
1379 (uri (git-reference
1380 (url "https://github.com/L1L1/cardpeek")
1381 (commit (string-append "cardpeek-" version))))
1382 (file-name (git-file-name name version))
1383 (sha256
1384 (base32
1385 "1ighpl7nvcvwnsd6r5h5n9p95kclwrq99hq7bry7s53yr57l6588"))))
1386 (inputs (list curl
1387 gtk+
1388 lua-5.2
1389 openssl
1390 pcsc-lite
1391 readline))
1392 (native-inputs (list autoconf
1393 automake
1394 `(,glib "bin") ;for glib-compile-resources
1395 libtool
1396 pkg-config))
1397 (build-system gnu-build-system)
1398 (synopsis "Tool to read the contents of various smart cards")
1399 (description
1400 "Cardpeek is a graphical tool to read the contents of ISO7816 smart cards.
1401It is extensible with the LUA scripting language.
1402
1403It supports the following type of cards:
1404@itemize
1405@item Bank cards (VISA, MasterCard, CB and UK Post Office Account cards)
1406@item Passports and the Belgian identity card
1407@item Transport cards (Navigo, MOBIB, RavKav and VIVA cards)
1408@item Older GSM SIM cards without USIM data
1409@item Vitale 2 Health card
1410@item Moneo Electronic purse card
1411@item Driver Tachograph cards
1412@item OpenPGP Cards (beta)
1413@end itemize
1414It also has limited support for Mifare Classic compatible cards (Thalys card)")
1415 (license license:gpl3+)
1416 (home-page "http://pannetrat.com/Cardpeek")))
1417
1418(define-public pcsc-cyberjack
1419 (package
1420 (name "pcsc-cyberjack")
1421 (version "3.99.5final.sp15")
1422 (source
1423 (origin
1424 (method url-fetch)
1425 (uri "https://support.reiner-sct.de/downloads/LINUX/V3.99.5_SP15/pcsc-cyberjack_3.99.5final.SP15.tar.bz2")
1426 (sha256
1427 (base32 "0yj6plgb245r218v6lgdabb3422hxyrw8rrpf5b8fwah4j1w5dxc"))))
1428 (build-system gnu-build-system)
1429 (arguments
1430 (list
1431 #:configure-flags
1432 #~(list (string-append "--with-usbdropdir=" #$output "/pcsc/drivers")
1433 (string-append "--bindir=" #$output:tools "/bin"))
1434 #:phases
1435 #~(modify-phases %standard-phases
1436 (add-after 'install 'install-tools
1437 (lambda _ (invoke "make" "-C" "tools/cjflash" "install"))))))
1438 (native-inputs (list pkg-config))
1439 (inputs (list pcsc-lite libusb))
1440 (outputs '("out" "tools"))
1441 (synopsis "PC/SC driver for cyberJack chipcard readers")
1442 (description
1443 "This package includes the IFD driver for the cyberJack
1444contactless (RFID) and contact USB chipcard readers.")
1445 (home-page "http://www.reiner-sct.com/")
1446 (license license:lgpl2.1+)))
1447
1448(define-public qdigidoc
1449 (package
1450 (name "qdigidoc")
1451 (version "4.9.1")
1452 (source
1453 (origin
1454 (method git-fetch)
1455 (uri (git-reference
1456 (url "https://github.com/open-eid/DigiDoc4-Client")
1457 (commit (string-append "v" version))
1458 ;; The repository contains two git modules, an empty and obsolete
1459 ;; "cmake" repository and https://github.com/open-eid/qt-common,
1460 ;; which is an internal "libdigidoccommon" library with no
1461 ;; support for standalone installation.
1462 (recursive? #t)))
1463 (file-name (git-file-name name version))
1464 (sha256
1465 (base32 "1by4jnr3sx4s8sxv1iw8ja9iln3aw6k583kdl3r92cbcdfasm7xj"))
1466 (patches (search-patches "qdigidoc-bundle-config-files.patch"
1467 "qdigidoc-bundle-tsl-files.patch"
1468 "qdigidoc-fix-icon.patch"))))
1469 (build-system qt-build-system)
1470 (arguments
1471 (list
1472 #:qtbase qtbase ;qt6
1473 #:tests? #f ;no test suite
1474 #:phases
1475 #~(modify-phases %standard-phases
1476 ;; QDigiDoc4 dlopens OpenSC libraries.
1477 (add-after 'unpack 'patch-opensc-path
1478 (lambda* (#:key inputs #:allow-other-keys)
1479 (substitute* "client/QPKCS11.cpp"
1480 (("\"opensc-pkcs11.so\"")
1481 (format #f "~S"
1482 (search-input-file inputs
1483 "lib/opensc-pkcs11.so")))))))))
1484 (native-inputs
1485 (list pkg-config
1486 gettext-minimal
1487 qttools))
1488 (inputs (list flatbuffers
1489 libdigidocpp
1490 openldap
1491 opensc
1492 openssl
1493 pcsc-lite
1494 qtsvg
1495 zlib))
1496 (home-page "https://www.id.ee/en/")
1497 (synopsis "Estonian ID card application")
1498 (description
1499 "This application provides support for using private and governmental
1500e-services, signing and encrypting DigiDoc documents, and configuring Estonian
1501ID cards. It requires a running pcscd service and a compatible card reader.")
1502 (license license:lgpl2.1+)))