projects/guix·blob bootstrap-team · refs

1874 lines · 68.4 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2015 Eric Dvorsak <[email protected]>
3;;; Copyright © 2015-2021, 2023, 2024 Efraim Flashner <[email protected]>
4;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <[email protected]>
5;;; Copyright © 2016, 2017, 2020, 2022, 2023 Marius Bakke <[email protected]>
6;;; Copyright © 2017 Ben Sturmfels <[email protected]>
7;;; Copyright © 2016 Sou Bunnbu <[email protected]>
8;;; Copyright © 2015 Cyril Roelandt <[email protected]>
9;;; Copyright © 2014, 2017 Eric Bavier <[email protected]>
10;;; Copyright © 2015, 2016 David Thompson <[email protected]>
11;;; Copyright © 2016, 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <[email protected]>
12;;; Copyright © 2016, 2017 Nikita <[email protected]>
13;;; Copyright © 2014, 2015 Mark H Weaver <[email protected]>
14;;; Copyright © 2015, 2016, 2017, 2019, 2022, 2024, 2025 Ricardo Wurmus <[email protected]>
15;;; Copyright © 2016 Danny Milosavljevic <[email protected]>
16;;; Copyright © 2016, 2017, 2020 Arun Isaac <[email protected]>
17;;; Copyright © 2017 Carlo Zancanaro <[email protected]>
18;;; Copyright © 2018 Tomáš Čech <[email protected]>
19;;; Copyright © 2018, 2021 Nicolas Goaziou <[email protected]>
20;;; Copyright © 2018 Vagrant Cascadian <[email protected]>
21;;; Copyright © 2018 Nam Nguyen <[email protected]>
22;;; Copyright © 2019, 2025 Guillaume Le Vaillant <[email protected]>
23;;; Copyright © 2019 Clément Lassieur <[email protected]>
24;;; Copyright © 2020 Alexandros Theodotou <[email protected]>
25;;; Copyright © 2020 Justus Winter <[email protected]>
26;;; Copyright © 2020, 2021 Vinicius Monego <[email protected]>
27;;; Copyright © 2021, 2022, 2023 Maxim Cournoyer <[email protected]>
28;;; Copyright © 2021 Maxime Devos <[email protected]>
29;;; Copyright © 2022 Artyom V. Poptsov <[email protected]>
30;;; Copyright © 2022 Antero Mejr <[email protected]>
31;;; Copyright © 2023 Juliana Sims <[email protected]>
32;;; Copyright © 2023, 2025 Zheng Junjie <[email protected]>
33;;; Copyright © 2024 jgart <[email protected]>
34;;; Copyright © 2025 Sharlatan Hellseher <[email protected]>
35;;; Copyright © 2025 Nguyễn Gia Phong <[email protected]>
36;;;
37;;; This file is part of GNU Guix.
38;;;
39;;; GNU Guix is free software; you can redistribute it and/or modify it
40;;; under the terms of the GNU General Public License as published by
41;;; the Free Software Foundation; either version 3 of the License, or (at
42;;; your option) any later version.
43;;;
44;;; GNU Guix is distributed in the hope that it will be useful, but
45;;; WITHOUT ANY WARRANTY; without even the implied warranty of
46;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
47;;; GNU General Public License for more details.
48;;;
49;;; You should have received a copy of the GNU General Public License
50;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
51
52(define-module (gnu packages python-crypto)
53 #:use-module (guix packages)
54 #:use-module (guix download)
55 #:use-module (guix gexp)
56 #:use-module (guix git-download)
57 #:use-module (guix build-system cargo)
58 #:use-module (guix build-system pyproject)
59 #:use-module (guix build-system python)
60 #:use-module (guix utils)
61 #:use-module (gnu packages)
62 #:use-module (gnu packages nss)
63 #:use-module (gnu packages check)
64 #:use-module (gnu packages crypto)
65 #:use-module (gnu packages kerberos)
66 #:use-module (gnu packages libffi)
67 #:use-module (gnu packages lsof)
68 #:use-module (gnu packages multiprecision)
69 #:use-module (gnu packages password-utils)
70 #:use-module (gnu packages pkg-config)
71 #:use-module (gnu packages protobuf)
72 #:use-module (gnu packages python)
73 #:use-module (gnu packages python-build)
74 #:use-module (gnu packages python-check)
75 #:use-module (gnu packages python-compression)
76 #:use-module (gnu packages python-web)
77 #:use-module (gnu packages python-xyz)
78 #:use-module (gnu packages rust)
79 #:use-module (gnu packages rust-apps)
80 #:use-module (gnu packages swig)
81 #:use-module (gnu packages time)
82 #:use-module (gnu packages tls)
83 #:use-module (gnu packages xml)
84 #:use-module ((guix licenses) #:prefix license:)
85 #:use-module (srfi srfi-1))
86
87(define-public python-base58
88 (package
89 (name "python-base58")
90 (version "2.1.1")
91 (source
92 (origin
93 (method url-fetch)
94 (uri (pypi-uri "base58" version))
95 (sha256
96 (base32 "1317ly0db7nnjg5k58f6nqa0svfcvn446xd5bpiyi0bfbczwpl65"))))
97 (build-system pyproject-build-system)
98 (native-inputs
99 (list python-pyhamcrest
100 python-pytest
101 python-pytest-benchmark
102 python-setuptools
103 python-wheel))
104 (home-page "https://github.com/keis/base58")
105 (synopsis "Base58 and Base58Check implementation")
106 (description
107 "Base58 and Base58Check implementation compatible with what is used by
108the Bitcoin network.")
109 (license license:expat)))
110
111(define-public python-bcrypt
112 (package
113 (name "python-bcrypt")
114 (version "3.2.2") ;the latest not Rust version
115 (source
116 (origin
117 (method url-fetch)
118 (uri (pypi-uri "bcrypt" version))
119 (sha256
120 (base32 "1yvbdfmkssx1jf2lrhbs58xljmyi3p82r7rav82pf1bp44642g23"))))
121 (build-system pyproject-build-system)
122 (native-inputs
123 (list python-pytest
124 python-setuptools))
125 (propagated-inputs
126 (list python-cffi))
127 (home-page "https://github.com/pyca/bcrypt/")
128 (synopsis "Modern password hashing library")
129 (description
130 "Bcrypt is a Python module which provides a password hashing method based
131on the Blowfish password hashing algorithm, as described in
132@url{http://static.usenix.org/events/usenix99/provos.html,\"A Future-Adaptable
133Password Scheme\"} by Niels Provos and David Mazieres.")
134 (license license:asl2.0)))
135
136(define-public python-murmurhash
137 (package
138 (name "python-murmurhash")
139 (version "1.0.10")
140 (source
141 (origin
142 (method git-fetch)
143 (uri (git-reference
144 (url "https://github.com/explosion/murmurhash")
145 (commit (string-append "v" version))))
146 (file-name (git-file-name name version))
147 (sha256
148 (base32 "02ny4391kbrssq9bf7kq75615ragvbjhsqi9hgv7wiaiz6yai1k8"))))
149 (build-system pyproject-build-system)
150 (arguments
151 (list
152 #:phases
153 #~(modify-phases %standard-phases
154 (add-after 'install 'fix-installation
155 (lambda* (#:key inputs outputs #:allow-other-keys)
156 (with-directory-excursion
157 (string-append (site-packages inputs outputs) "/murmurhash")
158 (delete-file-recursively "tests")
159 (delete-file "mrmr.pyx")
160 (for-each
161 (lambda (file)
162 (chmod file #o555))
163 (find-files "." "\\.so$")))))
164 ;; XXX: Otherwise ModuleNotFoundError, and --pyargs doesn't seem
165 ;; to fix the issue.
166 (replace 'check
167 (lambda args
168 (copy-recursively "murmurhash/tests" "tests")
169 (delete-file-recursively "murmurhash")
170 (with-directory-excursion "tests"
171 (apply (assoc-ref %standard-phases 'check) args)))))))
172 (native-inputs
173 (list python-cython
174 python-murmurhash3
175 python-pytest
176 python-setuptools))
177 (home-page "https://github.com/explosion/murmurhash")
178 (synopsis "Cython bindings for MurmurHash2")
179 (description
180 "This package provides Cython bindings for MurmurHash2.")
181 (license license:expat)))
182
183(define-public python-passlib
184 (package
185 (name "python-passlib")
186 (version "1.7.4")
187 (source
188 (origin
189 (method url-fetch)
190 (uri (pypi-uri "passlib" version))
191 (sha256
192 (base32 "015y5qaw9qnxr29lg60dml1g5rbqd4586wy5n8m41ib55gvm1zfy"))))
193 (build-system pyproject-build-system)
194 (arguments
195 (list
196 #:phases
197 #~(modify-phases %standard-phases
198 (add-before 'check 'set-PYTHON_EGG_CACHE
199 ;; Some tests require access to "$HOME/.cython".
200 (lambda _
201 (setenv "PYTHON_EGG_CACHE" "/tmp"))))))
202 (native-inputs
203 (list python-pytest python-setuptools python-wheel))
204 (propagated-inputs
205 (list python-argon2-cffi python-bcrypt python-cryptography))
206 (home-page "https://bitbucket.org/ecollins/passlib")
207 (synopsis "Comprehensive password hashing framework")
208 (description
209 "Passlib is a password hashing library for Python 2 & 3, which provides
210cross-platform implementations of over 30 password hashing algorithms, as well
211as a framework for managing existing password hashes. It's designed to be
212useful for a wide range of tasks, from verifying a hash found in /etc/shadow,
213to providing full-strength password hashing for multi-user application.")
214 (license license:bsd-3)))
215
216(define-public python-paramiko
217 (package
218 (name "python-paramiko")
219 (version "4.0.0")
220 (source
221 (origin
222 (method url-fetch)
223 (uri (pypi-uri "paramiko" version))
224 (sha256
225 (base32 "17ynnmagd44gpp76r26rz1kldb37f79hm4ibinlckj8c71xz09ba"))))
226 (build-system pyproject-build-system)
227 (native-inputs
228 (list python-icecream
229 python-pytest
230 python-pytest-relaxed
231 python-setuptools))
232 (propagated-inputs
233 (list python-bcrypt
234 python-cryptography
235 python-invoke
236 python-pyasn1
237 python-pynacl))
238 (home-page "https://www.paramiko.org/")
239 (synopsis "SSHv2 protocol library")
240 (description "Paramiko is a python implementation of the SSHv2 protocol,
241providing both client and server functionality. While it leverages a Python C
242extension for low level cryptography (PyCrypto), Paramiko itself is a pure
243Python interface around SSH networking concepts.")
244 (license license:lgpl2.1+)))
245
246(define-public python-ecdsa
247 (package
248 (name "python-ecdsa")
249 (version "0.19.0")
250 (source
251 (origin
252 (method url-fetch)
253 (uri (pypi-uri "ecdsa" version))
254 (sha256
255 (base32 "1y3bmx6aw5klx143jas3czwbsfvr5d3fs8gm1bfh16b5k48svsk0"))))
256 (build-system pyproject-build-system)
257 (arguments
258 (list
259 ;; Test failes with error: AssertionError: KeyboardInterrupt not raised.
260 #:test-flags #~(list "-k" "not test_multithreading_with_interrupts")))
261 (native-inputs
262 (list openssl
263 python-pytest
264 python-setuptools
265 python-wheel))
266 (propagated-inputs
267 (list python-six))
268 (home-page "https://github.com/warner/python-ecdsa")
269 (synopsis "ECDSA cryptographic signature library (pure python)")
270 (description
271 "This is an easy-to-use implementation of ECDSA cryptography (Elliptic
272Curve Digital Signature Algorithm), implemented purely in Python. With this
273library, you can quickly create key pairs (signing key and verifying key), sign
274messages, and verify the signatures. The keys and signatures are very short,
275making them easy to handle and incorporate into other protocols.")
276 (license license:expat)))
277
278(define-public python-kerberos
279 (package
280 (name "python-kerberos")
281 (version "1.3.1")
282 (source
283 (origin
284 (method url-fetch)
285 (uri (pypi-uri "kerberos" version))
286 (sha256
287 (base32 "0b0a8rrwgfjrslz3jd3r5l7vr7jx5bc17sq0dbwn002f58a4dl6d"))))
288 (build-system pyproject-build-system)
289 (arguments
290 ;; No tests in PyPI, provided in Git but all of them require networking.
291 (list #:tests? #f))
292 (native-inputs
293 (list python-setuptools
294 python-wheel))
295 (inputs
296 (list mit-krb5))
297 (home-page "https://github.com/apple/ccs-pykerberos")
298 (synopsis "Python Kerberos library used by CalendarServer")
299 (description
300 "This Python package is a high-level wrapper for Kerberos (GSSAPI)
301operations. The goal is to avoid having to build a module that wraps the
302entire Kerberos.framework, and instead offer a limited set of functions that
303do what is needed for client/server Kerberos authentication based on
304<http://www.ietf.org/rfc/rfc4559.txt>.")
305 (license license:asl2.0)))
306
307(define-public python-keyring
308 (package
309 (name "python-keyring")
310 (version "23.9.3")
311 (source
312 (origin
313 (method url-fetch)
314 (uri (pypi-uri "keyring" version))
315 (sha256
316 (base32
317 "19f4jpsxng9sjfqi8ww5hgg196r2zh1zb8g71wjr1xa27kc1vc39"))))
318 (build-system pyproject-build-system)
319 (arguments
320 (list
321 #:test-flags '(list "-c" "/dev/null") ;avoid extra test dependencies
322 #:phases
323 #~(modify-phases %standard-phases
324 (add-before 'check 'workaround-test-failure
325 (lambda _
326 ;; Workaround a failure in the test_entry_point test (see:
327 ;; https://github.com/jaraco/keyring/issues/526).
328 (delete-file-recursively "keyring.egg-info"))))))
329 (native-inputs
330 (list python-toml
331 python-pytest
332 python-setuptools
333 python-setuptools-scm
334 python-wheel))
335 (propagated-inputs
336 (list python-importlib-metadata
337 python-jaraco-classes
338 python-secretstorage))
339 (home-page "https://github.com/jaraco/keyring")
340 (synopsis "Store and access your passwords safely")
341 (description
342 "The Python keyring lib provides a easy way to access the system keyring
343service from python. It can be used in any application that needs safe
344password storage.")
345 ;; "MIT" and PSF dual license
346 (license license:x11)))
347
348(define-public python-keyrings-alt
349 (package
350 (name "python-keyrings-alt")
351 (version "5.0.2")
352 (source
353 (origin
354 (method url-fetch)
355 (uri (pypi-uri "keyrings_alt" version))
356 (sha256
357 (base32 "1yv9gnmkw6kpsjgnid0k1qcd49n9csqcvf02cl88bcf8knz7w2cg"))))
358 (build-system pyproject-build-system)
359 (native-inputs
360 (list python-keyring
361 python-pytest
362 python-setuptools
363 python-setuptools-scm
364 python-wheel))
365 (propagated-inputs
366 (list python-jaraco-classes
367 python-jaraco-context))
368 (home-page "https://github.com/jaraco/keyrings.alt")
369 (synopsis "Alternate keyring implementations")
370 (description
371 "Keyrings in this package may have security risks or other implications.
372These backends were extracted from the main keyring project to make them
373available for those who wish to employ them, but are discouraged for general
374production use. Include this module and use its backends at your own risk.")
375 (license license:expat)))
376
377(define-public python-blake3
378 (package
379 (name "python-blake3")
380 (version "0.3.1")
381 (source
382 (origin
383 (method url-fetch)
384 (uri (pypi-uri "blake3" version))
385 (sha256
386 (base32 "1p6z6jfk8n1lshz4cp6dgz2i8zmqdxwr8d9m86ypp3m1kp70k5xk"))))
387 (build-system cargo-build-system)
388 (arguments
389 (list
390 #:install-source? #f
391 #:imported-modules `(,@%pyproject-build-system-modules
392 ,@%cargo-build-system-modules)
393 #:modules `((guix build cargo-build-system)
394 ((guix build pyproject-build-system) #:prefix py:)
395 (guix build utils))
396 #:phases
397 #~(modify-phases %standard-phases
398 (add-after 'build 'build-python-module
399 (assoc-ref py:%standard-phases 'build))
400 (add-after 'build-python-module 'install-python-module
401 (assoc-ref py:%standard-phases 'install)))))
402 (native-inputs
403 (list python-wrapper
404 maturin))
405 (inputs (cargo-inputs 'python-blake3))
406 (home-page "https://github.com/oconnor663/blake3-py")
407 (synopsis "Python bindings for the Rust blake3 crate")
408 (description "This package provides Python bindings for the Rust crate of
409blake3, a cryptographic hash function.")
410 ;; This work is released into the public domain with CC0
411 ;; 1.0. Alternatively, it is licensed under the Apache License 2.0.
412 (license (list license:asl2.0 license:cc0))))
413
414(define-public python-certauth
415 (package
416 (name "python-certauth")
417 (version "1.3.0")
418 (source
419 (origin
420 (method url-fetch)
421 (uri (pypi-uri "certauth" version))
422 (sha256
423 (base32
424 "1yxqfb5131wahjyw9pxz03bq476rcfx62s6k53xx4cqbzzgdaqkq"))))
425 (build-system pyproject-build-system)
426 (arguments
427 (list
428 #:test-flags
429 #~(list "-k" (string-join
430 (list
431 ;; Those tests uses PKCS12, which has been removed in
432 ;; pyopenssl 23.3.0:
433 "not test_custom_not_before_not_after"
434 "test_ca_cert_in_mem")
435 " and not "))
436 #:phases
437 #~(modify-phases %standard-phases
438 (add-after 'unpack 'adjust-test
439 (lambda _
440 ;; Newer PyOpenSSL no longer separates extensions with
441 ;; newline (this can be removed for >1.3.0).
442 (substitute* "test/test_certauth.py"
443 (("7334\\\\n, DNS") "7334, DNS")))))))
444 (propagated-inputs
445 (list python-pyopenssl python-tldextract))
446 (native-inputs
447 (list nss-certs-for-test python-pytest-cov python-setuptools python-wheel))
448 (home-page "https://github.com/ikreymer/certauth")
449 (synopsis "Certificate authority creation tool")
450 (description "This package provides a small library, built on top of
451pyOpenSSL, which allows for creating a custom certificate authority (CA)
452certificate, and generating on-demand dynamic host certs using that CA
453certificate. It is most useful for use with a man-in-the-middle HTTPS proxy,
454for example, for recording or replaying web content.")
455 (license license:expat)))
456
457(define-public python-certifi
458 (package
459 (name "python-certifi")
460 (version "2025.06.15")
461 (source
462 (origin
463 (method git-fetch) ; no tests in PyPI package
464 (uri (git-reference
465 (url "https://github.com/certifi/python-certifi")
466 (commit version)))
467 (file-name (git-file-name name version))
468 (sha256
469 (base32 "1yyy3c64xbwfg2b8hi1fd6vwh56fzc90jfy3czimv5i91gwrl7ba"))
470 (snippet #~(begin
471 (delete-file "certifi/cacert.pem")
472 (delete-file "certifi/core.py")
473 (with-output-to-file "certifi/core.py"
474 (lambda _
475 (display
476 "\"\"\"
477certifi.py
478~~~~~~~~~~
479This file is a Guix-specific version of core.py.
480
481This module returns the installation location of SSL_CERT_FILE or
482/etc/ssl/certs/ca-certificates.crt, or its contents.
483\"\"\"
484import os
485
486_CA_CERTS = None
487
488try:
489 _CA_CERTS = os.environ [\"SSL_CERT_FILE\"]
490except:
491 _CA_CERTS = os.path.join(\"/etc\", \"ssl\", \"certs\", \"ca-certificates.crt\")
492
493def where() -> str:
494 return _CA_CERTS
495
496def contents() -> str:
497 with open(where(), \"r\", encoding=\"ascii\") as data:
498 return data.read()")))))))
499 (build-system pyproject-build-system)
500 (native-inputs
501 (list nss-certs-for-test
502 python-pytest
503 python-setuptools
504 python-wheel))
505 (home-page "https://certifi.io/")
506 (synopsis "Python CA certificate bundle")
507 (description
508 "Certifi is a Python library that contains a CA certificate bundle, which
509is used by the Requests library to verify HTTPS requests.")
510 (license license:asl2.0)))
511
512(define-public python-cryptography-vectors
513 (package
514 (name "python-cryptography-vectors")
515 (version "44.0.0")
516 (source
517 (origin
518 (method url-fetch)
519 (uri (pypi-uri "cryptography_vectors" version))
520 (sha256
521 (base32
522 "1aw06msy65rs27yxfp4xlwfq432ny1af5cx8s7zsbfa5div2hqhh"))))
523 (build-system pyproject-build-system)
524 (arguments (list #:tests? #f)) ; No tests included.
525 (native-inputs
526 (list python-flit-core))
527 (home-page "https://github.com/pyca/cryptography")
528 (synopsis "Test vectors for the cryptography package")
529 (description
530 "This package contains test vectors for the cryptography package.")
531 ;; Distributed under either BSD-3 or ASL2.0
532 (license (list license:bsd-3 license:asl2.0))))
533
534(define-public python-cryptography
535 (package
536 (name "python-cryptography")
537 (version "44.0.0")
538 (source
539 (origin
540 (method url-fetch)
541 (uri (pypi-uri "cryptography" version))
542 (sha256
543 (base32
544 "00is2nzcl2pyhr90llga5mnbw3rvakn75rq10x1r6hhb6i7q6knd"))
545 (snippet
546 #~(begin (use-modules (guix build utils))
547 (for-each delete-file
548 (find-files "." "Cargo\\.lock$"))
549 (substitute* "pyproject.toml"
550 (("locked = true") "offline = true"))))))
551 (build-system pyproject-build-system)
552 (arguments
553 (list
554 #:imported-modules `(,@%cargo-build-system-modules
555 ,@%pyproject-build-system-modules)
556 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
557 (guix build pyproject-build-system)
558 (guix build utils))
559 #:phases
560 #~(modify-phases %standard-phases
561 (add-after 'unpack 'prepare-cargo-build-system
562 (lambda args
563 (for-each
564 (lambda (phase)
565 (format #t "Running cargo phase: ~a~%" phase)
566 (apply (assoc-ref cargo:%standard-phases phase)
567 #:cargo-target #$(cargo-triplet)
568 args))
569 '(unpack-rust-crates
570 configure
571 check-for-pregenerated-files
572 patch-cargo-checksums)))))))
573 (native-inputs
574 (append
575 (list python-certifi
576 python-cffi
577 python-click
578 python-cryptography-vectors
579 python-pretend
580 python-pytest
581 python-pytest-benchmark
582 python-pytest-randomly
583 python-pytest-xdist
584 python-setuptools
585 rust
586 `(,rust "cargo"))
587 (or (and=> (%current-target-system)
588 (compose list make-rust-sysroot))
589 '())))
590 (inputs
591 (cons* maturin openssl (cargo-inputs 'python-cryptography)))
592 (propagated-inputs (list python-cffi))
593 (home-page "https://github.com/pyca/cryptography")
594 (synopsis "Cryptographic recipes and primitives for Python")
595 (description
596 "@code{cryptography} is a package which provides cryptographic recipes
597and primitives to Python developers. It aims to be the “cryptographic
598standard library” for Python. The package includes both high level recipes,
599and low level interfaces to common cryptographic algorithms such as symmetric
600ciphers, message digests and key derivation functions.")
601 ;; Distributed under either BSD-3 or ASL2.0
602 (license (list license:bsd-3 license:asl2.0))))
603
604(define-public python-pyopenssl
605 (package
606 (name "python-pyopenssl")
607 (version "24.3.0")
608 (source
609 (origin
610 (method url-fetch)
611 (uri (pypi-uri "pyopenssl" version))
612 (sha256
613 (base32
614 "0dmv720kn5ws7bs1rkn59qmhzv5wxkkgriampi34g0vxawcs1xs9"))))
615 (build-system pyproject-build-system)
616 (arguments
617 (list
618 #:phases
619 #~(modify-phases %standard-phases
620 (replace 'check
621 (lambda* (#:key tests? #:allow-other-keys)
622 (when tests?
623 ;; PyOpenSSL runs tests against a certificate with a fixed
624 ;; expiry time. To ensure successful builds in the future,
625 ;; set the time to roughly the release date.
626 (invoke "faketime" "2024-07-20" "pytest" "-vv"
627 "--deselect"
628 ;; This test seems to fail when using faketime, at
629 ;; least on aarch64-linux with OSError: [Errno 22]
630 ;; Invalid argument
631 "tests/test_ssl.py::TestDTLS::test_timeout"
632 "-k"
633 ;; This test tries to look up certificates from
634 ;; the compiled-in default path in OpenSSL, which
635 ;; does not exist in the build environment.
636 "not test_fallback_default_verify_paths ")))))))
637 (propagated-inputs (list python-cryptography))
638 (inputs (list openssl))
639 (native-inputs
640 (list libfaketime
641 python-pretend
642 python-pytest
643 python-pytest-rerunfailures
644 python-setuptools))
645 (home-page "https://github.com/pyca/pyopenssl")
646 (synopsis "Python wrapper module around the OpenSSL library")
647 (description "PyOpenSSL is a high-level wrapper around a subset of the
648OpenSSL library.")
649 (properties `((updater-extra-inputs . ("openssl"))
650 (updater-extra-native-inputs . ("libfaketime"))))
651 (license license:asl2.0)))
652
653(define-public python-ed25519
654 (package
655 (name "python-ed25519")
656 (version "1.5")
657 (source
658 (origin
659 (method git-fetch)
660 (uri (git-reference
661 (url "https://github.com/warner/python-ed25519")
662 (commit version)))
663 (file-name (git-file-name name version))
664 (sha256
665 (base32 "0adxfm12wygh2gdsn83xmp1sw7w96ni7mr7v3z3y6q0mvh9n5x0p"))))
666 (build-system pyproject-build-system)
667 (arguments
668 (list
669 #:phases
670 #~(modify-phases %standard-phases
671 ;; XXX: Use custom test back-end on python-team branch.
672 (replace 'check
673 (lambda* (#:key tests? #:allow-other-keys)
674 (when tests? (invoke "python" "test_ed25519_kat.py")))))))
675 (native-inputs (list python-setuptools))
676 (home-page "https://github.com/warner/python-ed25519")
677 (synopsis "Ed25519 public-key signatures")
678 (description
679 "This package provides Ed25519 public-key signatures in Python.")
680 (license license:expat)))
681
682(define-public python-axolotl-curve25519
683 (package
684 (name "python-axolotl-curve25519")
685 (version "0.4.1.post2")
686 (source
687 (origin
688 (method url-fetch)
689 (uri (pypi-uri "python-axolotl-curve25519" version))
690 (sha256
691 (base32
692 "18v3rfyv7xi26fb97nw1xc0l6x8wi0i4xj8dlq4gblpbjxiac187"))))
693 (build-system pyproject-build-system)
694 (arguments
695 (list
696 #:test-backend #~'unittest
697 #:phases
698 #~(modify-phases %standard-phases
699 (add-after 'unpack 'relax-gcc-14-strictness
700 (lambda _
701 (setenv "CFLAGS"
702 (string-append "-g -O2 -Wno-error=int-conversion")))))))
703 (native-inputs (list python-setuptools))
704 (home-page "https://github.com/tgalal/python-axolotl-curve25519")
705 (synopsis "Python wrapper for curve25519 library")
706 (description "This is a python wrapper for the curve25519 library
707with ed25519 signatures. The C code was pulled from
708libaxolotl-android. At the moment this wrapper is meant for use by
709python-axolotl.")
710 (license (list license:gpl3 ; Most files
711 license:bsd-3)))) ; curve/curve25519-donna.c
712
713(define-public python-omemo-dr
714 (package
715 (name "python-omemo-dr")
716 (version "1.0.1")
717 (source
718 (origin
719 (method git-fetch)
720 (uri (git-reference
721 (url "https://dev.gajim.org/gajim/omemo-dr")
722 (commit (string-append "v" version))))
723 (file-name (git-file-name name version))
724 (sha256
725 (base32 "1gx0znbfvs8jg9s754hha81l8wpghswkfsqx2jzpgv6gigf3sm8z"))))
726 (build-system pyproject-build-system)
727 (arguments (list #:test-backend #~'unittest))
728 (propagated-inputs
729 (list python-cryptography python-protobuf-5 python-setuptools))
730 (home-page "https://dev.gajim.org/gajim/omemo-dr")
731 (synopsis "OMEMO cryptography library")
732 (description "OMEMO cryptography library that was forked from python-axolotl.")
733 (license license:gpl3)))
734
735(define-public python-oscrypto
736 (package
737 (name "python-oscrypto")
738 (version "1.3.0")
739 (source
740 (origin
741 (method git-fetch)
742 (uri (git-reference
743 (url "https://github.com/wbond/oscrypto/")
744 (commit version)))
745 (file-name (git-file-name name version))
746 (sha256
747 (base32
748 "1v5wkmzcyiqy39db8j2dvkdrv2nlsc48556h73x4dzjwd6kg4q0a"))))
749 (build-system pyproject-build-system)
750 (arguments
751 (list
752 #:test-backend #~'custom
753 #:test-flags
754 #~(list "run.py"
755 (format #f "use_openssl=~a,~a"
756 (search-input-file %build-inputs "/lib/libcrypto.so")
757 (search-input-file %build-inputs "/lib/libssl.so"))
758 "skip_internet=true"
759 "tests")
760 #:phases
761 #~(modify-phases %standard-phases
762 (add-before 'check 'set-envs
763 (lambda* (#:key inputs #:allow-other-keys)
764 (setenv
765 "SSL_CERT_FILE"
766 (search-input-file
767 inputs "/etc/ssl/certs/ca-certificates.crt")))))))
768 (propagated-inputs (list python-asn1crypto))
769 (native-inputs (list nss-certs-for-test openssl python-setuptools))
770 (home-page "https://github.com/wbond/oscrypto/")
771 (synopsis "Compiler-free Python encryption library")
772 (description
773 "@code{Python-oscrypto} is a compilation-free encryption library which
774integrates with the encryption library that is part of the operating system.
775It supports TLS (SSL) sockets, key generation, encryption, decryption,
776signing, verification and KDFs using the OS crypto libraries.")
777 (license license:expat)))
778
779(define-public python-pyaes
780 ;; XXX: Last updated in 2017.
781 (package
782 (name "python-pyaes")
783 (version "1.6.1")
784 (source
785 (origin
786 (method url-fetch)
787 (uri (pypi-uri "pyaes" version))
788 (sha256
789 (base32 "13vdaff15k0jyfcss4b4xvfgm8xyv0nrbyw5n1qc7lrqbi0b3h82"))))
790 (build-system pyproject-build-system)
791 (arguments
792 (list #:tests? #f)) ;no tests in PyPI
793 (native-inputs (list python-setuptools))
794 (home-page "https://github.com/ricmoo/pyaes")
795 (synopsis "Implementation of AES in Python")
796 (description "This package contains a pure-Python implementation of the
797AES block cipher algorithm and the common modes of operation (CBC, CFB, CTR,
798ECB and OFB).")
799 (license license:expat)))
800
801(define-public python-asn1crypto
802 (package
803 (name "python-asn1crypto")
804 (version "1.5.1")
805 (source
806 (origin
807 (method git-fetch)
808 (uri (git-reference
809 (url "https://github.com/wbond/asn1crypto")
810 (commit version)))
811 (file-name (git-file-name name version))
812 (sha256
813 (base32 "1qsg06qrqnzixmrm65ibg503y2gffd675h1si4jgh92s315w1jrk"))))
814 (build-system pyproject-build-system)
815 (arguments (list #:test-backend #~'unittest))
816 (native-inputs (list python-setuptools))
817 (home-page "https://github.com/wbond/asn1crypto")
818 (synopsis "ASN.1 parser and serializer in Python")
819 (description
820 "@code{asn1crypto} is an ASN.1 parser and serializer with definitions for
821private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8,
822PKCS#12, PKCS#5, X.509 and TSP.")
823 (license license:expat)))
824
825(define-public python-pynacl
826 (package
827 (name "python-pynacl")
828 (version "1.5.0")
829 (source
830 (origin
831 (method url-fetch)
832 (uri (pypi-uri "PyNaCl" version))
833 (modules '((guix build utils)))
834 (snippet
835 '(begin
836 ;; Remove bundled libsodium.
837 (delete-file-recursively "src/libsodium")))
838 (sha256
839 (base32
840 "1fi0jbxhh3svajzldlb6gj5sr5a48v11xlmx0wb831db167l9iwa"))))
841 (build-system pyproject-build-system)
842 (arguments
843 (list
844 #:phases
845 '(modify-phases %standard-phases
846 (add-before 'build 'use-system-sodium
847 (lambda _
848 (setenv "SODIUM_INSTALL" "system"))))))
849 (native-inputs
850 (list python-hypothesis python-pytest python-setuptools python-wheel))
851 (propagated-inputs
852 (list python-cffi python-six libsodium))
853 (home-page "https://github.com/pyca/pynacl/")
854 (synopsis "Python bindings to libsodium")
855 (description
856 "PyNaCl is a Python binding to libsodium, which is a fork of the
857Networking and Cryptography library. These libraries have a stated goal
858of improving usability, security and speed.")
859 (license license:asl2.0)))
860
861(define-public python-crcmod
862 (package
863 (name "python-crcmod")
864 (version "1.7")
865 (source (origin
866 (method url-fetch)
867 (uri (pypi-uri "crcmod" version))
868 (sha256
869 (base32
870 "07k0hgr42vw2j92cln3klxka81f33knd7459cn3d8aszvfh52w6w"))))
871 (build-system pyproject-build-system)
872 (arguments
873 (list
874 #:test-backend #~'custom
875 #:test-flags #~(list "-m" "crcmod.test")))
876 (native-inputs (list python-setuptools))
877 (synopsis "CRC generator for Python")
878 (description "Python module for generating objects that compute the
879Cyclic Redundancy Check.")
880 (home-page "https://crcmod.sourceforge.net/")
881 (license license:expat)))
882
883(define-public python-blurhash
884 (package
885 (name "python-blurhash")
886 (version "1.1.5")
887 (source
888 (origin
889 (method git-fetch)
890 (uri (git-reference
891 (url "https://github.com/halcy/blurhash-python")
892 (commit (string-append "v" version))))
893 (file-name (git-file-name name version))
894 (sha256
895 (base32 "16xcjxiya773fp7bxs9i6y1wsjx88pdvlwj6bqyy9vf3ckcffcwm"))))
896 (build-system pyproject-build-system)
897 (arguments
898 (list #:test-flags #~(list "-c" "/dev/null")))
899 (native-inputs
900 (list python-numpy python-pillow python-pytest python-setuptools))
901 (home-page "https://github.com/halcy/blurhash-python")
902 (synopsis "Pure-Python implementation of the blurhash algorithm")
903 (description
904 "This package provides a pure Python implementation of the blurhash
905algorithm.")
906 (license license:expat)))
907
908(define-public python-ecpy
909 (package
910 (name "python-ecpy")
911 (version "1.2.5")
912 (source
913 (origin
914 (method git-fetch)
915 (uri (git-reference
916 (url "https://github.com/cslashm/ECPy")
917 (commit version)))
918 (file-name (git-file-name name version))
919 (sha256
920 (base32
921 "0p642bpqicxjkwqk4q46wqkbxhad1qiir6xz4w7xx0d4cdq7yps8"))))
922 (build-system pyproject-build-system)
923 (arguments (list #:tests? #f)) ;no tests
924 (native-inputs
925 (list python-setuptools))
926 (home-page "https://github.com/cslashm/ECPy")
927 (synopsis "Pure Python Elliptic Curve Library")
928 (description "This package provides a Elliptic Curve Library in pure
929Python.")
930 (license license:asl2.0)))
931
932(define-public python-josepy
933 (package
934 (name "python-josepy")
935 (version "2.1.0")
936 (source
937 (origin
938 (method git-fetch)
939 (uri (git-reference
940 (url "https://github.com/certbot/josepy")
941 (commit (string-append "v" version))))
942 (file-name (git-file-name name version))
943 (sha256
944 (base32 "1zplnfrmc4nps9lgl3fz434ja7lmi9v8waydflzvpi75kf5fqxc1"))))
945 (build-system pyproject-build-system)
946 (native-inputs (list python-poetry-core python-pytest))
947 (propagated-inputs (list python-cryptography))
948 (home-page "https://github.com/certbot/josepy")
949 (synopsis "JOSE protocol implementation in Python")
950 (description
951 "This package provides a Python implementation of the JOSE protocol
952(Javascript Object Signing and Encryption).")
953 (license license:asl2.0)))
954
955(define pycryptodome-unbundle-tomcrypt-snippet
956 #~(begin
957 ;; Unbundle libtomcrypt.
958 (delete-file-recursively "src/libtom")
959 (substitute* "src/DES.c"
960 (("#include \"libtom/tomcrypt_des.c\"")
961 "#include <tomcrypt.h>"))
962 (substitute* "setup.py"
963 (("include_dirs=\\['src/', 'src/libtom/'\\]")
964 ;; FIXME: why does '-ltomcrypt' need to be added
965 ;; manually, even when 'tomcrypt' is added to 'libraries'?
966 ;; This behaviour is not documented at
967 ;; <https://docs.python.org/3/extending/building.html>.
968 "include_dirs=['src/'], libraries=['tomcrypt', 'tommath'],
969 extra_link_args=['-ltomcrypt', '-ltommath']"))))
970
971(define-public python-pycryptodome
972 (package
973 (name "python-pycryptodome")
974 (version "3.23.0")
975 (source
976 (origin
977 (method git-fetch)
978 (uri (git-reference
979 (url "https://github.com/Legrandin/pycryptodome")
980 (commit (string-append "v" version))))
981 (file-name (git-file-name name version))
982 (sha256
983 (base32 "0j1dk55y0q7gqmig1l5b8774w63w2i7qrii1xzkpzz0c3i229i67"))
984 (modules '((guix build utils)))
985 (snippet pycryptodome-unbundle-tomcrypt-snippet)))
986 (build-system pyproject-build-system)
987 (arguments
988 (list
989 ;; tests: 42912 passed
990 #:test-backend #~'custom
991 ;; As seen in
992 ;; <https://github.com/Legrandin/pycryptodome/blob/v3.23.0/INSTALL.rst>.
993 #:test-flags
994 #~(list "-m" "Crypto.SelfTest")
995 #:phases
996 #~(modify-phases %standard-phases
997 (add-after 'unpack 'patch-gmp-path
998 (lambda* (#:key inputs #:allow-other-keys)
999 (substitute* "lib/Crypto/Math/_IntegerGMP.py"
1000 (("load_lib\\(\"gmp\"")
1001 (format #f "load_lib(~s"
1002 (search-input-file inputs "/lib/libgmp.so.10")))))))))
1003 (native-inputs
1004 (list python-pycryptodome-test-vectors
1005 python-setuptools))
1006 (inputs
1007 (list gmp
1008 libtomcrypt
1009 libtommath))
1010 (home-page "https://www.pycryptodome.org")
1011 (synopsis "Low-level cryptographic Python library")
1012 (description
1013 "PyCryptodome is a self-contained Python package of low-level
1014cryptographic primitives. It's not a wrapper to a separate C library like
1015OpenSSL. To the largest possible extent, algorithms are implemented in pure
1016Python. Only the pieces that are extremely critical to performance (e.g.,
1017block ciphers) are implemented as C extensions.
1018
1019You are expected to have a solid understanding of cryptography and security
1020engineering to successfully use these primitives. You must also be able to
1021recognize that some are obsolete (e.g., TDES) or even insecure (RC4).
1022
1023It provides many enhancements over the last release of PyCrypto (2.6.1):
1024
1025@itemize
1026@item Authenticated encryption modes (GCM, CCM, EAX, SIV, OCB)
1027@item Accelerated AES on Intel platforms via AES-NI
1028@item First-class support for PyPy
1029@item Elliptic curves cryptography (NIST P-256 curve only)
1030@item Better and more compact API (nonce and iv attributes for ciphers,
1031automatic generation of random nonces and IVs, simplified CTR cipher mode, and
1032more)
1033@item SHA-3 (including SHAKE XOFs) and BLAKE2 hash algorithms
1034@item Salsa20 and ChaCha20 stream ciphers
1035@item scrypt and HKDF
1036@item Deterministic (EC)DSA
1037@item Password-protected PKCS#8 key containers
1038@item Shamir’s Secret Sharing scheme
1039@item Random numbers get sourced directly from the OS (and not from a CSPRNG
1040in userspace)
1041@item Cleaner RSA and DSA key generation (largely based on FIPS 186-4)
1042@item Major clean-ups and simplification of the code base
1043@end itemize
1044
1045This package provides drop-in compatibility with PyCrypto. It is one of two
1046PyCryptodome variants, the other being python-pycryptodomex.")
1047 (license (list license:bsd-2
1048 license:public-domain)))) ; code inherited from PyCrypto
1049
1050(define-public python-pycryptodome-test-vectors
1051 (package
1052 (name "python-pycryptodome-test-vectors")
1053 (version "1.0.22")
1054 (source
1055 (origin
1056 (method url-fetch)
1057 (uri (pypi-uri "pycryptodome_test_vectors" version))
1058 (sha256
1059 (base32 "19bn19fpnkj39nki2dp8k26is5fpqa3q7agkhk9rvfqfvzvgx3nn"))))
1060 (build-system pyproject-build-system)
1061 (arguments
1062 (list #:tests? #f)) ;no tests
1063 (native-inputs
1064 (list python-setuptools))
1065 (home-page "https://www.pycryptodome.org")
1066 (synopsis "Test vectors for PyCryptodome")
1067 (description
1068 "This package provides test vectors for @code{PyCryptodome}.")
1069 (license (list license:bsd-2
1070 license:asl2.0))))
1071
1072(define-public python-pycryptodomex
1073 (package/inherit python-pycryptodome
1074 (name "python-pycryptodomex")
1075 (arguments
1076 (substitute-keyword-arguments (package-arguments python-pycryptodome)
1077 ((#:test-flags _)
1078 #~(list "-m" "Cryptodome.SelfTest"))
1079 ((#:phases phases #~%standard-phases)
1080 #~(modify-phases #$phases
1081 (add-before 'build 'set-separate-namespace
1082 (lambda _
1083 ;; This changes the build logic, see setup.py.
1084 (with-output-to-file ".separate_namespace"
1085 (lambda _ (display "")))))))))
1086 (synopsis
1087 "Low-level cryptographic Python library independent of the old PyCrypto")
1088 (description
1089 "PyCryptodome is a self-contained Python package of low-level
1090cryptographic primitives. It's not a wrapper to a separate C library like
1091OpenSSL. To the largest possible extent, algorithms are implemented in pure
1092Python. Only the pieces that are extremely critical to performance (e.g.,
1093block ciphers) are implemented as C extensions.
1094
1095You are expected to have a solid understanding of cryptography and security
1096engineering to successfully use these primitives. You must also be able to
1097recognize that some are obsolete (e.g., TDES) or even insecure (RC4).
1098
1099It provides many enhancements over the last release of PyCrypto (2.6.1):
1100
1101@itemize
1102@item Authenticated encryption modes (GCM, CCM, EAX, SIV, OCB)
1103@item Accelerated AES on Intel platforms via AES-NI
1104@item First-class support for PyPy
1105@item Elliptic curves cryptography (NIST P-256 curve only)
1106@item Better and more compact API (nonce and iv attributes for ciphers,
1107automatic generation of random nonces and IVs, simplified CTR cipher mode, and
1108more)
1109@item SHA-3 (including SHAKE XOFs) and BLAKE2 hash algorithms
1110@item Salsa20 and ChaCha20 stream ciphers
1111@item scrypt and HKDF
1112@item Deterministic (EC)DSA
1113@item Password-protected PKCS#8 key containers
1114@item Shamir’s Secret Sharing scheme
1115@item Random numbers get sourced directly from the OS (and not from a CSPRNG
1116in userspace)
1117@item Cleaner RSA and DSA key generation (largely based on FIPS 186-4)
1118@item Major clean-ups and simplification of the code base
1119@end itemize
1120
1121PyCryptodomex is the stand-alone version of PyCryptodome that no longer
1122provides drop-in compatibility with PyCrypto.")))
1123
1124(define-public python-m2crypto
1125 (package
1126 (name "python-m2crypto")
1127 (version "0.38.0")
1128 (source
1129 (origin
1130 (method url-fetch)
1131 (uri (pypi-uri "M2Crypto" version))
1132 (sha256
1133 (base32 "1jyynaybncgjp8rndrwjpj5gnbrislngimf6ind9874h6052dwlr"))))
1134 (build-system pyproject-build-system)
1135 (arguments
1136 `(;; FIXME: Tests start failing with time due to date checks in TLS
1137 ;; certificates.
1138 #:tests? #f))
1139 (inputs (list openssl))
1140 (native-inputs (list swig python-setuptools python-wheel))
1141 (home-page "https://gitlab.com/m2crypto/m2crypto")
1142 (synopsis "Python crypto and TLS toolkit")
1143 (description "@code{M2Crypto} is a complete Python wrapper for OpenSSL
1144featuring RSA, DSA, DH, EC, HMACs, message digests, symmetric ciphers
1145(including AES); TLS functionality to implement clients and servers; HTTPS
1146extensions to Python's httplib, urllib, and xmlrpclib; unforgeable HMAC'ing
1147AuthCookies for web session management; FTP/TLS client and server; S/MIME;
1148M2Crypto can also be used to provide TLS for Twisted. Smartcards supported
1149through the Engine interface.")
1150 (license license:expat)))
1151
1152(define-public python-pykeepass
1153 (package
1154 (name "python-pykeepass")
1155 (version "4.1.1.post1")
1156 (source
1157 (origin
1158 (method git-fetch)
1159 (uri (git-reference
1160 (url "https://github.com/libkeepass/pykeepass")
1161 (commit (string-append "v" version))))
1162 (file-name (git-file-name name version))
1163 (sha256
1164 (base32 "1ayvgklq3naydx01m7hyvf44ywczk5yzy2pk48bpfayl7bgk7q8d"))))
1165 (build-system pyproject-build-system)
1166 (arguments
1167 ;; tests: 115 passed
1168 (list #:test-backend #~'unittest))
1169 (native-inputs
1170 (list python-setuptools))
1171 (propagated-inputs
1172 (list python-argon2-cffi
1173 python-construct
1174 python-lxml
1175 python-pycryptodomex
1176 python-pyotp))
1177 (home-page "https://github.com/libkeepass/pykeepass")
1178 (synopsis "Python library to interact with keepass databases")
1179 (description
1180 "This library allows you to write entries to a KeePass database. It
1181supports KDBX3 and KDBX4.")
1182 ;; There are no copyright headers in the source code. The LICENSE file
1183 ;; indicates GPL3.
1184 (license license:gpl3+)))
1185
1186(define-public python-pylibscrypt
1187 (package
1188 (name "python-pylibscrypt")
1189 (version "2.0.0")
1190 (source
1191 (origin
1192 (method git-fetch)
1193 (uri (git-reference
1194 (url "https://github.com/jvarho/pylibscrypt")
1195 (commit (string-append "v" version))))
1196 (file-name (git-file-name name version))
1197 (sha256
1198 (base32 "0hshivwl3xznlqhrvwbylp40k1bfx4gnyzmxwldkwjhf1260zan1"))))
1199 (build-system pyproject-build-system)
1200 (native-inputs (list python-pytest python-setuptools python-wheel))
1201 (home-page "https://github.com/jvarho/pylibscrypt")
1202 (synopsis "Scrypt for Python")
1203 (description
1204 "This package provides another Scrypt module for Python.")
1205 (license license:isc)))
1206
1207(define-public python-libnacl
1208 (package
1209 (name "python-libnacl")
1210 (version "2.1.0")
1211 (source
1212 (origin
1213 (method url-fetch)
1214 (uri (pypi-uri "libnacl" version))
1215 (sha256
1216 (base32
1217 "0q18j8kfibhi5qckakhf0b0psf8nkll91nfp3yqxkri9vykqshgk"))))
1218 (build-system pyproject-build-system)
1219 (arguments
1220 `(#:phases
1221 (modify-phases %standard-phases
1222 (add-after 'unpack 'locate-libsodium
1223 (lambda* (#:key inputs #:allow-other-keys)
1224 (substitute* "libnacl/__init__.py"
1225 (("ctypes\\.util\\.find_library\\('sodium'\\)")
1226 (string-append "'"
1227 (search-input-file inputs "/lib/libsodium.so")
1228 "'")))))
1229 (replace 'check
1230 (lambda* (#:key tests? #:allow-other-keys)
1231 (when tests?
1232 (invoke "python" "-m" "unittest" "discover"
1233 "--start-directory" "tests" "-v")))))))
1234 (native-inputs
1235 (list python-poetry-core))
1236 (inputs
1237 (list libsodium))
1238 (home-page "https://libnacl.readthedocs.org/")
1239 (synopsis "Python bindings for libsodium based on ctypes")
1240 (description "@code{libnacl} is used to gain direct access to the
1241functions exposed by @code{NaCl} library via @code{libsodium}. It has
1242been constructed to maintain extensive documentation on how to use
1243@code{NaCl} as well as being completely portable.")
1244 (license license:asl2.0)))
1245
1246(define-public python-pyotp
1247 (package
1248 (name "python-pyotp")
1249 (version "2.9.0")
1250 (source
1251 (origin
1252 (method git-fetch)
1253 (uri (git-reference
1254 (url "https://github.com/pyauth/pyotp")
1255 (commit (string-append "v" version))))
1256 (file-name (git-file-name name version))
1257 (sha256
1258 (base32 "0fx253649bvs2w31jdwnr51dm0b6v1zhp7mprnis37c57vj4qczz"))))
1259 (build-system pyproject-build-system)
1260 (arguments
1261 (list
1262 #:test-flags
1263 #~(list "test.py")))
1264 (native-inputs
1265 (list python-setuptools
1266 python-pytest))
1267 (home-page "https://github.com/pyauth/pyotp")
1268 (synopsis "Python One Time Password Library")
1269 (description
1270 "PyOTP is a Python library for generating and verifying one-time
1271passwords. It can be used to implement two-factor (2FA) or multi-factor
1272(MFA) authentication methods in web applications and in other systems that
1273require users to log in.")
1274 (license license:expat)))
1275
1276;; XXX: This project was archived by the owner on Apr 20, 2025. It is now
1277;; read-only. Consider to remove when starts failing to build and nothing
1278;; depends on it.
1279(define-public python-rsa
1280 (package
1281 (name "python-rsa")
1282 (version "4.9.1")
1283 (source
1284 (origin
1285 (method url-fetch)
1286 (uri (pypi-uri "rsa" version))
1287 (sha256
1288 (base32 "0xdfs3mhdb9wjpckj7i4zyv9sr82m7hk0mfkvw3lrnlpakdvzgg7"))))
1289 (build-system pyproject-build-system)
1290 (arguments
1291 (list #:tests? #f)) ;tests are not included in PyPI archive
1292 (native-inputs
1293 (list python-poetry-core))
1294 (propagated-inputs
1295 (list python-pyasn1))
1296 (home-page "https://stuvel.eu/rsa")
1297 (synopsis "Pure-Python RSA implementation")
1298 (description "Python-RSA is a pure-Python RSA implementation. It supports
1299encryption and decryption, signing and verifying signatures, and key
1300generation according to PKCS#1 version 1.5. It can be used as a Python
1301library as well as on the command line.")
1302 (license license:asl2.0)))
1303
1304(define-public python-rsa-for-awscli-1
1305 (hidden-package
1306 (package
1307 (inherit python-rsa)
1308 (version "3.4.2")
1309 (source
1310 (origin
1311 (method url-fetch)
1312 (uri (pypi-uri "rsa" version))
1313 (sha256
1314 (base32 "1dcxvszbikgzh99ybdc7jq0zb9wspy2ds8z9mjsqiyv3q884xpr5"))))
1315 (native-inputs
1316 (list python-setuptools)))))
1317
1318(define-public python-scrypt
1319 (package
1320 (name "python-scrypt")
1321 (version "0.9.4")
1322 (source
1323 (origin
1324 (method git-fetch)
1325 (uri (git-reference
1326 (url "https://github.com/holgern/py-scrypt")
1327 (commit (string-append "v" version))))
1328 (file-name (git-file-name name version))
1329 (sha256
1330 (base32 "07mr8slhplk0pfji3pfb86281wf035c3vxg7w4g17vgry1l5fdg2"))))
1331 (build-system pyproject-build-system)
1332 (native-inputs (list python-pytest python-setuptools python-wheel))
1333 (inputs (list openssl))
1334 (home-page "https://github.com/holgern/py-scrypt")
1335 (synopsis "Bindings for the scrypt key derivation function library")
1336 (description
1337 "This package is a set of Python bindings for the scrypt key derivation
1338function.")
1339 (license license:bsd-2)))
1340
1341(define-public python-service-identity
1342 (package
1343 (name "python-service-identity")
1344 (version "24.2.0")
1345 (source
1346 (origin
1347 (method url-fetch)
1348 (uri (pypi-uri "service_identity" version))
1349 (sha256
1350 (base32 "02cfpry5alap6mf3ffq1gdq6s7a2cmgjqpb2bp6wcf8d7yhkns5q"))))
1351 (build-system pyproject-build-system)
1352 (native-inputs
1353 (list python-hatch-fancy-pypi-readme
1354 python-hatch-vcs
1355 python-hatchling
1356 python-idna
1357 python-pytest))
1358 (propagated-inputs
1359 (list python-attrs
1360 python-cryptography
1361 python-pyasn1
1362 python-pyasn1-modules
1363 python-six))
1364 (home-page "https://service-identity.readthedocs.io/")
1365 (synopsis "Service identity verification for PyOpenSSL")
1366 (description
1367 "@code{service_identity} aspires to give you all the tools you need for
1368verifying whether a certificate is valid for the intended purposes. In the
1369simplest case, this means host name verification. However, service_identity
1370implements RFC 6125 fully and plans to add other relevant RFCs too.")
1371 (license license:expat)))
1372
1373(define-public python-google-crc32c
1374 (package
1375 (name "python-google-crc32c")
1376 (version "1.3.0")
1377 (source
1378 (origin
1379 (method git-fetch)
1380 (uri (git-reference
1381 (url "https://github.com/googleapis/python-crc32c")
1382 (commit (string-append "v" version))))
1383 (file-name (git-file-name name version))
1384 (sha256
1385 (base32 "005ra4pfv71rq53198k7q6k63f529q3g6hkbxbwfcf82jr77hxga"))))
1386 (build-system pyproject-build-system)
1387 (inputs (list crc32c))
1388 (native-inputs (list python-pytest python-setuptools python-wheel))
1389 (home-page "https://github.com/googleapis/python-crc32c")
1390 (synopsis "Python wrapper of Google CRC32C")
1391 (description
1392 "This package provides a Python wrapper of the C library implementation
1393of the CRC32C hashing algorithm.")
1394 (license license:asl2.0)))
1395
1396(define-public python-spake2
1397 (package
1398 (name "python-spake2")
1399 (version "0.9")
1400 (source
1401 (origin
1402 (method url-fetch)
1403 (uri (pypi-uri "spake2" version))
1404 (sha256
1405 (base32 "0d4kbaxi4cv8klyqh6yb0p0qiwfdwvczy1h2mzvmlfdcsnlc87s2"))))
1406 (build-system pyproject-build-system)
1407 (native-inputs (list python-pytest python-setuptools))
1408 (propagated-inputs (list python-cryptography))
1409 (home-page "https://github.com/warner/python-spake2")
1410 (synopsis "SPAKE2 password-authenticated key exchange in Python")
1411 (description "This package provides a Python implementation of the SPAKE2
1412Password-Authenticated Key Exchange algorithm.")
1413 (license license:expat)))
1414
1415(define-public python-keyutils
1416 (package
1417 (name "python-keyutils")
1418 (version "0.6")
1419 (source
1420 (origin
1421 (method url-fetch)
1422 (uri (pypi-uri "keyutils" version))
1423 (sha256
1424 (base32 "0lipygpzhwzzsq2k5imb1jgkmj8y4khxdwhzadjs3bd56g6bmkx9"))))
1425 (build-system pyproject-build-system)
1426 (arguments
1427 (list
1428 #:tests? #f
1429 #:phases
1430 #~(modify-phases %standard-phases
1431 (add-before 'build 'regenerate-c-file
1432 (lambda _
1433 (invoke "cython" "keyutils/_keyutils.pyx"))))))
1434 (native-inputs
1435 (list python-cython python-pytest python-setuptools))
1436 (inputs
1437 (list keyutils))
1438 (home-page "https://github.com/sassoftware/python-keyutils")
1439 (synopsis "Python bindings for keyutils")
1440 (description
1441 "This is a set of python bindings for keyutils, a key management suite
1442that leverages the infrastructure provided by the Linux kernel for safely
1443storing and retrieving sensitive information in your programs.")
1444 (license license:asl2.0)))
1445
1446(define-public python-mcuboot-imgtool
1447 (package
1448 (name "python-mcuboot-imgtool")
1449 (version "1.4.0")
1450 (source
1451 (origin
1452 (method git-fetch)
1453 (uri (git-reference
1454 (url "https://github.com/mcu-tools/mcuboot")
1455 (commit (string-append "v" version))))
1456 (file-name (git-file-name name version))
1457 (sha256
1458 (base32 "1m1csyvzq4jx81zg635ssy1n7sc0z539z0myh872ll3nwqx7wa0q"))))
1459 (build-system pyproject-build-system)
1460 (arguments
1461 (list
1462 #:phases
1463 #~(modify-phases %standard-phases
1464 (add-after 'unpack 'fix-broken-test
1465 (lambda _
1466 (substitute* "scripts/imgtool/keys/ed25519_test.py"
1467 (("raw_sign")
1468 "sign_digest"))))
1469 (add-before 'build 'change-directory
1470 (lambda _
1471 (chdir "scripts"))))))
1472 (native-inputs (list python-pytest python-setuptools python-wheel))
1473 (propagated-inputs (list python-click python-intelhex python-cryptography))
1474 (home-page "https://mcuboot.com")
1475 (synopsis "Tool to securely sign firmware images for booting by MCUboot")
1476 (description
1477 "MCUboot is a secure bootloader for 32-bit MCUs. This package provides a
1478tool to securely sign firmware images for booting by MCUboot.")
1479 (license license:expat)))
1480
1481(define-public python-ntlm-auth
1482 (package
1483 (name "python-ntlm-auth")
1484 (version "1.5.0")
1485 (source
1486 (origin
1487 (method git-fetch)
1488 (uri (git-reference
1489 (url "https://github.com/jborean93/ntlm-auth")
1490 (commit (string-append "v" version))))
1491 (file-name (git-file-name name version))
1492 (sha256
1493 (base32 "00dpf5bfsy07frsjihv1k10zmwcyq4bvkilbxha7h6nlwpcm2409"))))
1494 (build-system pyproject-build-system)
1495 (native-inputs
1496 (list python-pytest python-requests python-setuptools python-wheel))
1497 (propagated-inputs (list python-cryptography))
1498 (home-page "https://github.com/jborean93/ntlm-auth")
1499 (synopsis "Calculates NTLM Authentication codes")
1500 (description
1501 "This library handles the low-level details of NTLM authentication for
1502use in authenticating with a service that uses NTLM. It will create and parse
1503the 3 different message types in the order required and produce a base64
1504encoded value that can be attached to the HTTP header.
1505
1506The goal of this library is to offer full NTLM support including signing and
1507sealing of messages as well as supporting MIC for message integrity and the
1508ability to customise and set limits on the messages sent. Please see Features
1509and Backlog for a list of what is and is not currently supported.")
1510 (license license:expat)))
1511
1512(define-public python-secretstorage
1513 (package
1514 (name "python-secretstorage")
1515 (version "3.3.3")
1516 (source
1517 (origin
1518 (method url-fetch)
1519 (uri (pypi-uri "SecretStorage" version))
1520 (sha256
1521 (base32 "0xxxxr77sgmjm1rqzdd1rkan9xg0qmv8awc1pb9adv39ycz560r4"))))
1522 (build-system pyproject-build-system)
1523 (arguments
1524 '(#:tests? #f)) ; Tests require a running dbus service.
1525 (native-inputs
1526 (list python-setuptools))
1527 (propagated-inputs
1528 (list python-cryptography python-jeepney))
1529 (home-page "https://github.com/mitya57/secretstorage")
1530 (synopsis "Python bindings to FreeDesktop.org Secret Service API")
1531 (description
1532 "@code{python-secretstorage} provides a way for securely storing passwords
1533and other secrets. It uses D-Bus Secret Service API that is supported by GNOME
1534Keyring (since version 2.30) and KSecretsService. SecretStorage supports most
1535of the functions provided by Secret Service, including creating and deleting
1536items and collections, editing items, locking and unlocking collections
1537(asynchronous unlocking is also supported).")
1538 (license license:bsd-3)))
1539
1540(define-public python-trustme
1541 (package
1542 (name "python-trustme")
1543 (version "1.2.1")
1544 (source
1545 (origin
1546 (method url-fetch)
1547 (uri (pypi-uri "trustme" version))
1548 (sha256
1549 (base32 "0zz49agi7hy82fbr03xs6k9vjgiy7v8qsp426cgv8bbzphmvla35"))))
1550 (build-system pyproject-build-system)
1551 (native-inputs
1552 (list python-hatchling
1553 python-pyopenssl
1554 python-pytest
1555 python-service-identity))
1556 (propagated-inputs
1557 (list python-cryptography
1558 python-idna))
1559 (home-page "https://trustme.readthedocs.io")
1560 (synopsis "Fake a certificate authority for tests")
1561 (description
1562 "@code{trustme} is a tiny Python package that does one thing: it gives you
1563a fake certificate authority (CA) that you can use to generate fake TLS certs to
1564use in your tests.")
1565 ;; Either license applies.
1566 (license (list license:expat license:asl2.0))))
1567
1568(define-public python-certipy
1569 (package
1570 (name "python-certipy")
1571 (version "0.2.2")
1572 (source
1573 (origin
1574 (method url-fetch)
1575 (uri (pypi-uri "certipy" version))
1576 (sha256
1577 (base32 "0pm0kf079ws9s93vpkxnw3gj6a1hi34p34bicx69rqlyh7cg7wgy"))))
1578 (build-system pyproject-build-system)
1579 (propagated-inputs (list python-cryptography))
1580 (native-inputs (list python-pypa-build
1581 python-flask
1582 python-pytest
1583 python-setuptools
1584 python-wheel))
1585 (home-page "https://github.com/LLNL/certipy")
1586 (synopsis "Utility to create and sign CAs and certificates")
1587 (description
1588 "Certipy was made to simplify the certificate creation process. To that
1589end, certipy exposes methods for creating and managing certificate authorities,
1590certificates, signing and building trust bundles.")
1591 (license license:bsd-3)))
1592
1593(define-public python-jeepney
1594 (package
1595 (name "python-jeepney")
1596 (version "0.8.0")
1597 (source
1598 (origin
1599 (method url-fetch)
1600 (uri (pypi-uri "jeepney" version))
1601 (sha256
1602 (base32 "01jqrk7pn94i7bpmj834pjrw7id659gfag6wpbv04fcpap94izjy"))))
1603 (build-system pyproject-build-system)
1604 (native-inputs
1605 (list python-async-timeout
1606 python-testpath
1607 python-trio
1608 python-pytest
1609 python-pytest-asyncio
1610 python-pytest-trio
1611 ;; For the build backend
1612 python-flit-core))
1613 (home-page "https://gitlab.com/takluyver/jeepney")
1614 (synopsis "Low-level, pure Python DBus protocol wrapper")
1615 (description
1616 "This is a low-level, pure Python DBus protocol client. It has an
1617I/O-free core, and integration modules for different event loops.")
1618 (license license:expat)))
1619
1620(define-public python-argon2-cffi
1621 (package
1622 (name "python-argon2-cffi")
1623 (version "25.1.0")
1624 (source
1625 (origin
1626 (method url-fetch)
1627 (uri (pypi-uri "argon2_cffi" version))
1628 (sha256
1629 (base32 "1ha62fg9blw38q3qayjid8608fp2a57fd81cpzic9x22ib6fajk9"))))
1630 (build-system pyproject-build-system)
1631 (native-inputs
1632 (list python-hatch-fancy-pypi-readme
1633 python-hatch-vcs
1634 python-hatchling
1635 python-pytest))
1636 (propagated-inputs
1637 (list python-argon2-cffi-bindings))
1638 (home-page "https://argon2-cffi.readthedocs.io/")
1639 (synopsis "Secure Password Hashes for Python")
1640 (description
1641 "Argon2 is a secure password hashing algorithm. It is designed to have
1642both a configurable runtime as well as memory consumption. This means that you
1643can decide how long it takes to hash a password and how much memory is required.")
1644 (license license:expat)))
1645
1646(define-public python-argon2-cffi-bindings
1647 (package
1648 (name "python-argon2-cffi-bindings")
1649 (version "25.1.0")
1650 (source
1651 (origin
1652 (method url-fetch)
1653 (uri (pypi-uri "argon2_cffi_bindings" version))
1654 (sha256
1655 (base32 "179256zsrh5c51zmv9k1sc9p102j152nzxqgwhhdhmadxbkg6mxr"))))
1656 (build-system pyproject-build-system)
1657 (arguments
1658 (list
1659 #:phases
1660 #~(modify-phases %standard-phases
1661 (add-before 'build 'use-system-argon2
1662 (lambda _
1663 (setenv "ARGON2_CFFI_USE_SYSTEM" "1"))))))
1664 (native-inputs
1665 (list python-pytest
1666 python-setuptools
1667 python-setuptools-scm))
1668 (inputs
1669 (list argon2))
1670 (propagated-inputs
1671 (list python-cffi))
1672 (home-page "https://github.com/hynek/argon2-cffi-bindings")
1673 (synopsis "Low-level CFFI bindings for Argon2")
1674 (description
1675 "argon2-cffi-bindings provides low-level CFFI bindings to the official
1676implementation of the Argon2 password hashing algorithm.")
1677 (license license:expat)))
1678
1679(define-public python-privy
1680 (package
1681 (name "python-privy")
1682 (version "6.0.0")
1683 (source
1684 (origin
1685 (method git-fetch)
1686 (uri (git-reference
1687 ;; Releases are untagged
1688 (url "https://github.com/ofek/privy")
1689 (commit "2838db3df239797c71bddacc48a4c49a83f35747")))
1690 (file-name (git-file-name name version))
1691 (sha256
1692 (base32 "1m32dh5fqc8cy7jyf1z5fs6zvmdkbq5fi98hr609gbl7s0l0y0i9"))))
1693 (build-system pyproject-build-system)
1694 (native-inputs (list python-pytest python-setuptools))
1695 (propagated-inputs (list python-argon2-cffi python-cryptography))
1696 (home-page "https://www.dropbox.com/developers")
1697 (synopsis "Library to password-protect your data")
1698 (description
1699 "Privy is a small and fast utility for password-protecting secret
1700data such as API keys, cryptocurrency wallets, or seeds for digital
1701signatures.")
1702 (license (list license:expat license:asl2.0)))) ; dual licensed
1703
1704(define-public python-pgpy
1705 (package
1706 (name "python-pgpy")
1707 (version "0.6.0")
1708 (source
1709 (origin
1710 (method url-fetch)
1711 (uri (pypi-uri "PGPy" version))
1712 (sha256
1713 (base32 "10w3h934fi1ijx72ppn67a50yhkf8n1db6xx02gk2fjc7wsjx717"))))
1714 (build-system pyproject-build-system)
1715 (arguments
1716 (list #:test-flags
1717 ;; All broken tests are in this file.
1718 ;; They fail with ValueError: key_size must be at least 1024-bits.
1719 #~(list "--ignore" "tests/test_10_exceptions.py")))
1720 (native-inputs
1721 (list python-pytest python-setuptools python-wheel))
1722 (propagated-inputs (list python-cryptography python-pyasn1))
1723 (home-page "https://github.com/SecurityInnovation/PGPy")
1724 (synopsis "Python implementation of OpenPGP")
1725 (description
1726 "Currently, PGPy can load keys and signatures of all kinds in both ASCII
1727armored and binary formats.
1728
1729It can create and verify RSA, DSA, and ECDSA signatures, at the moment. It
1730can also encrypt and decrypt messages using RSA and ECDH.")
1731 (license license:bsd-3)))
1732
1733(define-public python-pyu2f
1734 (package
1735 (name "python-pyu2f")
1736 (version "0.1.5")
1737 (source
1738 (origin
1739 (method git-fetch)
1740 (uri (git-reference
1741 (url "https://github.com/google/pyu2f/")
1742 (commit (string-append "v" version))))
1743 (file-name (git-file-name name version))
1744 (sha256
1745 (base32 "1jlpplw7hlrh8bgmp37g18panij0p7ism6r4d981my4dc73lbwik"))))
1746 (build-system pyproject-build-system)
1747 (arguments
1748 (list
1749 ;; This test requires the fakefs package.
1750 #:test-flags #~(list "--ignore=pyu2f/tests/hid/linux_test.py")))
1751 (native-inputs (list python-mock python-pytest python-setuptools))
1752 (propagated-inputs (list python-six))
1753 (home-page "https://github.com/google/pyu2f/")
1754 (synopsis "U2F host library for interacting with a U2F device over USB")
1755 (description
1756 "Pyu2f is a Python-based U2F host library. It provides functionality for
1757interacting with a U2F device over USB.")
1758 (license license:asl2.0)))
1759
1760(define-public python-sop
1761 (package
1762 (name "python-sop")
1763 (version "0.5.1")
1764 (source
1765 (origin
1766 (method git-fetch)
1767 (uri (git-reference
1768 (url "https://gitlab.com/dkg/python-sop")
1769 (commit (string-append "sop-" version))))
1770 (file-name (git-file-name name version))
1771 (sha256
1772 (base32 "0sin5miiiqgww0s52jz098x44nbnx003vfd4jn55bs5mgca60lll"))))
1773 (build-system pyproject-build-system)
1774 (arguments
1775 (list #:tests? #f)) ; XXX: No tests upstream.
1776 (native-inputs (list python-setuptools python-wheel))
1777 (home-page "https://gitlab.com/dkg/python-sop")
1778 (synopsis "Stateless OpenPGP Command-Line Interface")
1779 (description
1780 "The Stateless OpenPGP Command-Line Interface (or sop) is a
1781specification that encourages OpenPGP implementors to provide a common,
1782relatively simple command-line API for purposes of object security.
1783
1784This Python module helps implementers build such a CLI from any implementation
1785accessible to the Python interpreter.
1786
1787It does not provide such an implementation itself -- this is just the
1788scaffolding for the command line, which should make it relatively easy to
1789supply a handful of python functions as methods to a class.")
1790 (license license:expat))) ; MIT license
1791
1792(define-public python-starkbank-ecdsa
1793 (package
1794 (name "python-starkbank-ecdsa")
1795 (version "2.2.0")
1796 (home-page "https://github.com/starkbank/ecdsa-python")
1797 (source
1798 (origin
1799 (method git-fetch)
1800 (uri (git-reference
1801 (url home-page)
1802 (commit (string-append "v" version))))
1803 (file-name (git-file-name name version))
1804 (sha256
1805 (base32 "01zy16csrbyfhjl0kay9rbpbwc3dpr7kh2qkrbdy5a1n644fbahx"))))
1806 (arguments
1807 (list
1808 #:test-backend #~'unittest
1809 #:phases
1810 #~(modify-phases %standard-phases
1811 (add-after 'unpack 'remove-broken-test
1812 (lambda _
1813 (delete-file "tests/testOpenSSL.py"))))))
1814 (build-system pyproject-build-system)
1815 (native-inputs (list python-setuptools))
1816 (synopsis "Python ECDSA library")
1817 (description "This package provides a Python ECDSA library, optimized for
1818speed but without C extensions.")
1819 (license license:expat)))
1820
1821(define-public python-zxcvbn
1822 (package
1823 (name "python-zxcvbn")
1824 (version "4.5.0")
1825 (source
1826 (origin
1827 (method git-fetch) ;for tests
1828 (uri (git-reference
1829 (url "https://github.com/dwolfhub/zxcvbn-python")
1830 (commit (string-append "v" version))))
1831 (file-name (git-file-name name version))
1832 (sha256
1833 (base32 "0x39yi4zc1n6mjjk3rx32ick0hysyi9hv9ln69apcch4jf84j9fi"))))
1834 (build-system pyproject-build-system)
1835 (native-inputs (list python-pytest python-setuptools python-wheel))
1836 (home-page "https://github.com/dwolfhub/zxcvbn-python")
1837 (synopsis "Realistic password strength estimator Python library")
1838 (description
1839 "This is a Python implementation of the @code{zxcvbn} library created at
1840Dropbox. The original library, written for JavaScript, can be found
1841@url{https://github.com/dropbox/zxcvbn, here}. This port includes features
1842such as:
1843@enumerate
1844@item Accepts user data to be added to the dictionaries that are tested
1845against (name, birthdate, etc.)
1846@item Gives a score to the password, from 0 (terrible) to 4 (great).
1847@item Provides feedback on the password and ways to improve it.
1848@item Returns time estimates on how long it would take to guess the password
1849in different situations.
1850@end enumerate")
1851 (license license:expat)))
1852
1853;; XXX: Not maintained since 2016.
1854(define-public python-pydes
1855 (package
1856 (name "python-pydes")
1857 (version "2.0.1")
1858 (source
1859 (origin
1860 (method url-fetch)
1861 (uri (pypi-uri "pyDes" version))
1862 (sha256
1863 (base32 "04lh71f47y04vspfrdrq6a0hn060ibxvdp5z1pcr0gmqs8hqxaz2"))))
1864 (build-system pyproject-build-system)
1865 (arguments
1866 (list #:tests? #f)) ;no tests in PyPI, I could not fine Git
1867 (native-inputs (list python-setuptools))
1868 (home-page "http://twhiteman.netfirms.com/des.html") ;XXX: Dead link
1869 (synopsis
1870 "Pure python implementation of the DES and TRIPLE DES encryption algorithms")
1871 (description
1872 "This package provides a pure Python implementation of the DES and
1873TRIPLE DES encryption algorithms.")
1874 (license license:public-domain)))