Merge branch 'master' into staging
[jackhill/guix/guix.git] / gnu / packages / python-crypto.scm
CommitLineData
cc6f4912
LC
1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
263ea4eb 3;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
0a90c789 4;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <leo@famulari.name>
55e51b66 5;;; Copyright © 2016, 2017, 2020 Marius Bakke <mbakke@fastmail.com>
cc6f4912
LC
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>
ceb5b11b 11;;; Copyright © 2016, 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
3c986a7d 12;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
cc6f4912 13;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
c6e33df9 14;;; Copyright © 2015, 2016, 2017, 2019 Ricardo Wurmus <rekado@elephly.net>
cc6f4912
LC
15;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org>
16;;; Copyright © 2016, 2017 Arun Isaac <arunisaac@systemreboot.net>
17;;; Copyright © 2017 Carlo Zancanaro <carlo@zancanaro.id.au>
2f691218 18;;; Copyright © 2018 Tomáš Čech <sleep_walker@gnu.org>
cef6dc64 19;;; Copyright © 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
e64088f0 20;;; Copyright © 2018 Vagrant Cascadian <vagrant@debian.org>
8afe166d 21;;; Copyright © 2018 Nam Nguyen <namn@berkeley.edu>
93953ec7 22;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
1f15cbc8 23;;; Copyright © 2019 Clément Lassieur <clement@lassieur.org>
f8dcdf2b 24;;; Copyright © 2020 Alexandros Theodotou <alex@zrythm.org>
cc6f4912
LC
25;;;
26;;; This file is part of GNU Guix.
27;;;
28;;; GNU Guix is free software; you can redistribute it and/or modify it
29;;; under the terms of the GNU General Public License as published by
30;;; the Free Software Foundation; either version 3 of the License, or (at
31;;; your option) any later version.
32;;;
33;;; GNU Guix is distributed in the hope that it will be useful, but
34;;; WITHOUT ANY WARRANTY; without even the implied warranty of
35;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
36;;; GNU General Public License for more details.
37;;;
38;;; You should have received a copy of the GNU General Public License
39;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
40
41(define-module (gnu packages python-crypto)
42 #:use-module (guix packages)
43 #:use-module (guix download)
44 #:use-module (guix git-download)
45 #:use-module (guix build-system python)
46 #:use-module (gnu packages)
ac257f12 47 #:use-module (gnu packages check)
b95c17c5 48 #:use-module (gnu packages crypto)
f8dcdf2b 49 #:use-module (gnu packages kerberos)
cc6f4912
LC
50 #:use-module (gnu packages libffi)
51 #:use-module (gnu packages multiprecision)
08310637 52 #:use-module (gnu packages password-utils)
cc6f4912
LC
53 #:use-module (gnu packages protobuf)
54 #:use-module (gnu packages python)
6fedf6f2 55 #:use-module (gnu packages python-check)
cb91f6ae 56 #:use-module (gnu packages python-web)
44d10b1f 57 #:use-module (gnu packages python-xyz)
33dc54b0 58 #:use-module (gnu packages time)
cc6f4912
LC
59 #:use-module (gnu packages tls)
60 #:use-module ((guix licenses) #:prefix license:)
61 #:use-module (srfi srfi-1))
62
cef6dc64
NG
63(define-public python-base58
64 (package
65 (name "python-base58")
ceb5b11b 66 (version "1.0.3")
cef6dc64
NG
67 (source
68 (origin
69 (method url-fetch)
70 (uri (pypi-uri "base58" version))
71 (sha256
72 (base32
ceb5b11b 73 "0q1yr0n5jaf17xq98m7dma6z4rh8p19ch55l1s09gi3rk5ckqycs"))))
cef6dc64
NG
74 (build-system python-build-system)
75 (native-inputs
76 `(("python-pyhamcrest" ,python-pyhamcrest)))
77 (home-page "https://github.com/keis/base58")
78 (synopsis "Base58 and Base58Check implementation")
79 (description "Base58 and Base58Check implementation compatible
80with what is used by the Bitcoin network.")
81 (license license:expat)))
82
7c16af46
MB
83(define-public python-bcrypt
84 (package
85 (name "python-bcrypt")
b5cb4624 86 (version "3.1.7")
7c16af46
MB
87 (source
88 (origin
89 (method url-fetch)
90 (uri (pypi-uri "bcrypt" version))
91 (sha256
b5cb4624 92 (base32 "0hhywhxx301cxivgxrpslrangbfpccc8y83qbwn1f57cab3nj00b"))))
7c16af46
MB
93 (build-system python-build-system)
94 (native-inputs
95 `(("python-pycparser" ,python-pycparser)
96 ("python-pytest" ,python-pytest)))
97 (propagated-inputs
98 `(("python-cffi" ,python-cffi)
99 ("python-six" ,python-six)))
100 (home-page "https://github.com/pyca/bcrypt/")
101 (synopsis
102 "Modern password hashing library")
103 (description
104 "Bcrypt is a Python module which provides a password hashing method based
105on the Blowfish password hashing algorithm, as described in
106@url{http://static.usenix.org/events/usenix99/provos.html,\"A Future-Adaptable
107Password Scheme\"} by Niels Provos and David Mazieres.")
108 (license license:asl2.0)))
109
110(define-public python2-bcrypt
111 (package-with-python2 python-bcrypt))
112
cc6f4912
LC
113(define-public python-passlib
114 (package
115 (name "python-passlib")
aadd107d 116 (version "1.7.2")
cc6f4912
LC
117 (source
118 (origin
119 (method url-fetch)
120 (uri (pypi-uri "passlib" version))
121 (sha256
aadd107d 122 (base32 "1a5ngap7kq0b4azq8nlfg6xg5bcl1i0v1sbynhmbr631jgpnqrld"))))
cc6f4912
LC
123 (build-system python-build-system)
124 (native-inputs
125 `(("python-nose" ,python-nose)))
126 (propagated-inputs
127 `(("python-py-bcrypt" ,python-py-bcrypt)))
128 (arguments
129 `(#:phases
130 (modify-phases %standard-phases
131 (add-before 'check 'set-PYTHON_EGG_CACHE
132 ;; some tests require access to "$HOME/.cython"
133 (lambda* _ (setenv "PYTHON_EGG_CACHE" "/tmp") #t)))))
134 (home-page "https://bitbucket.org/ecollins/passlib")
aadd107d 135 (synopsis "Comprehensive password hashing framework")
cc6f4912
LC
136 (description
137 "Passlib is a password hashing library for Python 2 & 3, which provides
138cross-platform implementations of over 30 password hashing algorithms, as well
139as a framework for managing existing password hashes. It's designed to be
140useful for a wide range of tasks, from verifying a hash found in /etc/shadow,
141to providing full-strength password hashing for multi-user application.")
142 (license license:bsd-3)))
143
144(define-public python2-passlib
145 (package-with-python2 python-passlib))
146
147(define-public python-py-bcrypt
148 (package
149 (name "python-py-bcrypt")
150 (version "0.4")
151 (source
152 (origin
153 (method url-fetch)
27864e7c 154 (uri (pypi-uri "py-bcrypt" version))
cc6f4912
LC
155 (sha256
156 (base32
157 "0y6smdggwi5s72v6p1nn53dg6w05hna3d264cq6kas0lap73p8az"))))
158 (build-system python-build-system)
159 (home-page "https://code.google.com/p/py-bcrypt")
160 (synopsis
161 "Bcrypt password hashing and key derivation")
162 (description
163 "A python wrapper of OpenBSD's Blowfish password hashing code. This
164system hashes passwords using a version of Bruce Schneier's Blowfish block
165cipher with modifications designed to raise the cost of off-line password
166cracking and frustrate fast hardware implementation. The computation cost of
3defa90d 167the algorithm is parametrised, so it can be increased as computers get faster.
cc6f4912
LC
168The intent is to make a compromise of a password database less likely to
169result in an attacker gaining knowledge of the plaintext passwords (e.g. using
170John the Ripper).")
171 ;; "sha2.c" is under BSD-3;
172 ;; "blowfish.c" and "bcrypt.c" are under BSD-4;
173 ;; the rest is under ISC.
174 (license (list license:isc license:bsd-3 license:bsd-4))))
175
176(define-public python2-py-bcrypt
177 (package-with-python2 python-py-bcrypt))
178
e64088f0
VC
179(define-public python-pyblake2
180 (package
181 (name "python-pyblake2")
182 (version "1.1.2")
183 (source
184 (origin
185 (method url-fetch)
186 (uri (pypi-uri "pyblake2" version))
187 (sha256
188 (base32
189 "0gz9hgznv5zw4qjq43xa56y0yikimx30gffvibxzm0nv5sq7xk2w"))))
190 (build-system python-build-system)
191 (home-page "https://github.com/dchest/pyblake2")
192 (synopsis "BLAKE2 hash function for Python")
193 (description "BLAKE2 is a cryptographic hash function, which offers
194stronger security while being as fast as MD5 or SHA-1, and comes in two
195flavors: @code{BLAKE2b}, optimized for 64-bit platforms and produces digests
196of any size between 1 and 64 bytes, and @code{BLAKE2s}, optimized for 8- to
19732-bit platforms and produces digests of any size between 1 and 32 bytes.
198
199This package provides a Python interface for BLAKE2.")
200 ;; The COPYING file declares it as public domain, with the option to
201 ;; alternatively use and redistribute it under a variety of permissive
202 ;; licenses. cc0 is explicitly mentioned in setup.py and pyblake2module.c.
203 (license (list license:public-domain license:cc0))))
204
cc6f4912
LC
205(define-public python-paramiko
206 (package
207 (name "python-paramiko")
6569549d 208 (version "2.4.2")
cc6f4912
LC
209 (source
210 (origin
211 (method url-fetch)
212 (uri (pypi-uri "paramiko" version))
213 (sha256
214 (base32
6569549d 215 "1jqgj2gl1pz7bi2aab1r2xq0ml0gskmm9p235cg9y32nydymm5x8"))))
cc6f4912
LC
216 (build-system python-build-system)
217 (arguments
8e84eb68
MB
218 `(;; FIXME: Tests require many unpackaged libraries, see dev-requirements.txt.
219 #:tests? #f))
cc6f4912 220 (propagated-inputs
2fbc38e3
LF
221 `(("python-bcrypt" ,python-bcrypt)
222 ("python-pyasn1" ,python-pyasn1)
223 ("python-pynacl" ,python-pynacl)
cc6f4912 224 ("python-cryptography" ,python-cryptography)))
101ad242 225 (home-page "https://www.paramiko.org/")
cc6f4912
LC
226 (synopsis "SSHv2 protocol library")
227 (description "Paramiko is a python implementation of the SSHv2 protocol,
228providing both client and server functionality. While it leverages a Python C
229extension for low level cryptography (PyCrypto), Paramiko itself is a pure
230Python interface around SSH networking concepts.")
231 (license license:lgpl2.1+)))
232
233(define-public python2-paramiko
234 (package-with-python2 python-paramiko))
235
236(define-public python-ecdsa
237 (package
238 (name "python-ecdsa")
c57b8419 239 (version "0.14.1")
cc6f4912
LC
240 (source
241 (origin
242 (method url-fetch)
86228e56 243 (uri (pypi-uri "ecdsa" version))
cc6f4912 244 (sha256
c57b8419 245 (base32 "13nx5cbfxc0gnax5zwdmp9xc40qd1llk62mv85jyrvqkbw017ik4"))))
cc6f4912 246 (build-system python-build-system)
92fe2513
EF
247 (arguments
248 '(#:phases
249 (modify-phases %standard-phases
250 (replace 'check
251 (lambda _ (invoke "pytest"))))))
c57b8419
EF
252 (propagated-inputs
253 `(("python-six" ,python-six)))
254 (native-inputs
92fe2513
EF
255 `(("openssl" ,openssl)
256 ("python-pytest" ,python-pytest)))
9cd100b6
TGR
257 (home-page "https://github.com/warner/python-ecdsa")
258 (synopsis "ECDSA cryptographic signature library (pure python)")
cc6f4912
LC
259 (description
260 "This is an easy-to-use implementation of ECDSA cryptography (Elliptic
261Curve Digital Signature Algorithm), implemented purely in Python. With this
262library, you can quickly create keypairs (signing key and verifying key), sign
263messages, and verify the signatures. The keys and signatures are very short,
264making them easy to handle and incorporate into other protocols.")
265 (license license:expat)))
266
267(define-public python2-ecdsa
268 (package-with-python2 python-ecdsa))
269
270;;; Pycrypto is abandoned upstream:
271;;;
272;;; https://github.com/dlitz/pycrypto/issues/173
273;;;
274;;; TODO Remove this package from GNU Guix.
275(define-public python-pycrypto
276 (package
277 (name "python-pycrypto")
278 (version "2.6.1")
279 (source
280 (origin
281 (method url-fetch)
282 (uri (pypi-uri "pycrypto" version))
2a2a9878
MB
283 (patches (search-patches "python-pycrypto-CVE-2013-7459.patch"
284 "python-pycrypto-time-clock.patch"))
cc6f4912
LC
285 (sha256
286 (base32
287 "0g0ayql5b9mkjam8hym6zyg6bv77lbh66rv1fyvgqb17kfc1xkpj"))))
288 (build-system python-build-system)
289 (inputs
290 `(("python" ,python)
291 ("gmp" ,gmp)))
292 (arguments
293 `(#:phases
294 (modify-phases %standard-phases
295 (add-before 'build 'set-build-env
296 ;; pycrypto runs an autoconf configure script behind the scenes
297 (lambda _ (setenv "CONFIG_SHELL" (which "bash")) #t)))))
52888f52 298 (home-page "https://www.dlitz.net/software/pycrypto/")
cc6f4912
LC
299 (synopsis "Cryptographic modules for Python")
300 (description
301 "Pycrypto is a collection of both secure hash functions (such as SHA256
302and RIPEMD160), and various encryption algorithms (AES, DES, RSA, ElGamal,
303etc.). The package is structured to make adding new modules easy.")
304 (license license:public-domain)))
305
306(define-public python2-pycrypto
307 (let ((pycrypto (package-with-python2 python-pycrypto)))
308 (package (inherit pycrypto)
309 (inputs
310 `(("python" ,python-2)
311 ,@(alist-delete
312 "python"
313 (package-inputs pycrypto)))))))
314
f8dcdf2b
AT
315(define-public python-kerberos
316 (package
317 (name "python-kerberos")
318 (version "1.3.0")
319 (source
320 (origin
321 (method url-fetch)
322 (uri (pypi-uri "kerberos" version))
323 (sha256
324 (base32
325 "19663qxmma0i8bfbjc2iwy5hgq0g4pfb75r023v5dps68zfvffgh"))))
326 (build-system python-build-system)
327 (inputs
328 `(("mit-krb5" ,mit-krb5)))
329 (home-page "https://github.com/apple/ccs-pykerberos")
330 (synopsis
331 "Python Kerberos library used by CalendarServer")
332 (description
333 "This Python package is a high-level wrapper for Kerberos (GSSAPI)
334operations. The goal is to avoid having to build a module that wraps the
335entire Kerberos.framework, and instead offer a limited set of functions that
336do what is needed for client/server Kerberos authentication based on
337<http://www.ietf.org/rfc/rfc4559.txt>.")
338 (license license:asl2.0)))
339
cc6f4912
LC
340(define-public python-keyring
341 (package
342 (name "python-keyring")
6fedf6f2 343 (version "21.0.0")
cc6f4912
LC
344 (source
345 (origin
346 (method url-fetch)
347 (uri (pypi-uri "keyring" version))
348 (sha256
349 (base32
6fedf6f2
EF
350 "1k0w3yh3fz0qp0cvkxdiinq9jzbrnc6bd88qpjz34x3cgcr94psz"))
351 (modules '((guix build utils)))
352 (snippet
353 ;; https://github.com/jaraco/keyring/issues/414
354 '(begin (substitute* "tests/test_packaging.py"
355 (("ep, =") "(ep,) =")) #t))))
cc6f4912 356 (build-system python-build-system)
6fedf6f2
EF
357 (arguments
358 `(#:phases
359 (modify-phases %standard-phases
360 (replace 'check
361 (lambda _
362 ;; Not clear why this test fails.
363 (delete-file "tests/test_packaging.py")
364 (substitute* "pytest.ini"
365 (("--black ") ""))
366 (invoke "pytest"))))))
cc6f4912 367 (native-inputs
770b1d65 368 `(("python-pytest" ,python-pytest)
6fedf6f2
EF
369 ("python-pytest-checkdocs" ,python-pytest-checkdocs)
370 ("python-pytest-cov" ,python-pytest-cov)
371 ("python-pytest-flake8" ,python-pytest-flake8)
770b1d65 372 ("python-setuptools-scm" ,python-setuptools-scm)))
cc6f4912 373 (propagated-inputs
6fedf6f2
EF
374 `(("python-importlib-metadata" ,python-importlib-metadata)
375 ("python-secretstorage" ,python-secretstorage)))
cc6f4912
LC
376 (home-page "https://github.com/jaraco/keyring")
377 (synopsis "Store and access your passwords safely")
378 (description
379 "The Python keyring lib provides a easy way to access the system keyring
380service from python. It can be used in any application that needs safe
381password storage.")
382 ;; "MIT" and PSF dual license
6fedf6f2 383 (properties `((python2-variant . ,(delay python2-keyring))))
cc6f4912
LC
384 (license license:x11)))
385
386(define-public python2-keyring
6fedf6f2
EF
387 (let ((keyring (package-with-python2
388 (strip-python2-variant python-keyring))))
389 (package
390 (inherit keyring)
391 (name "python2-keyring")
392 (version "8.7")
393 (source
394 (origin
395 (method url-fetch)
396 (uri (pypi-uri "keyring" version))
397 (sha256
398 (base32
399 "0482rmi2x6p78wl2kz8qzyq21xz1sbbfwnv5x7dggar4vkwxhzfx"))))
400 (arguments
401 `(#:python ,python-2))
402 (native-inputs
403 `(("python2-pytest" ,python2-pytest)
404 ("python2-pytest-runner" ,python2-pytest-runner)
405 ("python2-setuptools-scm" ,python2-setuptools-scm)))
406 (propagated-inputs
407 `(("python2-pycrypto" ,python2-pycrypto))))))
cc6f4912 408
9a684b40
EF
409(define-public python-keyrings.alt
410 (package
411 (name "python-keyrings.alt")
412 (version "3.4.0")
413 (source
414 (origin
415 (method url-fetch)
416 (uri (pypi-uri "keyrings.alt" version))
417 (sha256
418 (base32
419 "0gdjdqpq2hf770p6iwi891mil0vbsdhvy88x0v8b2w4y4b28lcli"))
420 (modules '((guix build utils)))
421 (snippet
422 '(begin
423 (delete-file "keyrings/alt/_win_crypto.py")
424 ;; Rely on python-keyring>20:
425 ;; https://github.com/jaraco/keyrings.alt/issues/33
426 (substitute* '("keyrings/alt/tests/test_Gnome.py"
427 "keyrings/alt/tests/test_Google.py"
428 "keyrings/alt/tests/test_Windows.py"
429 "keyrings/alt/tests/test_file.py"
430 "keyrings/alt/tests/test_pyfs.py")
431 (("keyring.tests.test_backend") "keyring.testing.backend")
432 (("keyring.tests.util") "keyring.testing.util"))
433 #t))))
434 (build-system python-build-system)
435 (native-inputs
436 `(("python-keyring" ,python-keyring)
437 ("python-pytest" ,python-pytest)
438 ("python-setuptools-scm" ,python-setuptools-scm)))
439 (home-page "https://github.com/jaraco/keyrings.alt")
440 (synopsis "Alternate keyring implementations")
441 (description "Keyrings in this package may have security risks or other
442implications. These backends were extracted from the main keyring project to
443make them available for those who wish to employ them, but are discouraged for
444general production use. Include this module and use its backends at your own
445risk.")
446 (license license:expat)))
447
cc6f4912
LC
448(define-public python-certifi
449 (package
450 (name "python-certifi")
ee3a5e07 451 (version "2020.4.5.1")
cc6f4912
LC
452 (source (origin
453 (method url-fetch)
454 (uri (pypi-uri "certifi" version))
455 (sha256
456 (base32
ee3a5e07 457 "06b5gfs7wmmipln8f3z928d2mmx2j4b3x7pnqmj6cvmyfh8v7z2i"))))
cc6f4912 458 (build-system python-build-system)
ee3a5e07 459 (arguments '(#:tests? #f)) ;no tests
cc6f4912
LC
460 (home-page "https://certifi.io/")
461 (synopsis "Python CA certificate bundle")
462 (description
463 "Certifi is a Python library that contains a CA certificate bundle, which
464is used by the Requests library to verify HTTPS requests.")
465 (license license:asl2.0)))
466
467(define-public python2-certifi
468 (package-with-python2 python-certifi))
469
470(define-public python-cryptography-vectors
471 (package
472 (name "python-cryptography-vectors")
6144e2d7 473 (version "2.9.2")
cc6f4912
LC
474 (source
475 (origin
476 (method url-fetch)
477 (uri (pypi-uri "cryptography_vectors" version))
478 (sha256
479 (base32
6144e2d7 480 "1d4iykcv7cn9j399hczlxm5pzxmqy6d80h3j16dkjwlmv3293b4r"))))
cc6f4912
LC
481 (build-system python-build-system)
482 (home-page "https://github.com/pyca/cryptography")
483 (synopsis "Test vectors for the cryptography package")
484 (description
485 "This package contains test vectors for the cryptography package.")
486 ;; Distributed under either BSD-3 or ASL2.0
487 (license (list license:bsd-3 license:asl2.0))))
488
489(define-public python2-cryptography-vectors
490 (package-with-python2 python-cryptography-vectors))
491
492(define-public python-cryptography
493 (package
494 (name "python-cryptography")
6144e2d7 495 (version "2.9.2")
cc6f4912
LC
496 (source
497 (origin
498 (method url-fetch)
499 (uri (pypi-uri "cryptography" version))
500 (sha256
501 (base32
6144e2d7 502 "0af25w5mkd6vwns3r6ai1w5ip9xp0ms9s261zzssbpadzdr05hx0"))))
cc6f4912
LC
503 (build-system python-build-system)
504 (inputs
505 `(("openssl" ,openssl)))
506 (propagated-inputs
507 `(("python-asn1crypto" ,python-asn1crypto)
508 ("python-cffi" ,python-cffi)
509 ("python-six" ,python-six)
510 ("python-idna" ,python-idna)
511 ("python-iso8601" ,python-iso8601)))
512 (native-inputs
513 `(("python-cryptography-vectors" ,python-cryptography-vectors)
514 ("python-hypothesis" ,python-hypothesis)
515 ("python-pretend" ,python-pretend)
516 ("python-pytz" ,python-pytz)
2dd12924 517 ("python-pytest" ,python-pytest)))
cc6f4912
LC
518 (home-page "https://github.com/pyca/cryptography")
519 (synopsis "Cryptographic recipes and primitives for Python")
520 (description
521 "cryptography is a package which provides cryptographic recipes and
522primitives to Python developers. It aims to be the “cryptographic standard
523library” for Python. The package includes both high level recipes, and low
524level interfaces to common cryptographic algorithms such as symmetric ciphers,
525message digests and key derivation functions.")
526 ;; Distributed under either BSD-3 or ASL2.0
527 (license (list license:bsd-3 license:asl2.0))
528 (properties `((python2-variant . ,(delay python2-cryptography))))))
529
530(define-public python2-cryptography
531 (let ((crypto (package-with-python2
532 (strip-python2-variant python-cryptography))))
533 (package (inherit crypto)
534 (propagated-inputs
535 `(("python2-ipaddress" ,python2-ipaddress)
536 ("python2-backport-ssl-match-hostname"
537 ,python2-backport-ssl-match-hostname)
538 ("python2-enum34" ,python2-enum34)
539 ,@(package-propagated-inputs crypto))))))
540
541(define-public python-pyopenssl
542 (package
543 (name "python-pyopenssl")
da1eb6db 544 (version "19.1.0")
cc6f4912
LC
545 (source
546 (origin
547 (method url-fetch)
548 (uri (pypi-uri "pyOpenSSL" version))
549 (sha256
550 (base32
da1eb6db 551 "01wmsq6w0frzbr3zps4ga9kmqjidp2h317jwpq1g9ah24r5lj94s"))))
cc6f4912
LC
552 (build-system python-build-system)
553 (arguments
554 '(#:phases
555 (modify-phases %standard-phases
556 (delete 'check)
557 (add-after 'install 'check
558 (lambda* (#:key inputs outputs #:allow-other-keys)
559 (add-installed-pythonpath inputs outputs)
55e51b66
MB
560 ;; PyOpenSSL runs tests against a certificate with a fixed
561 ;; expiry time. To ensure successful builds in the future,
562 ;; set the time to roughly the release date.
563 (invoke "faketime" "2019-01-01" "py.test" "-v" "-k"
c6e33df9
RW
564 (string-append
565 ;; This test tries to look up certificates from
566 ;; the compiled-in default path in OpenSSL, which
567 ;; does not exist in the build environment.
568 "not test_fallback_default_verify_paths "
569 ;; This test attempts to make a connection to
570 ;; an external web service.
571 "and not test_set_default_verify_paths")))))))
cc6f4912
LC
572 (propagated-inputs
573 `(("python-cryptography" ,python-cryptography)
574 ("python-six" ,python-six)))
575 (inputs
576 `(("openssl" ,openssl)))
577 (native-inputs
55e51b66
MB
578 `(("libfaketime" ,libfaketime)
579 ("python-flaky" ,python-flaky)
cc6f4912 580 ("python-pretend" ,python-pretend)
2dd12924 581 ("python-pytest" ,python-pytest)))
cc6f4912
LC
582 (home-page "https://github.com/pyca/pyopenssl")
583 (synopsis "Python wrapper module around the OpenSSL library")
584 (description
585 "PyOpenSSL is a high-level wrapper around a subset of the OpenSSL
586library.")
587 (license license:asl2.0)))
588
589(define-public python2-pyopenssl
590 (package-with-python2 python-pyopenssl))
591
579b4362
DM
592(define-public python-ed25519
593 (package
594 (name "python-ed25519")
595 (version "1.4")
596 (source
597 (origin
598 (method url-fetch)
599 (uri (pypi-uri "ed25519" version))
600 (sha256
601 (base32
602 "0ahx1nkxa0xis3cw0h5c4fpgv8mq4znkq7kajly33lc3317bk499"))))
603 (build-system python-build-system)
604 (home-page "https://github.com/warner/python-ed25519")
605 (synopsis "Ed25519 public-key signatures")
606 (description "Ed25519 public-key signatures")
607 (license license:expat)))
608
609(define-public python2-ed25519
610 (package-with-python2 python-ed25519))
611
cc6f4912
LC
612(define-public python-axolotl-curve25519
613 (package
614 (name "python-axolotl-curve25519")
615 (version "0.1")
616 (source
617 (origin
618 (method git-fetch)
619 (uri (git-reference
620 (url "https://github.com/tgalal/python-axolotl-curve25519")
621 (commit "e4a9c4de0eae27223200579c58d1f8f6d20637e2")))
622 (file-name (string-append name "-" version "-checkout"))
623 (sha256
624 (base32
625 "0agap5q0hmvf6cwzjqc05kw53pjgf6942pcivpazksmg1vk400ra"))))
626 (build-system python-build-system)
627 (arguments
628 `(;; Prevent creation of the egg. This works around
629 ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=20765
630 #:configure-flags '("--root=/")))
631 (home-page "https://github.com/tgalal/python-axolotl-curve25519")
632 (synopsis "Python wrapper for curve25519 library")
633 (description "This is a python wrapper for the curve25519 library
634with ed25519 signatures. The C code was pulled from
635libaxolotl-android. At the moment this wrapper is meant for use by
636python-axolotl.")
637 (license (list license:gpl3 ; Most files
638 license:bsd-3)))) ; curve/curve25519-donna.c
639
640(define-public python2-axolotl-curve25519
641 (package-with-python2 python-axolotl-curve25519))
642
643(define-public python-axolotl
644 (package
645 (name "python-axolotl")
51f887f3 646 (version "0.1.39")
cc6f4912
LC
647 (source
648 (origin
263ea4eb
EF
649 (method git-fetch)
650 (uri (git-reference
651 (url "https://github.com/tgalal/python-axolotl")
652 (commit version)))
653 (file-name (git-file-name name version))
51f887f3 654 (patches (search-patches "python-axolotl-AES-fix.patch"))
cc6f4912 655 (sha256
263ea4eb 656 (base32 "0xm9qgcwf6fq7rhzfcviwhbzcbj4i7wkxkab2z55fy1x82lya9g6"))))
cc6f4912
LC
657 (build-system python-build-system)
658 (arguments
659 `(#:phases
660 (modify-phases %standard-phases
661 ;; Don't install tests
662 (add-before 'install 'remove-tests
663 (lambda _
664 (for-each delete-file-recursively
665 '("axolotl/tests" "build/lib/axolotl/tests"))
666 #t)))))
667 (propagated-inputs
668 `(("python-axolotl-curve25519" ,python-axolotl-curve25519)
669 ("python-dateutil" ,python-dateutil)
670 ("python-protobuf" ,python-protobuf)
671 ("python-pycrypto" ,python-pycrypto)))
672 (home-page "https://github.com/tgalal/python-axolotl")
673 (synopsis "Python port of libaxolotl-android")
674 (description "This is a python port of libaxolotl-android. This
675is a ratcheting forward secrecy protocol that works in synchronous and
676asynchronous messaging environments.")
677 (license license:gpl3)))
678
679(define-public python2-axolotl
680 (package-with-python2 python-axolotl))
681
682;; SlowAES isn't compatible with Python 3.
683(define-public python2-slowaes
684 (package
685 (name "python2-slowaes")
686 (version "0.1a1")
687 (source
688 (origin
689 (method url-fetch)
690 (uri (pypi-uri "slowaes" version))
691 (sha256
692 (base32
693 "02dzajm83a7lqgxf6r3hgj64wfmcxz8gs4nvgxpvj5n19kjqlrc3"))))
694 (build-system python-build-system)
695 (arguments `(#:python ,python-2))
696 (home-page "http://code.google.com/p/slowaes/")
697 (synopsis "Implementation of AES in Python")
698 (description "This package contains an implementation of AES in Python.
699This implementation is slow (hence the project name) but still useful when
700faster ones are not available.")
701 (license license:asl2.0)))
702
703(define-public python-pyaes
704 (package
705 (name "python-pyaes")
6de86fd5 706 (version "1.6.1")
cc6f4912
LC
707 (source
708 (origin
709 (method url-fetch)
710 (uri (pypi-uri "pyaes" version))
711 (sha256
712 (base32
6de86fd5 713 "13vdaff15k0jyfcss4b4xvfgm8xyv0nrbyw5n1qc7lrqbi0b3h82"))))
cc6f4912
LC
714 (build-system python-build-system)
715 (home-page "https://github.com/ricmoo/pyaes")
716 (synopsis "Implementation of AES in Python")
717 (description "This package contains a pure-Python implementation of the
718AES block cipher algorithm and the common modes of operation (CBC, CFB, CTR,
719ECB and OFB).")
720 (license license:expat)))
721
722(define-public python2-pyaes
723 (package-with-python2 python-pyaes))
b95c17c5
LC
724
725(define-public python-asn1crypto
726 (package
727 (name "python-asn1crypto")
19f2a526 728 (version "0.24.0")
b95c17c5
LC
729 (source
730 (origin
d3b7feb7
EF
731 (method git-fetch)
732 (uri (git-reference
733 (url "https://github.com/wbond/asn1crypto.git")
734 (commit version)))
735 (file-name (git-file-name name version))
b95c17c5
LC
736 (sha256
737 (base32
19f2a526 738 "10lai2cs5mnz3gpaffbw1m7b885ls8328q5wxm35vfmcip1f0xmb"))))
b95c17c5
LC
739 (build-system python-build-system)
740 (home-page "https://github.com/wbond/asn1crypto")
741 (synopsis "ASN.1 parser and serializer in Python")
742 (description "asn1crypto is an ASN.1 parser and serializer with definitions
743for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7,
744PKCS#8, PKCS#12, PKCS#5, X.509 and TSP.")
745 (license license:expat)))
746
747(define-public python2-asn1crypto
748 (package-with-python2 python-asn1crypto))
749
750(define-public python-pynacl
751 (package
752 (name "python-pynacl")
60ed8787 753 (version "1.3.0")
b95c17c5
LC
754 (source
755 (origin
756 (method url-fetch)
757 (uri (pypi-uri "PyNaCl" version))
758 (modules '((guix build utils)))
3a844a98 759 ;; Remove bundled libsodium.
6cbee49d
MW
760 (snippet '(begin (delete-file-recursively "src/libsodium")
761 #t))
b95c17c5
LC
762 (sha256
763 (base32
60ed8787 764 "0330wyvggm19xhmwmz9rrr97lzbv3siwfy50gmax3vvgs7nh0q8c"))))
b95c17c5
LC
765 (build-system python-build-system)
766 (arguments
767 `(#:phases
768 (modify-phases %standard-phases
769 (add-before 'build 'use-system-sodium
770 (lambda _
771 (setenv "SODIUM_INSTALL" "system")
772 #t)))))
773 (native-inputs
6969ad0e
LF
774 `(("python-hypothesis" ,python-hypothesis)
775 ("python-pytest" ,python-pytest)))
b95c17c5
LC
776 (propagated-inputs
777 `(("python-cffi" ,python-cffi)
778 ("python-six" ,python-six)
779 ("libsodium" ,libsodium)))
780 (home-page "https://github.com/pyca/pynacl/")
781 (synopsis "Python bindings to libsodium")
782 (description
783 "PyNaCl is a Python binding to libsodium, which is a fork of the
784Networking and Cryptography library. These libraries have a stated goal
785of improving usability, security and speed.")
786 (license license:asl2.0)))
787
acc6e695
JL
788(define-public python2-pynacl
789 (package-with-python2 python-pynacl))
790
b95c17c5
LC
791(define-public python2-pgpdump
792 (package
793 (name "python2-pgpdump")
794 (version "1.5")
795 (source
796 (origin
797 (method url-fetch)
798 (uri (pypi-uri "pgpdump" version))
799 (sha256
800 (base32
801 "0s4nh8h7qsdj2yf29bspjs1zvxd4lcd11r6g11dp7fppgf2h0iqw"))))
802 (build-system python-build-system)
803
804 ;; Currently fails to build with Python 3.
805 (arguments `(#:python ,python-2))
806
807 (home-page "https://github.com/toofishes/python-pgpdump")
808 (synopsis "Python library for parsing PGP packets")
809 (description
810 "Python-pgpdump is an OpenPGP packet parser based on
811@uref{http://www.mew.org/~kazu/proj/pgpdump/, pgpdump}. It notably supports:
812
813@itemize
814@item signature packets;
815@item public key packets;
816@item secret key packets;
817@item trust, user ID, and user attribute packets;
818@item ASCII-armor decoding and CRC check.
819@end itemize\n")
820 (license license:bsd-3)))
821
822(define-public python2-roca-detect
823 (package
824 (name "python2-roca-detect")
825 (version "1.0.8")
826 (source
827 (origin
828 (method url-fetch)
829 (uri (pypi-uri "roca-detect" version))
830 (sha256
831 (base32
832 "1di4akyw2lf5r8zfwvyhkilz8jv8g4b66rgaqwfabmjwma6gnw27"))))
833 (build-system python-build-system)
834 (native-inputs
835 ;; TODO: apk_parse_ph4, pyjks
836 `(("python2-dateutil" ,python2-dateutil)
837 ("python2-six" ,python2-six)
838 ("python2-cryptography" ,python2-cryptography)
839 ("python2-future" ,python2-future)
840 ("python2-coloredlogs" ,python2-coloredlogs)
841 ("python2-pgpdump" ,python2-pgpdump)))
842 (arguments
843 `(;; Basic testing routine is quite simple and works with Py3
844 ;; but the rest of the code that processes the different
845 ;; key formats and extracts the modulus for inspection is
846 ;; not yet fully py3 ready.
847 #:python ,python-2))
848 (home-page "https://github.com/crocs-muni/roca")
849 (synopsis "ROCA detection tool")
850 (description
851 "This tool is related to the paper entitled @i{Return of the
852Coppersmith’s Attack: Practical Factorization of Widely Used RSA Moduli}. It
853enables you to test public RSA keys for a presence of the described
854vulnerability. Currently the tool supports the following key formats: X.509
855Certificate (DER encoded, PEM encoded), RSA PEM (encoded private key, public
856key), SSH public key, ASC-encoded OpenPGP key, APK Android application, LDIFF
857file, and more.")
858 (license license:gpl3)))
d0d5f726 859
3eca7ff9
EF
860(define-public python-blurhash
861 (package
862 (name "python-blurhash")
863 (version "1.1.4")
864 (source
865 (origin
866 ;; Tests not included in pypi release and releases not tagged in git repo.
867 (method git-fetch)
868 (uri (git-reference
869 (url "https://github.com/halcy/blurhash-python")
870 (commit "22e081ef1c24da1bb5c5eaa2c1d6649724deaef8")))
871 (file-name (git-file-name name version))
872 (sha256
873 (base32
874 "1qq6mhydlp7q3na4kmaq3871h43wh3pyfyxr4b79bia73wjdylxf"))))
875 (build-system python-build-system)
876 (arguments
877 '(#:phases
878 (modify-phases %standard-phases
879 (replace 'check
880 (lambda _
881 (delete-file "setup.cfg")
882 (invoke "pytest"))))))
883 (native-inputs
884 `(("python-numpy" ,python-numpy)
885 ("python-pillow" ,python-pillow)
886 ("python-pytest" ,python-pytest)))
887 (home-page "https://github.com/halcy/blurhash-python")
888 (synopsis
889 "Pure-Python implementation of the blurhash algorithm")
890 (description
891 "Pure-Python implementation of the blurhash algorithm.")
892 (license license:expat)))
893
d0d5f726
DM
894(define-public python-ecpy
895 (package
896 (name "python-ecpy")
37da5813 897 (version "0.10.0")
d0d5f726
DM
898 (source
899 (origin
900 (method url-fetch)
901 (uri (pypi-uri "ECPy" version))
902 (sha256
903 (base32
37da5813 904 "1gc3i5s93zq6x1nkaxkq1dvmsc12vmrw0hns9f5s1hcb78ni52c8"))))
d0d5f726
DM
905 (build-system python-build-system)
906 (propagated-inputs
907 `(("python-future" ,python-future)))
908 (home-page "https://github.com/ubinity/ECPy")
909 (synopsis "Pure Python Elliptic Curve Library")
910 (description "This package provides a Elliptic Curve Library in pure
911Python.")
912 (license license:asl2.0)))
913
914(define-public python2-ecpy
915 (package-with-python2 python-ecpy))
c1927129
LF
916
917(define-public python-josepy
918 (package
919 (name "python-josepy")
205044b9 920 (version "1.1.0")
c1927129
LF
921 (source (origin
922 (method url-fetch)
923 (uri (pypi-uri "josepy" version))
924 (sha256
925 (base32
205044b9 926 "11khz8malzrv375b27jjkv66z6z6khdx1v5mkkr4vq16gp3n4p7v"))))
c1927129
LF
927 (build-system python-build-system)
928 (arguments
205044b9 929 ;; The tests require flake8 >= 3.5, which is not yet packaged.
c1927129
LF
930 '(#:tests? #f))
931 (propagated-inputs
932 `(("python-cryptography" ,python-cryptography)
933 ("python-pyopenssl" ,python-pyopenssl)
934 ("python-six" ,python-six)))
205044b9 935;; TODO Enable when we have flake8 >= 3.5.
c1927129
LF
936; (native-inputs
937; `(("python-coverage" ,python-coverage)
938; ("python-flake8" ,python-flake8)
939; ("python-isort" ,python-isort)
940; ("python-mock" ,python-mock)
205044b9 941; ("python-pytest" ,python-pytest)
c1927129
LF
942; ("python-pytest-cov" ,python-pytest-cov)
943; ("python-pytest-cache" ,python-pytest-cache)
944; ("python-pytest-flake8" ,python-pytest-flake8)))
945 (home-page "https://github.com/certbot/josepy")
946 (synopsis "JOSE protocol implementation in Python")
947 (description "This package provides a Python implementation of the JOSE
948protocol (Javascript Object Signing and Encryption).")
949 (license license:asl2.0)))
950
951(define-public python2-josepy
952 (package-with-python2 python-josepy))
d32456d5
OP
953
954(define-public python-pycryptodome
955 (package
956 (name "python-pycryptodome")
a62887d3 957 (version "3.7.3")
d32456d5
OP
958 (source
959 (origin
960 (method url-fetch)
961 (uri (pypi-uri "pycryptodome" version))
962 (sha256
963 (base32
a62887d3 964 "0dh6ky5ngxayyn5f6n7gdamjl49g3khz6pdx9sdnag1zwi8248hs"))))
d32456d5
OP
965 (build-system python-build-system)
966 (home-page "https://www.pycryptodome.org")
967 (synopsis "Cryptographic library for Python")
968 (description "This package provides a cryptographic library for Python.
969
970It brings the following enhancements with respect to the last official version
971of PyCrypto:
972
973@itemize
974@item Authenticated encryption modes (GCM, CCM, EAX, SIV, OCB)
975@item Accelerated AES on Intel platforms via AES-NI
976@item First class support for PyPy
977@item Elliptic curves cryptography (NIST P-256 curve only)
978@item Better and more compact API (nonce and iv attributes for ciphers,
979automatic generation of random nonces and IVs, simplified CTR cipher mode, and
980more)
981@item SHA-3 (including SHAKE XOFs) and BLAKE2 hash algorithms
982@item Salsa20 and ChaCha20 stream ciphers
983@item scrypt and HKDF
984@item Deterministic (EC)DSA
985@item Password-protected PKCS#8 key containers
986@item Shamir’s Secret Sharing scheme
987@item Random numbers get sourced directly from the OS (and not from a CSPRNG
988in userspace)
989@item Cleaner RSA and DSA key generation (largely based on FIPS 186-4)
990@item Major clean ups and simplification of the code base
991@end itemize\n")
992 (license license:bsd-2)))
993
994(define-public python2-pycryptodome
995 (package-with-python2 python-pycryptodome))
2f691218
996
997(define-public python-m2crypto
998 (package
999 (name "python-m2crypto")
3b4cc5cb 1000 (version "0.35.2")
2f691218
1001 (source
1002 (origin
1003 (method url-fetch)
1004 (uri (pypi-uri "M2Crypto" version))
1005 (sha256
3b4cc5cb 1006 (base32 "09yirf3w77w6f49q6nxhrjm9c3a4y9s30s1k09chqrw8zdgx8sjc"))))
2f691218
1007 (build-system python-build-system)
1008 (inputs `(("openssl" ,openssl)))
2f691218
1009 (home-page "https://gitlab.com/m2crypto/m2crypto")
1010 (synopsis "Python crypto and TLS toolkit")
1011 (description "@code{M2Crypto} is a complete Python wrapper for OpenSSL
1012featuring RSA, DSA, DH, EC, HMACs, message digests, symmetric ciphers
1013(including AES); TLS functionality to implement clients and servers; HTTPS
1014extensions to Python's httplib, urllib, and xmlrpclib; unforgeable HMAC'ing
1015AuthCookies for web session management; FTP/TLS client and server; S/MIME;
1016M2Crypto can also be used to provide TLS for Twisted. Smartcards supported
1017through the Engine interface.")
e810de3e 1018 (properties `((python2-variant . ,(delay python2-m2crypto))))
2f691218
1019 (license license:expat)))
1020
1021(define-public python2-m2crypto
e810de3e
MB
1022 (let ((m2crypto (package-with-python2
1023 (strip-python2-variant python-m2crypto))))
1024 (package (inherit m2crypto)
1025 (propagated-inputs
1026 `(("python2-typing" ,python2-typing))))))
c158d476
NG
1027
1028(define-public python-pylibscrypt
1029 (package
1030 (name "python-pylibscrypt")
1031 (version "1.7.1")
1032 (source
1033 (origin
1034 (method url-fetch)
1035 (uri (pypi-uri "pylibscrypt" version))
1036 (sha256
1037 (base32
1038 "1b3rgzl6dbzs08vhv41b6y4n5189wv7lr27acxn104hs45745abs"))))
1039 (build-system python-build-system)
1040 (arguments
929d4d2f
NG
1041 `(#:phases
1042 (modify-phases %standard-phases
1043 (add-before 'build 'hard-code-path-to-libscrypt
1044 (lambda* (#:key inputs #:allow-other-keys)
1045 (let ((libscrypt (assoc-ref inputs "libscrypt")))
1046 (substitute* "pylibscrypt/pylibscrypt.py"
1047 (("find_library\\('scrypt'\\)")
1048 (string-append "'" libscrypt "/lib/libscrypt.so'")))
1049 #t))))
1050 ;; The library can use various scrypt implementations and tests all of
1051 ;; them. Since we only provide a single implementation, most tests
1052 ;; fail. Simply skip them.
1053 #:tests? #f))
1054 ;; FIXME: Using "libscrypt" is the second best choice. The best one
1055 ;; requires "hashlib.scrypt", provided by Python 3.6+ built with OpenSSL
1056 ;; 1.1+. Use that as soon as Guix provides it.
c158d476 1057 (inputs
929d4d2f 1058 `(("libscrypt" ,libscrypt)))
c158d476
NG
1059 (home-page "https://github.com/jvarho/pylibscrypt")
1060 (synopsis "Scrypt for Python")
1061 (description "There are a lot of different scrypt modules for Python, but
1062none of them have everything that I'd like, so here's one more. It uses
929d4d2f 1063@code{libscrypt}.")
c158d476 1064 (license license:isc)))
40c6e454
NG
1065
1066(define-public python-libnacl
1067 (package
1068 (name "python-libnacl")
1069 (version "1.6.1")
1070 (source
1071 (origin
1072 (method url-fetch)
1073 (uri (pypi-uri "libnacl" version))
1074 (sha256
1075 (base32
1076 "0nv7n8nfswkhl614x5mllrkvaslraa0053q11iylb337cy43vb4v"))))
1077 (build-system python-build-system)
1078 (arguments
1079 `(#:phases
1080 (modify-phases %standard-phases
1081 (add-after 'unpack 'locate-libsodium
1082 (lambda* (#:key inputs #:allow-other-keys)
1083 (substitute* "libnacl/__init__.py"
1084 (("(return ctypes.cdll.LoadLibrary\\(')libsodium.so('\\))"
1085 _ pre post)
1086 (let ((libsodium (string-append (assoc-ref inputs "libsodium")
1087 "/lib/libsodium.so")))
1088 (string-append pre libsodium post)))))))))
1089 (native-inputs
1090 `(("python-pyhamcrest" ,python-pyhamcrest)))
1091 (inputs
1092 `(("libsodium" ,libsodium)))
1093 (home-page "https://libnacl.readthedocs.org/")
1094 (synopsis "Python bindings for libsodium based on ctypes")
1095 (description "@code{libnacl} is used to gain direct access to the
1096functions exposed by @code{NaCl} library via @code{libsodium}. It has
1097been constructed to maintain extensive documentation on how to use
1098@code{NaCl} as well as being completely portable.")
1099 (license license:asl2.0)))
cb91f6ae 1100
1fa1d822
NG
1101(define-public python-scrypt
1102 (package
1103 (name "python-scrypt")
cc314e90 1104 (version "0.8.7")
1fa1d822
NG
1105 (source
1106 (origin
1107 (method url-fetch)
1108 (uri (pypi-uri "scrypt" version))
1109 (sha256
1110 (base32
cc314e90 1111 "0hjk71k3mgnl8siikm9lii9im8kv0rb7inkjzx78rnancra48xxr"))))
1fa1d822
NG
1112 (build-system python-build-system)
1113 (inputs
1114 `(("openssl" ,openssl)))
20c604c5 1115 (home-page "https://bitbucket.org/mhallin/py-scrypt")
1fa1d822
NG
1116 (synopsis "Bindings for the scrypt key derivation function library")
1117 (description "This is a set of Python bindings for the scrypt key
1118derivation function.")
1119 (license license:bsd-2)))
8afe166d
NN
1120
1121(define-public python-service-identity
1122 (package
1123 (name "python-service-identity")
c105e509 1124 (version "18.1.0")
8afe166d
NN
1125 (source
1126 (origin
1127 (method url-fetch)
1128 (uri (pypi-uri "service_identity" version))
1129 (sha256
1130 (base32
c105e509 1131 "0b9f5qiqjy8ralzgwjgkhx82h6h8sa7532psmb8mkd65md5aan08"))))
8afe166d
NN
1132 (build-system python-build-system)
1133 (propagated-inputs
1134 `(("python-attrs" ,python-attrs)
1135 ("python-pyasn1" ,python-pyasn1)
1136 ("python-pyasn1-modules" ,python-pyasn1-modules)
1137 ("python-pyopenssl" ,python-pyopenssl)))
1138 (home-page "https://service-identity.readthedocs.io/")
1139 (synopsis "Service identity verification for PyOpenSSL")
1140 (description
1141 "@code{service_identity} aspires to give you all the tools you need
1142for verifying whether a certificate is valid for the intended purposes.
1143In the simplest case, this means host name verification. However,
1144service_identity implements RFC 6125 fully and plans to add other
1145relevant RFCs too.")
1146 (license license:expat)))
1147
1148(define-public python2-service-identity
1149 (package-with-python2 python-service-identity))
0a90c789
LF
1150
1151(define-public python-hkdf
1152 (package
1153 (name "python-hkdf")
1154 (version "0.0.3")
1155 (source
1156 (origin
1157 (method url-fetch)
1158 (uri (pypi-uri "hkdf" version))
1159 (sha256
1160 (base32
1161 "1jhxk5vhxmxxjp3zj526ry521v9inzzl8jqaaf0ma65w6k332ak2"))))
1162 (build-system python-build-system)
1163 (native-inputs
1164 `(("python-nose" ,python-nose)))
1165 (home-page "https://github.com/casebeer/python-hkdf")
1166 (synopsis "HMAC-based Extract-and-Expand Key Derivation Function (HKDF)")
1167 (description "This package provides a Python implementation of the HMAC Key
1168Derivation function (HKDF) defined in RFC 5869.")
1169 (license license:bsd-2)))
fc681a18
LF
1170
1171(define-public python-spake2
1172 (package
1173 (name "python-spake2")
1174 (version "0.8")
1175 (source
1176 (origin
1177 (method url-fetch)
1178 (uri (pypi-uri "spake2" version))
1179 (sha256
1180 (base32
1181 "1x16r7lrbklvfzbacb66qv9iiih6liq1y612dqh2chgf555n2yn1"))))
1182 (build-system python-build-system)
1183 (propagated-inputs
1184 `(("python-hkdf" ,python-hkdf)))
1185 (home-page "https://github.com/warner/python-spake2")
1186 (synopsis "SPAKE2 password-authenticated key exchange in Python")
1187 (description "This package provides a Python implementation of the SPAKE2
1188Password-Authenticated Key Exchange algorithm.")
1189 (license license:expat)))
215f3db0
LF
1190
1191(define-public python-txtorcon
1192 (package
1193 (name "python-txtorcon")
1194 (version "19.0.0")
1195 (source
1196 (origin
1197 (method url-fetch)
1198 (uri (pypi-uri "txtorcon" version))
1199 (sha256
1200 (base32
1201 "0fxzhsc62bhmr730vj9pzallmw56gz6iykvl28a5agrycm0bfc9p"))))
1202 (build-system python-build-system)
1203 (arguments
1204 ;; The tests fail immediately due to a missing file. Reported upstream:
1205 ;; <https://github.com/meejah/txtorcon/issues/330>
1206 `(#:tests? #f))
1207 (propagated-inputs
1208 `(("python-automat" ,python-automat)
1209 ("python-idna" ,python-idna)
1210 ("python-incremental" ,python-incremental)
1211 ("python-ipaddress" ,python-ipaddress)
1212 ("python-service-identity" ,python-service-identity)
1213 ("python-twisted" ,python-twisted)
1214 ("python-zope-interface" ,python-zope-interface)))
1215 (home-page "https://github.com/meejah/txtorcon")
1216 (synopsis "Twisted-based Tor controller client")
1217 (description "This package provides a Twisted-based Tor controller client,
1218with state-tracking and configuration abstractions.")
1219 (license license:expat)))
93953ec7
GLV
1220
1221(define-public python-keyutils
1222 (package
1223 (name "python-keyutils")
1224 (version "0.6")
1225 (source
1226 (origin
1227 (method url-fetch)
1228 (uri (pypi-uri "keyutils" version))
1229 (sha256
1230 (base32
1231 "0lipygpzhwzzsq2k5imb1jgkmj8y4khxdwhzadjs3bd56g6bmkx9"))))
1232 (build-system python-build-system)
1233 (native-inputs
1234 `(("python-pytest" ,python-pytest)
1235 ("python-pytest-runner" ,python-pytest-runner)))
1236 (inputs
1237 `(("keyutils" ,keyutils)))
1238 (arguments
1239 '(#:tests? #f))
1240 (home-page "https://github.com/sassoftware/python-keyutils")
1241 (synopsis "Python bindings for keyutils")
1242 (description
1243 "This is a set of python bindings for keyutils, a key management suite
1244that leverages the infrastructure provided by the Linux kernel for safely
a806b0b0 1245storing and retrieving sensitive information in your programs.")
93953ec7 1246 (license license:asl2.0)))
1f15cbc8
CL
1247
1248(define-public python-mcuboot-imgtool
1249 (package
1250 (name "python-mcuboot-imgtool")
1251 (version "1.4.0")
1252 (source
1253 (origin
1254 (method git-fetch)
1255 (uri (git-reference
1256 (url "https://github.com/JuulLabs-OSS/mcuboot")
1257 (commit (string-append "v" version))))
1258 (file-name (git-file-name name version))
1259 (sha256
1260 (base32
1261 "1m1csyvzq4jx81zg635ssy1n7sc0z539z0myh872ll3nwqx7wa0q"))))
1262 (build-system python-build-system)
1263 (arguments
1264 `(#:phases
1265 (modify-phases %standard-phases
1266 (add-after 'unpack 'fix-broken-test
1267 (lambda _
1268 (substitute* "scripts/imgtool/keys/ed25519_test.py"
1269 (("raw_sign") "sign_digest"))
1270 #t))
1271 (add-before 'build 'change-directory
1272 (lambda _
1273 (chdir "scripts")
1274 #t)))))
1275 (propagated-inputs
1276 `(("python-click" ,python-click)
1277 ("python-intelhex" ,python-intelhex)
1278 ("python-cryptography" ,python-cryptography)))
1279 (home-page "https://mcuboot.com")
1280 (synopsis "Tool to securely sign firmware images for booting by MCUboot")
1281 (description "MCUboot is a secure bootloader for 32-bit MCUs. This
1282package provides a tool to securely sign firmware images for booting by
1283MCUboot.")
1284 (license license:expat)))
83feb3d0 1285
163997c9
AT
1286(define-public python-ntlm-auth
1287 (package
1288 (name "python-ntlm-auth")
1289 (version "1.4.0")
1290 (source
1291 (origin
1292 (method url-fetch)
1293 (uri (pypi-uri "ntlm-auth" version))
1294 (sha256
1295 (base32
1296 "16mavidki4ma5ip8srqalr19gz4f5yn3cnmmgps1fmgfr24j63rm"))))
1297 (build-system python-build-system)
1298 (propagated-inputs
1299 `(("python-cryptography" ,python-cryptography)))
1300 (home-page "https://github.com/jborean93/ntlm-auth")
1301 (synopsis
1302 "Calculates NTLM Authentication codes")
1303 (description
1304 "This library handles the low-level details of NTLM authentication for
1305use in authenticating with a service that uses NTLM. It will create and parse
1306the 3 different message types in the order required and produce a base64
1307encoded value that can be attached to the HTTP header.
1308
1309The goal of this library is to offer full NTLM support including signing and
1310sealing of messages as well as supporting MIC for message integrity and the
1311ability to customise and set limits on the messages sent. Please see Features
1312and Backlog for a list of what is and is not currently supported.")
1313 (license license:expat)))
1314
4ee1ea76
EF
1315(define-public python-secretstorage
1316 (package
1317 (name "python-secretstorage")
1318 (version "3.1.2")
1319 (source
1320 (origin
1321 (method url-fetch)
1322 (uri (pypi-uri "SecretStorage" version))
1323 (sha256
1324 (base32
1325 "1xmzr0j3066s220bss4nkgqbiwb5k4kkp2rkpqlqwjb5kfc8mnhm"))))
1326 (build-system python-build-system)
1327 (arguments
1328 '(#:tests? #f)) ; Tests require a running dbus service.
1329 (propagated-inputs
1330 `(("python-cryptography" ,python-cryptography)
1331 ("python-jeepney" ,python-jeepney)))
1332 (home-page "https://github.com/mitya57/secretstorage")
1333 (synopsis "Python bindings to FreeDesktop.org Secret Service API")
1334 (description
1335 "@code{python-secretstorage} provides a way for securely storing passwords
1336and other secrets. It uses D-Bus Secret Service API that is supported by GNOME
1337Keyring (since version 2.30) and KSecretsService. SecretStorage supports most
1338of the functions provided by Secret Service, including creating and deleting
1339items and collections, editing items, locking and unlocking collections
1340(asynchronous unlocking is also supported).")
1341 (license license:bsd-3)))
1342
83feb3d0
EF
1343(define-public python-jeepney
1344 (package
1345 (name "python-jeepney")
1346 (version "0.4.2")
1347 (source
1348 (origin
1349 (method url-fetch)
1350 (uri (pypi-uri "jeepney" version))
1351 (sha256
1352 (base32
1353 "1fz9lb5fl831sijg2j0sbki698j2z6awbblas7mz3gp9jz2xi9hb"))))
1354 (build-system python-build-system)
1355 (native-inputs
1356 `(("python-testpath" ,python-testpath)
1357 ("python-tornado" ,python-tornado)
1358 ("python-pytest" ,python-pytest)))
1359 (home-page "https://gitlab.com/takluyver/jeepney")
1360 (synopsis "Low-level, pure Python DBus protocol wrapper")
1361 (description
1362 "This is a low-level, pure Python DBus protocol client. It has an
1363I/O-free core, and integration modules for different event loops.")
1364 (license license:expat)))
08310637
EF
1365
1366(define-public python-argon2-cffi
1367 (package
1368 (name "python-argon2-cffi")
1369 (version "19.2.0")
1370 (source
1371 (origin
1372 (method url-fetch)
1373 (uri (pypi-uri "argon2-cffi" version))
1374 (sha256
1375 (base32
1376 "18xxfw30gi3lwaz4vwb05iavzlrk3fa1x9fippzrgd3px8z65apz"))
1377 (modules '((guix build utils)))
1378 (snippet '(begin (delete-file-recursively "extras") #t))))
1379 (build-system python-build-system)
1380 (arguments
1381 '(#:phases
1382 (modify-phases %standard-phases
1383 (replace 'build
1384 (lambda _
1385 (setenv "ARGON2_CFFI_USE_SYSTEM" "1")
1386 (invoke "python" "setup.py" "build")))
1387 (replace 'check
1388 (lambda* (#:key inputs outputs #:allow-other-keys)
1389 (add-installed-pythonpath inputs outputs)
1390 (invoke "pytest")
1391 (invoke "python" "-m" "argon2" "--help")
1392 ;; see tox.ini
1393 (invoke "python" "-m" "argon2" "-n" "1" "-t" "1" "-m" "8" "-p" "1"))))))
1394 (propagated-inputs
1395 `(("python-cffi" ,python-cffi)
1396 ("python-six" ,python-six)))
1397 (inputs `(("argon2" ,argon2)))
1398 (native-inputs
1399 `(("python-hypothesis" ,python-hypothesis)
1400 ("python-pytest" ,python-pytest)))
1401 (home-page "https://argon2-cffi.readthedocs.io/")
1402 (synopsis "Secure Password Hashes for Python")
1403 (description
1404 "Argon2 is a secure password hashing algorithm. It is designed to have
1405both a configurable runtime as well as memory consumption. This means that you
1406can decide how long it takes to hash a password and how much memory is required.")
1407 (license license:expat)))
0a124c46
EF
1408
1409(define-public python-privy
1410 (package
1411 (name "python-privy")
1412 (version "6.0.0")
1413 (source
1414 (origin
1415 (method git-fetch)
1416 (uri (git-reference
1417 ;; Releases are untagged
1418 (url "https://github.com/ofek/privy")
1419 (commit "2838db3df239797c71bddacc48a4c49a83f35747")))
1420 (file-name (git-file-name name version))
1421 (sha256
1422 (base32
1423 "1m32dh5fqc8cy7jyf1z5fs6zvmdkbq5fi98hr609gbl7s0l0y0i9"))))
1424 (build-system python-build-system)
1425 (arguments
1426 '(#:phases
1427 (modify-phases %standard-phases
1428 (replace 'check
1429 (lambda _
1430 (invoke "python" "-m" "pytest"))))))
1431 (native-inputs
1432 `(("python-pytest" ,python-pytest)))
1433 (propagated-inputs
1434 `(("python-argon2-cffi" ,python-argon2-cffi)
1435 ("python-cryptography" ,python-cryptography)))
1436 (home-page "https://www.dropbox.com/developers")
1437 (synopsis "Library to password-protect your data")
1438 (description
1439 "Privy is a small and fast utility for password-protecting secret
1440data such as API keys, cryptocurrency wallets, or seeds for digital
1441signatures.")
1442 (license (list license:expat license:asl2.0)))) ; dual licensed