gnu: Add rust-sharded-slab-0.1.
[jackhill/guix/guix.git] / gnu / packages / python-crypto.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
3 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
4 ;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <leo@famulari.name>
5 ;;; Copyright © 2016, 2017, 2020 Marius Bakke <mbakke@fastmail.com>
6 ;;; Copyright © 2017 Ben Sturmfels <ben@sturm.com.au>
7 ;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com>
8 ;;; Copyright © 2015 Cyril Roelandt <tipecaml@gmail.com>
9 ;;; Copyright © 2014, 2017 Eric Bavier <bavier@member.fsf.org>
10 ;;; Copyright © 2015, 2016 David Thompson <davet@gnu.org>
11 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
12 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
13 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
14 ;;; Copyright © 2015, 2016, 2017, 2019 Ricardo Wurmus <rekado@elephly.net>
15 ;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org>
16 ;;; Copyright © 2016, 2017, 2020 Arun Isaac <arunisaac@systemreboot.net>
17 ;;; Copyright © 2017 Carlo Zancanaro <carlo@zancanaro.id.au>
18 ;;; Copyright © 2018 Tomáš Čech <sleep_walker@gnu.org>
19 ;;; Copyright © 2018, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
20 ;;; Copyright © 2018 Vagrant Cascadian <vagrant@debian.org>
21 ;;; Copyright © 2018 Nam Nguyen <namn@berkeley.edu>
22 ;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
23 ;;; Copyright © 2019 Clément Lassieur <clement@lassieur.org>
24 ;;; Copyright © 2020 Alexandros Theodotou <alex@zrythm.org>
25 ;;; Copyright © 2020 Justus Winter <justus@sequoia-pgp.org>
26 ;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
27 ;;;
28 ;;; This file is part of GNU Guix.
29 ;;;
30 ;;; GNU Guix is free software; you can redistribute it and/or modify it
31 ;;; under the terms of the GNU General Public License as published by
32 ;;; the Free Software Foundation; either version 3 of the License, or (at
33 ;;; your option) any later version.
34 ;;;
35 ;;; GNU Guix is distributed in the hope that it will be useful, but
36 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
37 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
38 ;;; GNU General Public License for more details.
39 ;;;
40 ;;; You should have received a copy of the GNU General Public License
41 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
42
43 (define-module (gnu packages python-crypto)
44 #:use-module (guix packages)
45 #:use-module (guix download)
46 #:use-module (guix git-download)
47 #:use-module (guix build-system python)
48 #:use-module (gnu packages)
49 #:use-module (gnu packages check)
50 #:use-module (gnu packages crypto)
51 #:use-module (gnu packages kerberos)
52 #:use-module (gnu packages libffi)
53 #:use-module (gnu packages multiprecision)
54 #:use-module (gnu packages password-utils)
55 #:use-module (gnu packages protobuf)
56 #:use-module (gnu packages python)
57 #:use-module (gnu packages python-check)
58 #:use-module (gnu packages python-compression)
59 #:use-module (gnu packages python-web)
60 #:use-module (gnu packages python-xyz)
61 #:use-module (gnu packages swig)
62 #:use-module (gnu packages time)
63 #:use-module (gnu packages tls)
64 #:use-module (gnu packages xml)
65 #:use-module ((guix licenses) #:prefix license:)
66 #:use-module (srfi srfi-1))
67
68 (define-public python-potr
69 (package
70 (name "python-potr")
71 (version "1.0.2")
72 (source
73 (origin
74 (method git-fetch)
75 (uri
76 (git-reference
77 (url "https://github.com/python-otr/pure-python-otr")
78 (commit version)))
79 (file-name
80 (git-file-name name version))
81 (sha256
82 (base32 "1hzw6h01fm216nmipyylgz0zybd80w1xsk12m7djycnhqrnrvvv1"))))
83 (build-system python-build-system)
84 (propagated-inputs
85 `(("python-pycrypto" ,python-pycrypto)))
86 (synopsis "Python OTR Implementation")
87 (description "Python OTR is an Off-The-Record Protocol Implementation in
88 Python. It does not bind to libotr.")
89 (home-page "https://github.com/python-otr/pure-python-otr")
90 (license license:lgpl3+)))
91
92 (define-public python-base58
93 (package
94 (name "python-base58")
95 (version "2.0.1")
96 (source
97 (origin
98 (method url-fetch)
99 (uri (pypi-uri "base58" version))
100 (sha256
101 (base32
102 "0yfaqp76kbdb62hikr5n4jkkfjfmii89grwfy6sw3fmsv5hrap1n"))))
103 (build-system python-build-system)
104 (native-inputs
105 `(("python-pyhamcrest" ,python-pyhamcrest)))
106 (home-page "https://github.com/keis/base58")
107 (synopsis "Base58 and Base58Check implementation")
108 (description "Base58 and Base58Check implementation compatible
109 with what is used by the Bitcoin network.")
110 (license license:expat)))
111
112 (define-public python-bcrypt
113 (package
114 (name "python-bcrypt")
115 (version "3.1.7")
116 (source
117 (origin
118 (method url-fetch)
119 (uri (pypi-uri "bcrypt" version))
120 (sha256
121 (base32 "0hhywhxx301cxivgxrpslrangbfpccc8y83qbwn1f57cab3nj00b"))))
122 (build-system python-build-system)
123 (native-inputs
124 `(("python-pycparser" ,python-pycparser)
125 ("python-pytest" ,python-pytest)))
126 (propagated-inputs
127 `(("python-cffi" ,python-cffi)
128 ("python-six" ,python-six)))
129 (home-page "https://github.com/pyca/bcrypt/")
130 (synopsis
131 "Modern password hashing library")
132 (description
133 "Bcrypt is a Python module which provides a password hashing method based
134 on the Blowfish password hashing algorithm, as described in
135 @url{http://static.usenix.org/events/usenix99/provos.html,\"A Future-Adaptable
136 Password Scheme\"} by Niels Provos and David Mazieres.")
137 (license license:asl2.0)))
138
139 (define-public python2-bcrypt
140 (package-with-python2 python-bcrypt))
141
142 (define-public python-passlib
143 (package
144 (name "python-passlib")
145 (version "1.7.4")
146 (source
147 (origin
148 (method url-fetch)
149 (uri (pypi-uri "passlib" version))
150 (sha256
151 (base32 "015y5qaw9qnxr29lg60dml1g5rbqd4586wy5n8m41ib55gvm1zfy"))))
152 (build-system python-build-system)
153 (native-inputs
154 `(("python-nose" ,python-nose)))
155 (propagated-inputs
156 `(("python-py-bcrypt" ,python-py-bcrypt)))
157 (arguments
158 `(#:phases
159 (modify-phases %standard-phases
160 (add-before 'check 'set-PYTHON_EGG_CACHE
161 ;; Some tests require access to "$HOME/.cython".
162 (lambda _ (setenv "PYTHON_EGG_CACHE" "/tmp") #t)))))
163 (home-page "https://bitbucket.org/ecollins/passlib")
164 (synopsis "Comprehensive password hashing framework")
165 (description
166 "Passlib is a password hashing library for Python 2 & 3, which provides
167 cross-platform implementations of over 30 password hashing algorithms, as well
168 as a framework for managing existing password hashes. It's designed to be
169 useful for a wide range of tasks, from verifying a hash found in /etc/shadow,
170 to providing full-strength password hashing for multi-user application.")
171 (license license:bsd-3)))
172
173 (define-public python2-passlib
174 (package-with-python2 python-passlib))
175
176 (define-public python-py-bcrypt
177 (package
178 (name "python-py-bcrypt")
179 (version "0.4")
180 (source
181 (origin
182 (method url-fetch)
183 (uri (pypi-uri "py-bcrypt" version))
184 (sha256
185 (base32
186 "0y6smdggwi5s72v6p1nn53dg6w05hna3d264cq6kas0lap73p8az"))))
187 (build-system python-build-system)
188 (home-page "https://code.google.com/p/py-bcrypt")
189 (synopsis
190 "Bcrypt password hashing and key derivation")
191 (description
192 "A python wrapper of OpenBSD's Blowfish password hashing code. This
193 system hashes passwords using a version of Bruce Schneier's Blowfish block
194 cipher with modifications designed to raise the cost of off-line password
195 cracking and frustrate fast hardware implementation. The computation cost of
196 the algorithm is parametrised, so it can be increased as computers get faster.
197 The intent is to make a compromise of a password database less likely to
198 result in an attacker gaining knowledge of the plaintext passwords (e.g. using
199 John the Ripper).")
200 ;; "sha2.c" is under BSD-3;
201 ;; "blowfish.c" and "bcrypt.c" are under BSD-4;
202 ;; the rest is under ISC.
203 (license (list license:isc license:bsd-3 license:bsd-4))))
204
205 (define-public python2-py-bcrypt
206 (package-with-python2 python-py-bcrypt))
207
208 (define-public python-pyblake2
209 (package
210 (name "python-pyblake2")
211 (version "1.1.2")
212 (source
213 (origin
214 (method url-fetch)
215 (uri (pypi-uri "pyblake2" version))
216 (sha256
217 (base32
218 "0gz9hgznv5zw4qjq43xa56y0yikimx30gffvibxzm0nv5sq7xk2w"))))
219 (build-system python-build-system)
220 (home-page "https://github.com/dchest/pyblake2")
221 (synopsis "BLAKE2 hash function for Python")
222 (description "BLAKE2 is a cryptographic hash function, which offers
223 stronger security while being as fast as MD5 or SHA-1, and comes in two
224 flavors: @code{BLAKE2b}, optimized for 64-bit platforms and produces digests
225 of any size between 1 and 64 bytes, and @code{BLAKE2s}, optimized for 8- to
226 32-bit platforms and produces digests of any size between 1 and 32 bytes.
227
228 This package provides a Python interface for BLAKE2.")
229 ;; The COPYING file declares it as public domain, with the option to
230 ;; alternatively use and redistribute it under a variety of permissive
231 ;; licenses. cc0 is explicitly mentioned in setup.py and pyblake2module.c.
232 (license (list license:public-domain license:cc0))))
233
234 (define-public python-paramiko
235 (package
236 (name "python-paramiko")
237 (version "2.7.2")
238 (source
239 (origin
240 (method url-fetch)
241 (uri (pypi-uri "paramiko" version))
242 (sha256
243 (base32 "0dahwq623jnna7gsr9j0mkwr9k2n1pvkapjryhcx508d5jxg8dkz"))))
244 (build-system python-build-system)
245 (arguments
246 `(;; FIXME: Tests require many unpackaged libraries, see dev-requirements.txt.
247 #:tests? #f))
248 (propagated-inputs
249 `(("python-bcrypt" ,python-bcrypt)
250 ("python-pyasn1" ,python-pyasn1)
251 ("python-pynacl" ,python-pynacl)
252 ("python-cryptography" ,python-cryptography)))
253 (home-page "https://www.paramiko.org/")
254 (synopsis "SSHv2 protocol library")
255 (description "Paramiko is a python implementation of the SSHv2 protocol,
256 providing both client and server functionality. While it leverages a Python C
257 extension for low level cryptography (PyCrypto), Paramiko itself is a pure
258 Python interface around SSH networking concepts.")
259 (license license:lgpl2.1+)))
260
261 (define-public python2-paramiko
262 (package-with-python2 python-paramiko))
263
264 (define-public python-ecdsa
265 (package
266 (name "python-ecdsa")
267 (version "0.14.1")
268 (source
269 (origin
270 (method url-fetch)
271 (uri (pypi-uri "ecdsa" version))
272 (sha256
273 (base32 "13nx5cbfxc0gnax5zwdmp9xc40qd1llk62mv85jyrvqkbw017ik4"))))
274 (build-system python-build-system)
275 (arguments
276 '(#:phases
277 (modify-phases %standard-phases
278 (replace 'check
279 (lambda _ (invoke "pytest"))))))
280 (propagated-inputs
281 `(("python-six" ,python-six)))
282 (native-inputs
283 `(("openssl" ,openssl)
284 ("python-pytest" ,python-pytest)))
285 (home-page "https://github.com/warner/python-ecdsa")
286 (synopsis "ECDSA cryptographic signature library (pure python)")
287 (description
288 "This is an easy-to-use implementation of ECDSA cryptography (Elliptic
289 Curve Digital Signature Algorithm), implemented purely in Python. With this
290 library, you can quickly create key pairs (signing key and verifying key), sign
291 messages, and verify the signatures. The keys and signatures are very short,
292 making them easy to handle and incorporate into other protocols.")
293 (license license:expat)))
294
295 (define-public python2-ecdsa
296 (package-with-python2 python-ecdsa))
297
298 ;;; Pycrypto is abandoned upstream:
299 ;;;
300 ;;; https://github.com/dlitz/pycrypto/issues/173
301 ;;;
302 ;;; TODO Remove this package from GNU Guix.
303 (define-public python-pycrypto
304 (package
305 (name "python-pycrypto")
306 (version "2.6.1")
307 (source
308 (origin
309 (method url-fetch)
310 (uri (pypi-uri "pycrypto" version))
311 (patches (search-patches "python-pycrypto-CVE-2013-7459.patch"
312 "python-pycrypto-time-clock.patch"))
313 (sha256
314 (base32
315 "0g0ayql5b9mkjam8hym6zyg6bv77lbh66rv1fyvgqb17kfc1xkpj"))))
316 (build-system python-build-system)
317 (inputs
318 `(("python" ,python)
319 ("gmp" ,gmp)))
320 (arguments
321 `(#:phases
322 (modify-phases %standard-phases
323 (add-before 'build 'set-build-env
324 ;; pycrypto runs an autoconf configure script behind the scenes
325 (lambda _ (setenv "CONFIG_SHELL" (which "bash")) #t)))))
326 (home-page "https://www.dlitz.net/software/pycrypto/")
327 (synopsis "Cryptographic modules for Python")
328 (description
329 "Pycrypto is a collection of both secure hash functions (such as SHA256
330 and RIPEMD160), and various encryption algorithms (AES, DES, RSA, ElGamal,
331 etc.). The package is structured to make adding new modules easy.")
332 (license license:public-domain)))
333
334 (define-public python2-pycrypto
335 (let ((pycrypto (package-with-python2 python-pycrypto)))
336 (package (inherit pycrypto)
337 (inputs
338 `(("python" ,python-2)
339 ,@(alist-delete
340 "python"
341 (package-inputs pycrypto)))))))
342
343 (define-public python-kerberos
344 (package
345 (name "python-kerberos")
346 (version "1.3.0")
347 (source
348 (origin
349 (method url-fetch)
350 (uri (pypi-uri "kerberos" version))
351 (sha256
352 (base32
353 "19663qxmma0i8bfbjc2iwy5hgq0g4pfb75r023v5dps68zfvffgh"))))
354 (build-system python-build-system)
355 (inputs
356 `(("mit-krb5" ,mit-krb5)))
357 (home-page "https://github.com/apple/ccs-pykerberos")
358 (synopsis
359 "Python Kerberos library used by CalendarServer")
360 (description
361 "This Python package is a high-level wrapper for Kerberos (GSSAPI)
362 operations. The goal is to avoid having to build a module that wraps the
363 entire Kerberos.framework, and instead offer a limited set of functions that
364 do what is needed for client/server Kerberos authentication based on
365 <http://www.ietf.org/rfc/rfc4559.txt>.")
366 (license license:asl2.0)))
367
368 (define-public python-keyring
369 (package
370 (name "python-keyring")
371 (version "21.0.0")
372 (source
373 (origin
374 (method url-fetch)
375 (uri (pypi-uri "keyring" version))
376 (sha256
377 (base32
378 "1k0w3yh3fz0qp0cvkxdiinq9jzbrnc6bd88qpjz34x3cgcr94psz"))
379 (modules '((guix build utils)))
380 (snippet
381 ;; https://github.com/jaraco/keyring/issues/414
382 '(begin (substitute* "tests/test_packaging.py"
383 (("ep, =") "(ep,) =")) #t))))
384 (build-system python-build-system)
385 (arguments
386 `(#:phases
387 (modify-phases %standard-phases
388 (replace 'check
389 (lambda _
390 ;; Not clear why this test fails.
391 (delete-file "tests/test_packaging.py")
392 (substitute* "pytest.ini"
393 (("--black ") ""))
394 (invoke "pytest"))))))
395 (native-inputs
396 `(("python-pytest" ,python-pytest)
397 ("python-pytest-checkdocs" ,python-pytest-checkdocs)
398 ("python-pytest-cov" ,python-pytest-cov)
399 ("python-pytest-flake8" ,python-pytest-flake8)
400 ("python-setuptools-scm" ,python-setuptools-scm)))
401 (propagated-inputs
402 `(("python-importlib-metadata" ,python-importlib-metadata)
403 ("python-secretstorage" ,python-secretstorage)))
404 (home-page "https://github.com/jaraco/keyring")
405 (synopsis "Store and access your passwords safely")
406 (description
407 "The Python keyring lib provides a easy way to access the system keyring
408 service from python. It can be used in any application that needs safe
409 password storage.")
410 ;; "MIT" and PSF dual license
411 (properties `((python2-variant . ,(delay python2-keyring))))
412 (license license:x11)))
413
414 (define-public python2-keyring
415 (let ((keyring (package-with-python2
416 (strip-python2-variant python-keyring))))
417 (package
418 (inherit keyring)
419 (name "python2-keyring")
420 (version "8.7")
421 (source
422 (origin
423 (method url-fetch)
424 (uri (pypi-uri "keyring" version))
425 (sha256
426 (base32
427 "0482rmi2x6p78wl2kz8qzyq21xz1sbbfwnv5x7dggar4vkwxhzfx"))))
428 (arguments
429 `(#:python ,python-2))
430 (native-inputs
431 `(("python2-pytest" ,python2-pytest)
432 ("python2-pytest-runner" ,python2-pytest-runner)
433 ("python2-setuptools-scm" ,python2-setuptools-scm)))
434 (propagated-inputs
435 `(("python2-pycrypto" ,python2-pycrypto))))))
436
437 (define-public python-keyrings.alt
438 (package
439 (name "python-keyrings.alt")
440 (version "3.4.0")
441 (source
442 (origin
443 (method url-fetch)
444 (uri (pypi-uri "keyrings.alt" version))
445 (sha256
446 (base32
447 "0gdjdqpq2hf770p6iwi891mil0vbsdhvy88x0v8b2w4y4b28lcli"))
448 (modules '((guix build utils)))
449 (snippet
450 '(begin
451 (delete-file "keyrings/alt/_win_crypto.py")
452 ;; Rely on python-keyring>20:
453 ;; https://github.com/jaraco/keyrings.alt/issues/33
454 (substitute* '("keyrings/alt/tests/test_Gnome.py"
455 "keyrings/alt/tests/test_Google.py"
456 "keyrings/alt/tests/test_Windows.py"
457 "keyrings/alt/tests/test_file.py"
458 "keyrings/alt/tests/test_pyfs.py")
459 (("keyring.tests.test_backend") "keyring.testing.backend")
460 (("keyring.tests.util") "keyring.testing.util"))
461 #t))))
462 (build-system python-build-system)
463 (native-inputs
464 `(("python-keyring" ,python-keyring)
465 ("python-pytest" ,python-pytest)
466 ("python-setuptools-scm" ,python-setuptools-scm)))
467 (home-page "https://github.com/jaraco/keyrings.alt")
468 (synopsis "Alternate keyring implementations")
469 (description "Keyrings in this package may have security risks or other
470 implications. These backends were extracted from the main keyring project to
471 make them available for those who wish to employ them, but are discouraged for
472 general production use. Include this module and use its backends at your own
473 risk.")
474 (license license:expat)))
475
476 (define-public python-certifi
477 (package
478 (name "python-certifi")
479 (version "2020.11.8")
480 (source (origin
481 (method url-fetch)
482 (uri (pypi-uri "certifi" version))
483 (sha256
484 (base32
485 "1x4w18gm71dbwys5g2mbcnbw27b3dvphj5d56icg5ys45h4yypgh"))))
486 (build-system python-build-system)
487 (arguments '(#:tests? #f)) ;no tests
488 (home-page "https://certifi.io/")
489 (synopsis "Python CA certificate bundle")
490 (description
491 "Certifi is a Python library that contains a CA certificate bundle, which
492 is used by the Requests library to verify HTTPS requests.")
493 (license license:asl2.0)))
494
495 (define-public python2-certifi
496 (package-with-python2 python-certifi))
497
498 (define-public python-cryptography-vectors
499 (package
500 (name "python-cryptography-vectors")
501 (version "3.1.1")
502 (source
503 (origin
504 (method url-fetch)
505 (uri (pypi-uri "cryptography_vectors" version))
506 (sha256
507 (base32
508 "1xp2j79c1y8qj4b97ygx451gzp8l4cp830hnvg3zw8j134bcaaam"))))
509 (build-system python-build-system)
510 (home-page "https://github.com/pyca/cryptography")
511 (synopsis "Test vectors for the cryptography package")
512 (description
513 "This package contains test vectors for the cryptography package.")
514 ;; Distributed under either BSD-3 or ASL2.0
515 (license (list license:bsd-3 license:asl2.0))))
516
517 (define-public python2-cryptography-vectors
518 (package-with-python2 python-cryptography-vectors))
519
520 (define-public python-cryptography
521 (package
522 (name "python-cryptography")
523 (version "3.1.1")
524 (source
525 (origin
526 (method url-fetch)
527 (uri (pypi-uri "cryptography" version))
528 (sha256
529 (base32
530 "0z81q4d1nangw3r0v5f41mfl4d9r04qnbayl5ll5v5jpcfhwd7wx"))))
531 (build-system python-build-system)
532 (inputs
533 `(("openssl" ,openssl)))
534 (propagated-inputs
535 `(("python-asn1crypto" ,python-asn1crypto)
536 ("python-cffi" ,python-cffi)
537 ("python-six" ,python-six)
538 ("python-idna" ,python-idna)
539 ("python-iso8601" ,python-iso8601)))
540 (native-inputs
541 `(("python-cryptography-vectors" ,python-cryptography-vectors)
542 ("python-hypothesis" ,python-hypothesis)
543 ("python-pretend" ,python-pretend)
544 ("python-pytz" ,python-pytz)
545 ("python-pytest" ,python-pytest)))
546 (home-page "https://github.com/pyca/cryptography")
547 (synopsis "Cryptographic recipes and primitives for Python")
548 (description
549 "cryptography is a package which provides cryptographic recipes and
550 primitives to Python developers. It aims to be the “cryptographic standard
551 library” for Python. The package includes both high level recipes, and low
552 level interfaces to common cryptographic algorithms such as symmetric ciphers,
553 message digests and key derivation functions.")
554 ;; Distributed under either BSD-3 or ASL2.0
555 (license (list license:bsd-3 license:asl2.0))
556 (properties `((python2-variant . ,(delay python2-cryptography))))))
557
558 (define-public python2-cryptography
559 (let ((crypto (package-with-python2
560 (strip-python2-variant python-cryptography))))
561 (package (inherit crypto)
562 (propagated-inputs
563 `(("python2-ipaddress" ,python2-ipaddress)
564 ("python2-backport-ssl-match-hostname"
565 ,python2-backport-ssl-match-hostname)
566 ("python2-enum34" ,python2-enum34)
567 ,@(package-propagated-inputs crypto))))))
568
569 (define-public python-pyopenssl
570 (package
571 (name "python-pyopenssl")
572 (version "19.1.0")
573 (source
574 (origin
575 (method url-fetch)
576 (uri (pypi-uri "pyOpenSSL" version))
577 (sha256
578 (base32
579 "01wmsq6w0frzbr3zps4ga9kmqjidp2h317jwpq1g9ah24r5lj94s"))))
580 (build-system python-build-system)
581 (arguments
582 '(#:phases
583 (modify-phases %standard-phases
584 (delete 'check)
585 (add-after 'install 'check
586 (lambda* (#:key inputs outputs #:allow-other-keys)
587 (add-installed-pythonpath inputs outputs)
588 ;; PyOpenSSL runs tests against a certificate with a fixed
589 ;; expiry time. To ensure successful builds in the future,
590 ;; set the time to roughly the release date.
591 (invoke "faketime" "2019-01-01" "py.test" "-v" "-k"
592 (string-append
593 ;; This test tries to look up certificates from
594 ;; the compiled-in default path in OpenSSL, which
595 ;; does not exist in the build environment.
596 "not test_fallback_default_verify_paths "
597 ;; This test attempts to make a connection to
598 ;; an external web service.
599 "and not test_set_default_verify_paths")))))))
600 (propagated-inputs
601 `(("python-cryptography" ,python-cryptography)
602 ("python-six" ,python-six)))
603 (inputs
604 `(("openssl" ,openssl)))
605 (native-inputs
606 `(("libfaketime" ,libfaketime)
607 ("python-flaky" ,python-flaky)
608 ("python-pretend" ,python-pretend)
609 ("python-pytest" ,python-pytest)))
610 (home-page "https://github.com/pyca/pyopenssl")
611 (synopsis "Python wrapper module around the OpenSSL library")
612 (description
613 "PyOpenSSL is a high-level wrapper around a subset of the OpenSSL
614 library.")
615 (license license:asl2.0)))
616
617 (define-public python2-pyopenssl
618 (package-with-python2 python-pyopenssl))
619
620 (define-public python-ed25519
621 (package
622 (name "python-ed25519")
623 (version "1.4")
624 (source
625 (origin
626 (method url-fetch)
627 (uri (pypi-uri "ed25519" version))
628 (sha256
629 (base32
630 "0ahx1nkxa0xis3cw0h5c4fpgv8mq4znkq7kajly33lc3317bk499"))))
631 (build-system python-build-system)
632 (home-page "https://github.com/warner/python-ed25519")
633 (synopsis "Ed25519 public-key signatures")
634 (description "Ed25519 public-key signatures")
635 (license license:expat)))
636
637 (define-public python2-ed25519
638 (package-with-python2 python-ed25519))
639
640 (define-public python-axolotl-curve25519
641 (package
642 (name "python-axolotl-curve25519")
643 (version "0.4.1.post2")
644 (source
645 (origin
646 (method url-fetch)
647 (uri (pypi-uri "python-axolotl-curve25519" version))
648 (sha256
649 (base32
650 "18v3rfyv7xi26fb97nw1xc0l6x8wi0i4xj8dlq4gblpbjxiac187"))))
651 (build-system python-build-system)
652 (home-page "https://github.com/tgalal/python-axolotl-curve25519")
653 (synopsis "Python wrapper for curve25519 library")
654 (description "This is a python wrapper for the curve25519 library
655 with ed25519 signatures. The C code was pulled from
656 libaxolotl-android. At the moment this wrapper is meant for use by
657 python-axolotl.")
658 (license (list license:gpl3 ; Most files
659 license:bsd-3)))) ; curve/curve25519-donna.c
660
661 (define-public python2-axolotl-curve25519
662 (package-with-python2 python-axolotl-curve25519))
663
664 (define-public python-axolotl
665 (package
666 (name "python-axolotl")
667 (version "0.2.3")
668 (source
669 (origin
670 (method url-fetch)
671 (uri (pypi-uri "python-axolotl" version))
672 (sha256
673 (base32
674 "1bwdp24fmriffwx91aigs9k162albb51iskp23nc939z893q23py"))))
675 (build-system python-build-system)
676 (arguments
677 `(#:phases
678 (modify-phases %standard-phases
679 ;; Don't install tests
680 (add-before 'install 'remove-tests
681 (lambda _
682 (for-each delete-file-recursively
683 '("axolotl/tests" "build/lib/axolotl/tests"))
684 #t)))))
685 (propagated-inputs
686 `(("python-axolotl-curve25519" ,python-axolotl-curve25519)
687 ("python-cryptography" ,python-cryptography)
688 ("python-protobuf" ,python-protobuf)))
689 (home-page "https://github.com/tgalal/python-axolotl")
690 (synopsis "Python port of libaxolotl-android")
691 (description "This is a python port of libaxolotl-android. This
692 is a ratcheting forward secrecy protocol that works in synchronous and
693 asynchronous messaging environments.")
694 (license license:gpl3)))
695
696 (define-public python2-axolotl
697 (package-with-python2 python-axolotl))
698
699 ;; SlowAES isn't compatible with Python 3.
700 (define-public python2-slowaes
701 (package
702 (name "python2-slowaes")
703 (version "0.1a1")
704 (source
705 (origin
706 (method url-fetch)
707 (uri (pypi-uri "slowaes" version))
708 (sha256
709 (base32
710 "02dzajm83a7lqgxf6r3hgj64wfmcxz8gs4nvgxpvj5n19kjqlrc3"))))
711 (build-system python-build-system)
712 (arguments `(#:python ,python-2))
713 (home-page "http://code.google.com/p/slowaes/")
714 (synopsis "Implementation of AES in Python")
715 (description "This package contains an implementation of AES in Python.
716 This implementation is slow (hence the project name) but still useful when
717 faster ones are not available.")
718 (license license:asl2.0)))
719
720 (define-public python-pyaes
721 (package
722 (name "python-pyaes")
723 (version "1.6.1")
724 (source
725 (origin
726 (method url-fetch)
727 (uri (pypi-uri "pyaes" version))
728 (sha256
729 (base32
730 "13vdaff15k0jyfcss4b4xvfgm8xyv0nrbyw5n1qc7lrqbi0b3h82"))))
731 (build-system python-build-system)
732 (home-page "https://github.com/ricmoo/pyaes")
733 (synopsis "Implementation of AES in Python")
734 (description "This package contains a pure-Python implementation of the
735 AES block cipher algorithm and the common modes of operation (CBC, CFB, CTR,
736 ECB and OFB).")
737 (license license:expat)))
738
739 (define-public python2-pyaes
740 (package-with-python2 python-pyaes))
741
742 (define-public python-asn1crypto
743 (package
744 (name "python-asn1crypto")
745 (version "1.4.0")
746 (source
747 (origin
748 (method git-fetch)
749 (uri (git-reference
750 (url "https://github.com/wbond/asn1crypto")
751 (commit version)))
752 (file-name (git-file-name name version))
753 (sha256
754 (base32
755 "19abibn6jw20mzi1ln4n9jjvpdka8ygm4m439hplyrdfqbvgm01r"))))
756 (build-system python-build-system)
757 (arguments
758 '(#:phases (modify-phases %standard-phases
759 (replace 'check
760 (lambda _
761 (invoke "python" "run.py" "tests"))))))
762 (home-page "https://github.com/wbond/asn1crypto")
763 (synopsis "ASN.1 parser and serializer in Python")
764 (description "asn1crypto is an ASN.1 parser and serializer with definitions
765 for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7,
766 PKCS#8, PKCS#12, PKCS#5, X.509 and TSP.")
767 (license license:expat)))
768
769 (define-public python2-asn1crypto
770 (package-with-python2 python-asn1crypto))
771
772 (define-public python-pynacl
773 (package
774 (name "python-pynacl")
775 (version "1.4.0")
776 (source
777 (origin
778 (method url-fetch)
779 (uri (pypi-uri "PyNaCl" version))
780 (modules '((guix build utils)))
781 (snippet
782 '(begin
783 ;; Remove spurious dependency on python-wheel, can be removed
784 ;; for 1.5.
785 (substitute* "setup.py"
786 (("\"wheel\"") ""))
787 ;; Remove bundled libsodium.
788 (delete-file-recursively "src/libsodium")
789 #t))
790 (sha256
791 (base32
792 "01b56hxrbif3hx8l6rwz5kljrgvlbj7shmmd2rjh0hn7974a5sal"))))
793 (build-system python-build-system)
794 (arguments
795 `(#:modules (,@%python-build-system-modules
796 (guix build utils)
797 (ice-9 ftw)
798 (srfi srfi-26))
799 #:phases
800 (modify-phases (@ (guix build python-build-system) %standard-phases)
801 (add-before 'build 'use-system-sodium
802 (lambda _
803 (setenv "SODIUM_INSTALL" "system")
804 #t))
805 (replace 'check
806 (lambda _
807 (let ((build-directory
808 (car (scandir "build" (cut string-prefix? "lib" <>)))))
809 (setenv "PYTHONPATH"
810 (string-append "./build/" build-directory ":"
811 (getenv "PYTHONPATH")))
812 (invoke "pytest" "-vv")))))))
813 (native-inputs
814 `(("python-hypothesis" ,python-hypothesis)
815 ("python-pytest" ,python-pytest)))
816 (propagated-inputs
817 `(("python-cffi" ,python-cffi)
818 ("python-six" ,python-six)
819 ("libsodium" ,libsodium)))
820 (home-page "https://github.com/pyca/pynacl/")
821 (synopsis "Python bindings to libsodium")
822 (description
823 "PyNaCl is a Python binding to libsodium, which is a fork of the
824 Networking and Cryptography library. These libraries have a stated goal
825 of improving usability, security and speed.")
826 (license license:asl2.0)))
827
828 (define-public python2-pynacl
829 (package-with-python2 python-pynacl))
830
831 (define-public python2-pgpdump
832 (package
833 (name "python2-pgpdump")
834 (version "1.5")
835 (source
836 (origin
837 (method url-fetch)
838 (uri (pypi-uri "pgpdump" version))
839 (sha256
840 (base32
841 "0s4nh8h7qsdj2yf29bspjs1zvxd4lcd11r6g11dp7fppgf2h0iqw"))))
842 (build-system python-build-system)
843
844 ;; Currently fails to build with Python 3.
845 (arguments `(#:python ,python-2))
846
847 (home-page "https://github.com/toofishes/python-pgpdump")
848 (synopsis "Python library for parsing PGP packets")
849 (description
850 "Python-pgpdump is an OpenPGP packet parser based on
851 @uref{http://www.mew.org/~kazu/proj/pgpdump/, pgpdump}. It notably supports:
852
853 @itemize
854 @item signature packets;
855 @item public key packets;
856 @item secret key packets;
857 @item trust, user ID, and user attribute packets;
858 @item ASCII-armor decoding and CRC check.
859 @end itemize\n")
860 (license license:bsd-3)))
861
862 (define-public python2-roca-detect
863 (package
864 (name "python2-roca-detect")
865 (version "1.0.8")
866 (source
867 (origin
868 (method url-fetch)
869 (uri (pypi-uri "roca-detect" version))
870 (sha256
871 (base32
872 "1di4akyw2lf5r8zfwvyhkilz8jv8g4b66rgaqwfabmjwma6gnw27"))))
873 (build-system python-build-system)
874 (native-inputs
875 ;; TODO: apk_parse_ph4, pyjks
876 `(("python2-dateutil" ,python2-dateutil)
877 ("python2-six" ,python2-six)
878 ("python2-cryptography" ,python2-cryptography)
879 ("python2-future" ,python2-future)
880 ("python2-coloredlogs" ,python2-coloredlogs)
881 ("python2-pgpdump" ,python2-pgpdump)))
882 (arguments
883 `(;; Basic testing routine is quite simple and works with Py3
884 ;; but the rest of the code that processes the different
885 ;; key formats and extracts the modulus for inspection is
886 ;; not yet fully py3 ready.
887 #:python ,python-2))
888 (home-page "https://github.com/crocs-muni/roca")
889 (synopsis "ROCA detection tool")
890 (description
891 "This tool is related to the paper entitled @i{Return of the
892 Coppersmith’s Attack: Practical Factorization of Widely Used RSA Moduli}. It
893 enables you to test public RSA keys for a presence of the described
894 vulnerability. Currently the tool supports the following key formats: X.509
895 Certificate (DER encoded, PEM encoded), RSA PEM (encoded private key, public
896 key), SSH public key, ASC-encoded OpenPGP key, APK Android application, LDIFF
897 file, and more.")
898 (license license:gpl3)))
899
900 (define-public python-blurhash
901 (package
902 (name "python-blurhash")
903 (version "1.1.4")
904 (source
905 (origin
906 ;; Tests not included in pypi release and releases not tagged in git repo.
907 (method git-fetch)
908 (uri (git-reference
909 (url "https://github.com/halcy/blurhash-python")
910 (commit "22e081ef1c24da1bb5c5eaa2c1d6649724deaef8")))
911 (file-name (git-file-name name version))
912 (sha256
913 (base32
914 "1qq6mhydlp7q3na4kmaq3871h43wh3pyfyxr4b79bia73wjdylxf"))))
915 (build-system python-build-system)
916 (arguments
917 '(#:phases
918 (modify-phases %standard-phases
919 (replace 'check
920 (lambda _
921 (delete-file "setup.cfg")
922 (invoke "pytest"))))))
923 (native-inputs
924 `(("python-numpy" ,python-numpy)
925 ("python-pillow" ,python-pillow)
926 ("python-pytest" ,python-pytest)))
927 (home-page "https://github.com/halcy/blurhash-python")
928 (synopsis
929 "Pure-Python implementation of the blurhash algorithm")
930 (description
931 "Pure-Python implementation of the blurhash algorithm.")
932 (license license:expat)))
933
934 (define-public python-ecpy
935 (package
936 (name "python-ecpy")
937 (version "0.10.0")
938 (source
939 (origin
940 (method url-fetch)
941 (uri (pypi-uri "ECPy" version))
942 (sha256
943 (base32
944 "1gc3i5s93zq6x1nkaxkq1dvmsc12vmrw0hns9f5s1hcb78ni52c8"))))
945 (build-system python-build-system)
946 (propagated-inputs
947 `(("python-future" ,python-future)))
948 (home-page "https://github.com/ubinity/ECPy")
949 (synopsis "Pure Python Elliptic Curve Library")
950 (description "This package provides a Elliptic Curve Library in pure
951 Python.")
952 (license license:asl2.0)))
953
954 (define-public python2-ecpy
955 (package-with-python2 python-ecpy))
956
957 (define-public python-josepy
958 (package
959 (name "python-josepy")
960 (version "1.1.0")
961 (source (origin
962 (method url-fetch)
963 (uri (pypi-uri "josepy" version))
964 (sha256
965 (base32
966 "11khz8malzrv375b27jjkv66z6z6khdx1v5mkkr4vq16gp3n4p7v"))))
967 (build-system python-build-system)
968 (arguments
969 ;; The tests require flake8 >= 3.5, which is not yet packaged.
970 '(#:tests? #f))
971 (propagated-inputs
972 `(("python-cryptography" ,python-cryptography)
973 ("python-pyopenssl" ,python-pyopenssl)
974 ("python-six" ,python-six)))
975 ;; TODO Enable when we have flake8 >= 3.5.
976 ; (native-inputs
977 ; `(("python-coverage" ,python-coverage)
978 ; ("python-flake8" ,python-flake8)
979 ; ("python-isort" ,python-isort)
980 ; ("python-mock" ,python-mock)
981 ; ("python-pytest" ,python-pytest)
982 ; ("python-pytest-cov" ,python-pytest-cov)
983 ; ("python-pytest-cache" ,python-pytest-cache)
984 ; ("python-pytest-flake8" ,python-pytest-flake8)))
985 (home-page "https://github.com/certbot/josepy")
986 (synopsis "JOSE protocol implementation in Python")
987 (description "This package provides a Python implementation of the JOSE
988 protocol (Javascript Object Signing and Encryption).")
989 (license license:asl2.0)))
990
991 (define-public python2-josepy
992 (package-with-python2 python-josepy))
993
994 (define-public python-pycryptodome
995 (package
996 (name "python-pycryptodome")
997 (version "3.9.9")
998 (source
999 (origin
1000 (method url-fetch)
1001 (uri (pypi-uri "pycryptodome" version))
1002 (sha256
1003 (base32
1004 "1i4m74f88qj9ci8rpyzrbk2slmsdj5ipmwdkq6qk24byalm203li"))))
1005 (build-system python-build-system)
1006 (home-page "https://www.pycryptodome.org")
1007 (synopsis "Low-level cryptographic Python library")
1008 (description
1009 "PyCryptodome is a self-contained Python package of low-level
1010 cryptographic primitives. It's not a wrapper to a separate C library like
1011 OpenSSL. To the largest possible extent, algorithms are implemented in pure
1012 Python. Only the pieces that are extremely critical to performance (e.g.,
1013 block ciphers) are implemented as C extensions.
1014
1015 You are expected to have a solid understanding of cryptography and security
1016 engineering to successfully use these primitives. You must also be able to
1017 recognize that some are obsolete (e.g., TDES) or even insecure (RC4).
1018
1019 It provides many enhancements over the last release of PyCrypto (2.6.1):
1020
1021 @itemize
1022 @item Authenticated encryption modes (GCM, CCM, EAX, SIV, OCB)
1023 @item Accelerated AES on Intel platforms via AES-NI
1024 @item First-class support for PyPy
1025 @item Elliptic curves cryptography (NIST P-256 curve only)
1026 @item Better and more compact API (nonce and iv attributes for ciphers,
1027 automatic generation of random nonces and IVs, simplified CTR cipher mode, and
1028 more)
1029 @item SHA-3 (including SHAKE XOFs) and BLAKE2 hash algorithms
1030 @item Salsa20 and ChaCha20 stream ciphers
1031 @item scrypt and HKDF
1032 @item Deterministic (EC)DSA
1033 @item Password-protected PKCS#8 key containers
1034 @item Shamir’s Secret Sharing scheme
1035 @item Random numbers get sourced directly from the OS (and not from a CSPRNG
1036 in userspace)
1037 @item Cleaner RSA and DSA key generation (largely based on FIPS 186-4)
1038 @item Major clean-ups and simplification of the code base
1039 @end itemize
1040
1041 This package provides drop-in compatibility with PyCrypto. It is one of two
1042 PyCryptodome variants, the other being python-pycryptodomex.")
1043 (license (list license:bsd-2
1044 license:public-domain)))) ; code inherited from PyCrypto
1045
1046 (define-public python2-pycryptodome
1047 (package-with-python2 python-pycryptodome))
1048
1049 (define-public python-pycryptodomex
1050 (package (inherit python-pycryptodome)
1051 (name "python-pycryptodomex")
1052 (version (package-version python-pycryptodome))
1053 (source
1054 (origin
1055 (method url-fetch)
1056 (uri (pypi-uri "pycryptodomex" version))
1057 (sha256
1058 (base32 "0lbx4qk3xmwqiidhmkj8qa7bh2lf8bwzg0xjpsh2w5zqjrc7qnvv"))))
1059 (description
1060 "PyCryptodome is a self-contained Python package of low-level
1061 cryptographic primitives. It's not a wrapper to a separate C library like
1062 OpenSSL. To the largest possible extent, algorithms are implemented in pure
1063 Python. Only the pieces that are extremely critical to performance (e.g.,
1064 block ciphers) are implemented as C extensions.
1065
1066 You are expected to have a solid understanding of cryptography and security
1067 engineering to successfully use these primitives. You must also be able to
1068 recognize that some are obsolete (e.g., TDES) or even insecure (RC4).
1069
1070 It provides many enhancements over the last release of PyCrypto (2.6.1):
1071
1072 @itemize
1073 @item Authenticated encryption modes (GCM, CCM, EAX, SIV, OCB)
1074 @item Accelerated AES on Intel platforms via AES-NI
1075 @item First-class support for PyPy
1076 @item Elliptic curves cryptography (NIST P-256 curve only)
1077 @item Better and more compact API (nonce and iv attributes for ciphers,
1078 automatic generation of random nonces and IVs, simplified CTR cipher mode, and
1079 more)
1080 @item SHA-3 (including SHAKE XOFs) and BLAKE2 hash algorithms
1081 @item Salsa20 and ChaCha20 stream ciphers
1082 @item scrypt and HKDF
1083 @item Deterministic (EC)DSA
1084 @item Password-protected PKCS#8 key containers
1085 @item Shamir’s Secret Sharing scheme
1086 @item Random numbers get sourced directly from the OS (and not from a CSPRNG
1087 in userspace)
1088 @item Cleaner RSA and DSA key generation (largely based on FIPS 186-4)
1089 @item Major clean-ups and simplification of the code base
1090 @end itemize
1091
1092 PyCryptodomex is the stand-alone version of PyCryptodome that no longer
1093 provides drop-in compatibility with PyCrypto.")))
1094
1095 (define-public python-m2crypto
1096 (package
1097 (name "python-m2crypto")
1098 (version "0.35.2")
1099 (source
1100 (origin
1101 (method url-fetch)
1102 (uri (pypi-uri "M2Crypto" version))
1103 (sha256
1104 (base32 "09yirf3w77w6f49q6nxhrjm9c3a4y9s30s1k09chqrw8zdgx8sjc"))))
1105 (build-system python-build-system)
1106 (inputs `(("openssl" ,openssl)))
1107 (native-inputs `(("swig" ,swig)))
1108 (home-page "https://gitlab.com/m2crypto/m2crypto")
1109 (synopsis "Python crypto and TLS toolkit")
1110 (description "@code{M2Crypto} is a complete Python wrapper for OpenSSL
1111 featuring RSA, DSA, DH, EC, HMACs, message digests, symmetric ciphers
1112 (including AES); TLS functionality to implement clients and servers; HTTPS
1113 extensions to Python's httplib, urllib, and xmlrpclib; unforgeable HMAC'ing
1114 AuthCookies for web session management; FTP/TLS client and server; S/MIME;
1115 M2Crypto can also be used to provide TLS for Twisted. Smartcards supported
1116 through the Engine interface.")
1117 (properties `((python2-variant . ,(delay python2-m2crypto))))
1118 (license license:expat)))
1119
1120 (define-public python2-m2crypto
1121 (let ((m2crypto (package-with-python2
1122 (strip-python2-variant python-m2crypto))))
1123 (package (inherit m2crypto)
1124 (propagated-inputs
1125 `(("python2-typing" ,python2-typing))))))
1126
1127 (define-public python-pykeepass
1128 (package
1129 (name "python-pykeepass")
1130 (version "3.2.1")
1131 (source
1132 (origin
1133 (method git-fetch)
1134 ;; Source tarball on PyPI doesn't include tests.
1135 (uri (git-reference
1136 (url "https://github.com/libkeepass/pykeepass")
1137 (commit version)))
1138 (file-name (git-file-name name version))
1139 (sha256
1140 (base32 "1symxf4ahylynihnp9z4z3lh2vy65ipvg8s4hjrnn936hcaaxghk"))))
1141 (build-system python-build-system)
1142 (arguments
1143 `(#:phases
1144 (modify-phases %standard-phases
1145 (add-after 'unpack 'make-kdbx-writable
1146 ;; Tests have to write to the .kdbx files in the test directory.
1147 (lambda _
1148 (with-directory-excursion "tests"
1149 (for-each make-file-writable (find-files "."))
1150 #t)))
1151 (add-before 'build 'patch-requirements
1152 (lambda _
1153 ;; Update requirements from dependency==version
1154 ;; to dependency>=version.
1155 (substitute* "setup.py"
1156 (("==") ">="))
1157 #t)))))
1158 (propagated-inputs
1159 `(("python-argon2-cffi" ,python-argon2-cffi)
1160 ("python-construct" ,python-construct)
1161 ("python-dateutil" ,python-dateutil)
1162 ("python-future" ,python-future)
1163 ("python-lxml" ,python-lxml)
1164 ("python-pycryptodomex" ,python-pycryptodomex)))
1165 (home-page "https://github.com/libkeepass/pykeepass")
1166 (synopsis "Python library to interact with keepass databases")
1167 (description
1168 "This library allows you to write entries to a KeePass database. It
1169 supports KDBX3 and KDBX4.")
1170 ;; There are no copyright headers in the source code. The LICENSE file
1171 ;; indicates GPL3.
1172 (license license:gpl3+)))
1173
1174 (define-public python-pylibscrypt
1175 (package
1176 (name "python-pylibscrypt")
1177 (version "1.7.1")
1178 (source
1179 (origin
1180 (method url-fetch)
1181 (uri (pypi-uri "pylibscrypt" version))
1182 (sha256
1183 (base32
1184 "1b3rgzl6dbzs08vhv41b6y4n5189wv7lr27acxn104hs45745abs"))))
1185 (build-system python-build-system)
1186 (arguments
1187 `(#:phases
1188 (modify-phases %standard-phases
1189 (add-before 'build 'hard-code-path-to-libscrypt
1190 (lambda* (#:key inputs #:allow-other-keys)
1191 (let ((libscrypt (assoc-ref inputs "libscrypt")))
1192 (substitute* "pylibscrypt/pylibscrypt.py"
1193 (("find_library\\('scrypt'\\)")
1194 (string-append "'" libscrypt "/lib/libscrypt.so'")))
1195 #t))))
1196 ;; The library can use various scrypt implementations and tests all of
1197 ;; them. Since we only provide a single implementation, most tests
1198 ;; fail. Simply skip them.
1199 #:tests? #f))
1200 ;; FIXME: Using "libscrypt" is the second best choice. The best one
1201 ;; requires "hashlib.scrypt", provided by Python 3.6+ built with OpenSSL
1202 ;; 1.1+. Use that as soon as Guix provides it.
1203 (inputs
1204 `(("libscrypt" ,libscrypt)))
1205 (home-page "https://github.com/jvarho/pylibscrypt")
1206 (synopsis "Scrypt for Python")
1207 (description "There are a lot of different scrypt modules for Python, but
1208 none of them have everything that I'd like, so here's one more. It uses
1209 @code{libscrypt}.")
1210 (license license:isc)))
1211
1212 (define-public python-libnacl
1213 (package
1214 (name "python-libnacl")
1215 (version "1.7.2")
1216 (source
1217 (origin
1218 (method url-fetch)
1219 (uri (pypi-uri "libnacl" version))
1220 (sha256
1221 (base32
1222 "0srx7i264v4dq9and8y6gpzzhrg8jpxs5iy9ggw4plimfj0rjfdm"))))
1223 (build-system python-build-system)
1224 (arguments
1225 `(#:phases
1226 (modify-phases %standard-phases
1227 (add-after 'unpack 'locate-libsodium
1228 (lambda* (#:key inputs #:allow-other-keys)
1229 (substitute* "libnacl/__init__.py"
1230 (("/usr/local/lib/libsodium.so")
1231 (string-append (assoc-ref inputs "libsodium")
1232 "/lib/libsodium.so")))
1233 #t)))))
1234 (native-inputs
1235 `(("python-pyhamcrest" ,python-pyhamcrest)))
1236 (inputs
1237 `(("libsodium" ,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
1241 functions exposed by @code{NaCl} library via @code{libsodium}. It has
1242 been 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.4.1")
1250 (source
1251 (origin
1252 (method url-fetch)
1253 (uri (pypi-uri "pyotp" version))
1254 (sha256
1255 (base32 "0jsqfmx9i7j8z81r4zazv76xzy1fcq8v9s2r4kvx7ajfndq3z2h3"))))
1256 (build-system python-build-system)
1257 (home-page "https://github.com/pyauth/pyotp")
1258 (synopsis "Python One Time Password Library")
1259 (description
1260 "PyOTP is a Python library for generating and verifying one-time
1261 passwords. It can be used to implement two-factor (2FA) or multi-factor
1262 (MFA) authentication methods in web applications and in other systems that
1263 require users to log in.")
1264 (license license:expat)))
1265
1266 (define-public python-scrypt
1267 (package
1268 (name "python-scrypt")
1269 (version "0.8.7")
1270 (source
1271 (origin
1272 (method url-fetch)
1273 (uri (pypi-uri "scrypt" version))
1274 (sha256
1275 (base32
1276 "0hjk71k3mgnl8siikm9lii9im8kv0rb7inkjzx78rnancra48xxr"))))
1277 (build-system python-build-system)
1278 (inputs
1279 `(("openssl" ,openssl)))
1280 (home-page "https://bitbucket.org/mhallin/py-scrypt")
1281 (synopsis "Bindings for the scrypt key derivation function library")
1282 (description "This is a set of Python bindings for the scrypt key
1283 derivation function.")
1284 (license license:bsd-2)))
1285
1286 (define-public python-service-identity
1287 (package
1288 (name "python-service-identity")
1289 (version "18.1.0")
1290 (source
1291 (origin
1292 (method url-fetch)
1293 (uri (pypi-uri "service_identity" version))
1294 (sha256
1295 (base32
1296 "0b9f5qiqjy8ralzgwjgkhx82h6h8sa7532psmb8mkd65md5aan08"))))
1297 (build-system python-build-system)
1298 (propagated-inputs
1299 `(("python-attrs" ,python-attrs)
1300 ("python-pyasn1" ,python-pyasn1)
1301 ("python-pyasn1-modules" ,python-pyasn1-modules)
1302 ("python-pyopenssl" ,python-pyopenssl)))
1303 (home-page "https://service-identity.readthedocs.io/")
1304 (synopsis "Service identity verification for PyOpenSSL")
1305 (description
1306 "@code{service_identity} aspires to give you all the tools you need
1307 for verifying whether a certificate is valid for the intended purposes.
1308 In the simplest case, this means host name verification. However,
1309 service_identity implements RFC 6125 fully and plans to add other
1310 relevant RFCs too.")
1311 (license license:expat)))
1312
1313 (define-public python2-service-identity
1314 (package-with-python2 python-service-identity))
1315
1316 (define-public python-hkdf
1317 (package
1318 (name "python-hkdf")
1319 (version "0.0.3")
1320 (source
1321 (origin
1322 (method url-fetch)
1323 (uri (pypi-uri "hkdf" version))
1324 (sha256
1325 (base32
1326 "1jhxk5vhxmxxjp3zj526ry521v9inzzl8jqaaf0ma65w6k332ak2"))))
1327 (build-system python-build-system)
1328 (native-inputs
1329 `(("python-nose" ,python-nose)))
1330 (home-page "https://github.com/casebeer/python-hkdf")
1331 (synopsis "HMAC-based Extract-and-Expand Key Derivation Function (HKDF)")
1332 (description "This package provides a Python implementation of the HMAC Key
1333 Derivation function (HKDF) defined in RFC 5869.")
1334 (license license:bsd-2)))
1335
1336 (define-public python-spake2
1337 (package
1338 (name "python-spake2")
1339 (version "0.8")
1340 (source
1341 (origin
1342 (method url-fetch)
1343 (uri (pypi-uri "spake2" version))
1344 (sha256
1345 (base32
1346 "1x16r7lrbklvfzbacb66qv9iiih6liq1y612dqh2chgf555n2yn1"))))
1347 (build-system python-build-system)
1348 (propagated-inputs
1349 `(("python-hkdf" ,python-hkdf)))
1350 (home-page "https://github.com/warner/python-spake2")
1351 (synopsis "SPAKE2 password-authenticated key exchange in Python")
1352 (description "This package provides a Python implementation of the SPAKE2
1353 Password-Authenticated Key Exchange algorithm.")
1354 (license license:expat)))
1355
1356 (define-public python-txtorcon
1357 (package
1358 (name "python-txtorcon")
1359 (version "19.0.0")
1360 (source
1361 (origin
1362 (method url-fetch)
1363 (uri (pypi-uri "txtorcon" version))
1364 (sha256
1365 (base32
1366 "0fxzhsc62bhmr730vj9pzallmw56gz6iykvl28a5agrycm0bfc9p"))))
1367 (build-system python-build-system)
1368 (arguments
1369 ;; The tests fail immediately due to a missing file. Reported upstream:
1370 ;; <https://github.com/meejah/txtorcon/issues/330>
1371 `(#:tests? #f))
1372 (propagated-inputs
1373 `(("python-automat" ,python-automat)
1374 ("python-idna" ,python-idna)
1375 ("python-incremental" ,python-incremental)
1376 ("python-service-identity" ,python-service-identity)
1377 ("python-twisted" ,python-twisted)
1378 ("python-zope-interface" ,python-zope-interface)))
1379 (home-page "https://github.com/meejah/txtorcon")
1380 (synopsis "Twisted-based Tor controller client")
1381 (description "This package provides a Twisted-based Tor controller client,
1382 with state-tracking and configuration abstractions.")
1383 (license license:expat)))
1384
1385 (define-public python-keyutils
1386 (package
1387 (name "python-keyutils")
1388 (version "0.6")
1389 (source
1390 (origin
1391 (method url-fetch)
1392 (uri (pypi-uri "keyutils" version))
1393 (sha256
1394 (base32
1395 "0lipygpzhwzzsq2k5imb1jgkmj8y4khxdwhzadjs3bd56g6bmkx9"))))
1396 (build-system python-build-system)
1397 (native-inputs
1398 `(("python-pytest" ,python-pytest)
1399 ("python-pytest-runner" ,python-pytest-runner)))
1400 (inputs
1401 `(("keyutils" ,keyutils)))
1402 (arguments
1403 '(#:tests? #f))
1404 (home-page "https://github.com/sassoftware/python-keyutils")
1405 (synopsis "Python bindings for keyutils")
1406 (description
1407 "This is a set of python bindings for keyutils, a key management suite
1408 that leverages the infrastructure provided by the Linux kernel for safely
1409 storing and retrieving sensitive information in your programs.")
1410 (license license:asl2.0)))
1411
1412 (define-public python-mcuboot-imgtool
1413 (package
1414 (name "python-mcuboot-imgtool")
1415 (version "1.4.0")
1416 (source
1417 (origin
1418 (method git-fetch)
1419 (uri (git-reference
1420 (url "https://github.com/JuulLabs-OSS/mcuboot")
1421 (commit (string-append "v" version))))
1422 (file-name (git-file-name name version))
1423 (sha256
1424 (base32
1425 "1m1csyvzq4jx81zg635ssy1n7sc0z539z0myh872ll3nwqx7wa0q"))))
1426 (build-system python-build-system)
1427 (arguments
1428 `(#:phases
1429 (modify-phases %standard-phases
1430 (add-after 'unpack 'fix-broken-test
1431 (lambda _
1432 (substitute* "scripts/imgtool/keys/ed25519_test.py"
1433 (("raw_sign") "sign_digest"))
1434 #t))
1435 (add-before 'build 'change-directory
1436 (lambda _
1437 (chdir "scripts")
1438 #t)))))
1439 (propagated-inputs
1440 `(("python-click" ,python-click)
1441 ("python-intelhex" ,python-intelhex)
1442 ("python-cryptography" ,python-cryptography)))
1443 (home-page "https://mcuboot.com")
1444 (synopsis "Tool to securely sign firmware images for booting by MCUboot")
1445 (description "MCUboot is a secure bootloader for 32-bit MCUs. This
1446 package provides a tool to securely sign firmware images for booting by
1447 MCUboot.")
1448 (license license:expat)))
1449
1450 (define-public python-ntlm-auth
1451 (package
1452 (name "python-ntlm-auth")
1453 (version "1.4.0")
1454 (source
1455 (origin
1456 (method url-fetch)
1457 (uri (pypi-uri "ntlm-auth" version))
1458 (sha256
1459 (base32
1460 "16mavidki4ma5ip8srqalr19gz4f5yn3cnmmgps1fmgfr24j63rm"))))
1461 (build-system python-build-system)
1462 (propagated-inputs
1463 `(("python-cryptography" ,python-cryptography)))
1464 (home-page "https://github.com/jborean93/ntlm-auth")
1465 (synopsis
1466 "Calculates NTLM Authentication codes")
1467 (description
1468 "This library handles the low-level details of NTLM authentication for
1469 use in authenticating with a service that uses NTLM. It will create and parse
1470 the 3 different message types in the order required and produce a base64
1471 encoded value that can be attached to the HTTP header.
1472
1473 The goal of this library is to offer full NTLM support including signing and
1474 sealing of messages as well as supporting MIC for message integrity and the
1475 ability to customise and set limits on the messages sent. Please see Features
1476 and Backlog for a list of what is and is not currently supported.")
1477 (license license:expat)))
1478
1479 (define-public python-secretstorage
1480 (package
1481 (name "python-secretstorage")
1482 (version "3.1.2")
1483 (source
1484 (origin
1485 (method url-fetch)
1486 (uri (pypi-uri "SecretStorage" version))
1487 (sha256
1488 (base32
1489 "1xmzr0j3066s220bss4nkgqbiwb5k4kkp2rkpqlqwjb5kfc8mnhm"))))
1490 (build-system python-build-system)
1491 (arguments
1492 '(#:tests? #f)) ; Tests require a running dbus service.
1493 (propagated-inputs
1494 `(("python-cryptography" ,python-cryptography)
1495 ("python-jeepney" ,python-jeepney)))
1496 (home-page "https://github.com/mitya57/secretstorage")
1497 (synopsis "Python bindings to FreeDesktop.org Secret Service API")
1498 (description
1499 "@code{python-secretstorage} provides a way for securely storing passwords
1500 and other secrets. It uses D-Bus Secret Service API that is supported by GNOME
1501 Keyring (since version 2.30) and KSecretsService. SecretStorage supports most
1502 of the functions provided by Secret Service, including creating and deleting
1503 items and collections, editing items, locking and unlocking collections
1504 (asynchronous unlocking is also supported).")
1505 (license license:bsd-3)))
1506
1507 (define-public python-trustme
1508 (package
1509 (name "python-trustme")
1510 (version "0.6.0")
1511 (source
1512 (origin
1513 (method url-fetch)
1514 (uri (pypi-uri "trustme" version))
1515 (sha256
1516 (base32 "0v3vr5z6apnfmklf07m45kv5kaqvm6hxrkaqywch57bjd2siiywx"))))
1517 (build-system python-build-system)
1518 (arguments
1519 `(#:phases
1520 (modify-phases %standard-phases
1521 (replace 'check
1522 (lambda* (#:key inputs outputs #:allow-other-keys)
1523 (add-installed-pythonpath inputs outputs)
1524 (invoke "pytest" "-vv"))))))
1525 (native-inputs
1526 `(("python-more-itertools" ,python-more-itertools)
1527 ("python-pyopenssl" ,python-pyopenssl)
1528 ("python-pytest" ,python-pytest)
1529 ("python-pytest-cov" ,python-pytest-cov)
1530 ("python-service-identity" ,python-service-identity)
1531 ("python-zipp" ,python-zipp)))
1532 (propagated-inputs
1533 `(("python-cryptography" ,python-cryptography)))
1534 (home-page "https://github.com/python-trio/trustme")
1535 (synopsis "Fake a certificate authority for tests")
1536 (description
1537 "@code{trustme} is a tiny Python package that does one thing: it gives you
1538 a fake certificate authority (CA) that you can use to generate fake TLS certs to
1539 use in your tests.")
1540 ;; Either license applies.
1541 (license (list license:expat license:asl2.0))))
1542
1543 (define-public python-certipy
1544 (package
1545 (name "python-certipy")
1546 (version "0.1.3")
1547 (source
1548 (origin
1549 (method url-fetch)
1550 (uri (pypi-uri "certipy" version))
1551 (sha256
1552 (base32
1553 "0n980gqpzh0fm58h3i4mi2i10wgj606lscm1r5sk60vbf6vh8mv9"))))
1554 (build-system python-build-system)
1555 (propagated-inputs
1556 `(("python-pyopenssl" ,python-pyopenssl)))
1557 (native-inputs
1558 `(("python-pytest" ,python-pytest)))
1559 (home-page "https://github.com/LLNL/certipy")
1560 (synopsis "Utility to create and sign CAs and certificates")
1561 (description
1562 "Certipy was made to simplify the certificate creation process. To that
1563 end, certipy exposes methods for creating and managing certificate authorities,
1564 certificates, signing and building trust bundles.")
1565 (license license:bsd-3)))
1566
1567 (define-public python-jeepney
1568 (package
1569 (name "python-jeepney")
1570 (version "0.4.3")
1571 (source
1572 (origin
1573 (method url-fetch)
1574 (uri (pypi-uri "jeepney" version))
1575 (sha256
1576 (base32 "0vp3p1lqhqk2kd3254q5sxr50znmm2hmysc8a7g0fr1brihvhy9l"))))
1577 (build-system python-build-system)
1578 (native-inputs
1579 `(("python-testpath" ,python-testpath)
1580 ("python-tornado" ,python-tornado)
1581 ("python-pytest" ,python-pytest)))
1582 (home-page "https://gitlab.com/takluyver/jeepney")
1583 (synopsis "Low-level, pure Python DBus protocol wrapper")
1584 (description
1585 "This is a low-level, pure Python DBus protocol client. It has an
1586 I/O-free core, and integration modules for different event loops.")
1587 (license license:expat)))
1588
1589 (define-public python-argon2-cffi
1590 (package
1591 (name "python-argon2-cffi")
1592 (version "20.1.0")
1593 (source
1594 (origin
1595 (method url-fetch)
1596 (uri (pypi-uri "argon2-cffi" version))
1597 (sha256
1598 (base32
1599 "0zgr4mnnm0p4i99023safb0qb8cgvl202nly1rvylk2b7qnrn0nq"))
1600 (modules '((guix build utils)))
1601 (snippet '(begin (delete-file-recursively "extras") #t))))
1602 (build-system python-build-system)
1603 (arguments
1604 '(#:phases
1605 (modify-phases %standard-phases
1606 (replace 'build
1607 (lambda _
1608 (setenv "ARGON2_CFFI_USE_SYSTEM" "1")
1609 (invoke "python" "setup.py" "build")))
1610 (replace 'check
1611 (lambda* (#:key inputs outputs #:allow-other-keys)
1612 (add-installed-pythonpath inputs outputs)
1613 (invoke "pytest")
1614 (invoke "python" "-m" "argon2" "--help")
1615 ;; see tox.ini
1616 (invoke "python" "-m" "argon2" "-n" "1" "-t" "1" "-m" "8" "-p" "1"))))))
1617 (propagated-inputs
1618 `(("python-cffi" ,python-cffi)
1619 ("python-six" ,python-six)))
1620 (inputs `(("argon2" ,argon2)))
1621 (native-inputs
1622 `(("python-hypothesis" ,python-hypothesis)
1623 ("python-pytest" ,python-pytest)))
1624 (home-page "https://argon2-cffi.readthedocs.io/")
1625 (synopsis "Secure Password Hashes for Python")
1626 (description
1627 "Argon2 is a secure password hashing algorithm. It is designed to have
1628 both a configurable runtime as well as memory consumption. This means that you
1629 can decide how long it takes to hash a password and how much memory is required.")
1630 (license license:expat)))
1631
1632 (define-public python-privy
1633 (package
1634 (name "python-privy")
1635 (version "6.0.0")
1636 (source
1637 (origin
1638 (method git-fetch)
1639 (uri (git-reference
1640 ;; Releases are untagged
1641 (url "https://github.com/ofek/privy")
1642 (commit "2838db3df239797c71bddacc48a4c49a83f35747")))
1643 (file-name (git-file-name name version))
1644 (sha256
1645 (base32
1646 "1m32dh5fqc8cy7jyf1z5fs6zvmdkbq5fi98hr609gbl7s0l0y0i9"))))
1647 (build-system python-build-system)
1648 (arguments
1649 '(#:phases
1650 (modify-phases %standard-phases
1651 (replace 'check
1652 (lambda _
1653 (invoke "python" "-m" "pytest"))))))
1654 (native-inputs
1655 `(("python-pytest" ,python-pytest)))
1656 (propagated-inputs
1657 `(("python-argon2-cffi" ,python-argon2-cffi)
1658 ("python-cryptography" ,python-cryptography)))
1659 (home-page "https://www.dropbox.com/developers")
1660 (synopsis "Library to password-protect your data")
1661 (description
1662 "Privy is a small and fast utility for password-protecting secret
1663 data such as API keys, cryptocurrency wallets, or seeds for digital
1664 signatures.")
1665 (license (list license:expat license:asl2.0)))) ; dual licensed
1666
1667 (define-public python-pgpy
1668 (package
1669 (name "python-pgpy")
1670 (version "0.5.3")
1671 (source
1672 (origin
1673 (method url-fetch)
1674 (uri (pypi-uri "PGPy" version))
1675 (sha256
1676 (base32 "11rrq15gmn6qbahli7czflfcngjl7zyybjlvk732my6axnf2d754"))))
1677 (build-system python-build-system)
1678 (arguments
1679 `(#:phases
1680 (modify-phases %standard-phases
1681 (replace 'check
1682 (lambda* (#:key tests? #:allow-other-keys)
1683 (when tests?
1684 (invoke "pytest")))))))
1685 (native-inputs
1686 `(("python-cryptography" ,python-cryptography)
1687 ("python-pyasn1" ,python-pyasn1)
1688 ("python-pytest" ,python-pytest)
1689 ("python-singledispatch" ,python-singledispatch)
1690 ("python-six" ,python-six)
1691 ("python-wheel" ,python-wheel)))
1692 (home-page "https://github.com/SecurityInnovation/PGPy")
1693 (synopsis "Python implementation of OpenPGP")
1694 (description
1695 "Currently, PGPy can load keys and signatures of all kinds in both ASCII
1696 armored and binary formats.
1697
1698 It can create and verify RSA, DSA, and ECDSA signatures, at the moment. It
1699 can also encrypt and decrypt messages using RSA and ECDH.")
1700 (license license:bsd-3)))
1701
1702 (define-public python-sop
1703 (package
1704 (name "python-sop")
1705 (version "0.2.0")
1706 (source
1707 (origin
1708 (method url-fetch)
1709 (uri (pypi-uri "sop" version))
1710 (sha256
1711 (base32
1712 "0gljyjsdn6hdmwlwwb5g5s0c031p6izamvfxp0d39x60af8k5jyf"))))
1713 (build-system python-build-system)
1714 (arguments
1715 '(#:tests? #f)) ; There are no tests, and unittest throws an error trying
1716 ; to find some:
1717 ; TypeError: don't know how to make test from: 0.2.0
1718 (home-page "https://gitlab.com/dkg/python-sop")
1719 (synopsis "Stateless OpenPGP Command-Line Interface")
1720 (description
1721 "The Stateless OpenPGP Command-Line Interface (or sop) is a
1722 specification that encourages OpenPGP implementors to provide a common,
1723 relatively simple command-line API for purposes of object security.
1724
1725 This Python module helps implementers build such a CLI from any implementation
1726 accessible to the Python interpreter.
1727
1728 It does not provide such an implementation itself -- this is just the
1729 scaffolding for the command line, which should make it relatively easy to
1730 supply a handful of python functions as methods to a class.")
1731 (license license:expat))) ; MIT license