summary refs log tree commit diff
path: root/gnu/packages/python-crypto.scm
diff options
context:
space:
mode:
authorMaxim Cournoyer <maxim.cournoyer@gmail.com>2023-04-14 16:57:37 -0400
committerMaxim Cournoyer <maxim.cournoyer@gmail.com>2023-04-14 17:15:08 -0400
commit3bacd3c76a58ebe70f98be654f09cbd4166093ab (patch)
tree89f687565205971a9925d33400235968a569a069 /gnu/packages/python-crypto.scm
parentdf3391c0309443ac37f9a9a6b1038a85454b8ee6 (diff)
parent97ed675718b948319e6f6e51f2d577971bea1176 (diff)
downloadguix-3bacd3c76a58ebe70f98be654f09cbd4166093ab.tar.gz
Merge branch 'master' into core-updates.
Conflicts:
	gnu/local.mk
	gnu/packages/build-tools.scm
	gnu/packages/certs.scm
	gnu/packages/check.scm
	gnu/packages/compression.scm
	gnu/packages/cups.scm
	gnu/packages/fontutils.scm
	gnu/packages/gnuzilla.scm
	gnu/packages/guile.scm
	gnu/packages/ibus.scm
	gnu/packages/image-processing.scm
	gnu/packages/linux.scm
	gnu/packages/music.scm
	gnu/packages/nss.scm
	gnu/packages/pdf.scm
	gnu/packages/python-xyz.scm
	gnu/packages/qt.scm
	gnu/packages/ruby.scm
	gnu/packages/shells.scm
	gnu/packages/tex.scm
	gnu/packages/video.scm
	gnu/packages/vulkan.scm
	gnu/packages/web.scm
	gnu/packages/webkit.scm
	gnu/packages/wm.scm
Diffstat (limited to 'gnu/packages/python-crypto.scm')
-rw-r--r--gnu/packages/python-crypto.scm295
1 files changed, 117 insertions, 178 deletions
diff --git a/gnu/packages/python-crypto.scm b/gnu/packages/python-crypto.scm
index 602768ae85..9cf5914337 100644
--- a/gnu/packages/python-crypto.scm
+++ b/gnu/packages/python-crypto.scm
@@ -24,7 +24,7 @@
 ;;; Copyright © 2020 Alexandros Theodotou <alex@zrythm.org>
 ;;; Copyright © 2020 Justus Winter <justus@sequoia-pgp.org>
 ;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
-;;; Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2022 Antero Mejr <antero@mailbox.org>
 ;;;
@@ -60,6 +60,7 @@
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages password-utils)
+  #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-build)
@@ -465,17 +466,17 @@ for example, for recording or replaying web content.")
 is used by the Requests library to verify HTTPS requests.")
     (license license:asl2.0)))
 
-(define-public python-cryptography-vectors-next
+(define-public python-cryptography-vectors
   (package
     (name "python-cryptography-vectors")
-    (version "37.0.4")
+    (version "40.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "cryptography_vectors" version))
        (sha256
         (base32
-         "1a1yi37ygw0jp72q280cmxd3qn9y9vmcch2bcnjkg2g2202l0qas"))))
+         "0hd0ppss5xg0kzf36q8cdaxh1xw8ry4k7jkianlf832xbdmp0q44"))))
     (build-system python-build-system)
     (home-page "https://github.com/pyca/cryptography")
     (synopsis "Test vectors for the cryptography package")
@@ -484,179 +485,127 @@ is used by the Requests library to verify HTTPS requests.")
     ;; Distributed under either BSD-3 or ASL2.0
     (license (list license:bsd-3 license:asl2.0))))
 
-(define-public python-cryptography-vectors
-  (package
-    (inherit python-cryptography-vectors-next)
-    (version "3.4.8")
-    (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "cryptography_vectors" version))
-              (sha256
-               (base32 "1wl0ynh3lzhc6q59g8mybvijmnp195x7fjxlb3h3sgcraw14312c"))))))
-
-(define-public python-cryptography-next
+(define-public python-cryptography
   (package
     (name "python-cryptography")
-    (version "37.0.4")
+    (version "40.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "cryptography" version))
        (sha256
         (base32
-         "10haq7sn8mrdlhcfs791rczknnxm0wpww0lkpjzcqx141ryc3yb3"))))
-    (build-system python-build-system)
+         "0wilrilfcyl78caxcpna2k3aya6qamppwv4j35262pz9n7wg40r8"))))
+    (build-system pyproject-build-system)
     (arguments
      (list
-      #:imported-modules (append %cargo-build-system-modules
-                                 %python-build-system-modules)
-      #:modules `(((guix build cargo-build-system) #:prefix cargo:)
-                  ,@%python-build-system-modules
-                  (srfi srfi-1)
-                  (ice-9 match))
-      #:phases
-      #~(modify-phases (@ (guix build python-build-system) %standard-phases)
-          (add-after 'unpack 'adjust-pyo3-requirement
-            (lambda _
-              ;; The package depends on 0.15.2, which is not on crates.io(!?).
-              ;; Downgrade to 0.15.1...
-              (substitute* "src/rust/Cargo.toml"
-                (("pyo3 = \\{ version = \"0\\.15\\.2\"")
-                 "pyo3 = { version = \"0.15.1\""))))
-          (add-before 'build 'configure-cargo
-            (lambda* (#:key inputs #:allow-other-keys)
-              ;; Hide irrelevant inputs from cargo-build-system so it does
-              ;; not try to unpack sanity-check.py, etc.
-              (let ((cargo-inputs (filter (match-lambda
-                                            ((name . path)
-                                             (or (string-prefix? "rust-" name)
-                                                 (string=? "gcc" name))))
-                                          inputs)))
-                (with-directory-excursion "src/rust"
-                  ((assoc-ref cargo:%standard-phases 'unpack-rust-crates)
-                   #:inputs cargo-inputs
-                   #:vendor-dir "guix-vendor")
-                  ((assoc-ref cargo:%standard-phases 'configure)
-                   #:inputs cargo-inputs)
-                  ((assoc-ref cargo:%standard-phases 'patch-cargo-checksums)
-                   #:vendor-dir "guix-vendor"))
-                (rename-file "src/rust/.cargo" ".cargo"))))
-          (replace 'check
-            (lambda* (#:key tests? #:allow-other-keys)
-              (when tests?
-                (invoke "pytest" "-vv" "tests")))))))
-    (inputs
-     (list openssl
-           ;; TODO: Most of these inputs are transitive dependencies of
-           ;; the Rust requirements (see src/rust/cargo.toml).  Surely
-           ;; there is a better way than manually listing everything..?
-           rust-aliasable-0.1
-           rust-asn1-0.8
-           rust-asn1-derive-0.8
-           rust-autocfg-1
-           rust-base64-0.13
-           rust-bitflags-1
-           rust-cfg-if-0.1
-           rust-cfg-if-1
-           rust-chrono-0.4
-           rust-cloudabi-0.1
-           rust-lazy-static-1
-           rust-libc-0.2
-           rust-indoc-0.3
-           rust-indoc-impl-0.3
-           rust-inflector-0.11
-           rust-instant-0.1
-           rust-lock-api-0.4
-           rust-num-integer-0.1
-           rust-num-traits-0.2
-           rust-once-cell-1
-           rust-ouroboros-0.15
-           rust-ouroboros-macro-0.15
-           rust-parking-lot-0.11
-           rust-parking-lot-core-0.8
-           rust-paste-0.1
-           rust-paste-impl-0.1
-           rust-pem-1
-           rust-proc-macro-error-1
-           rust-proc-macro-error-attr-1
-           rust-proc-macro-hack-0.5
-           rust-proc-macro2-1
-           rust-pyo3-0.15
-           rust-pyo3-build-config-0.15
-           rust-pyo3-macros-0.15
-           rust-pyo3-macros-backend-0.15
-           rust-quote-1
-           rust-redox-syscall-0.2
-           rust-scopeguard-1
-           rust-smallvec-1
-           rust-stable-deref-trait-1
-           rust-syn-1
-           rust-unicode-xid-0.2
-           rust-unindent-0.1
-           rust-version-check-0.9
-           rust-winapi-0.3))
-    (propagated-inputs
-     (list python-asn1crypto python-cffi python-six python-idna
-           python-iso8601))
+      #:phases #~(modify-phases %standard-phases
+                   (add-after 'unpack 'disable-rust-extension-build
+                     (lambda _
+                       ;; The Rust extension is built separately as
+                       ;; 'python-cryptography-rust', so there's no need
+                       ;; to build it here.
+                       (substitute* "pyproject.toml"
+                         ((".*setuptools-rust.*") ""))
+                       (delete-file "setup.py")))
+                   (add-before 'check 'symlink-rust-library
+                     (lambda* (#:key inputs outputs #:allow-other-keys)
+                       (symlink (search-input-file
+                                 inputs "lib/libcryptography_rust.so")
+                                (string-append (site-packages inputs outputs)
+                                               "/cryptography/hazmat/bindings/"
+                                               "_rust.abi3.so")))))))
+
     (native-inputs
-     (list python-cryptography-vectors-next
+     (list python-cryptography-vectors
            python-hypothesis
+           python-iso8601
            python-pretend
-           python-pytz
-           python-pytest
+           python-pytest-7.1            ;for subtests
            python-pytest-benchmark
-           python-pytest-subtests
-           python-setuptools-rust
-           rust
-           `(,rust "cargo")))
+           python-pytest-subtests))
+    (inputs (list python-cryptography-rust))
+    (propagated-inputs (list python-cffi))
     (home-page "https://github.com/pyca/cryptography")
     (synopsis "Cryptographic recipes and primitives for Python")
     (description
-      "cryptography is a package which provides cryptographic recipes and
-primitives to Python developers.  It aims to be the “cryptographic standard
-library” for Python.  The package includes both high level recipes, and low
-level interfaces to common cryptographic algorithms such as symmetric ciphers,
-message digests and key derivation functions.")
+     "@code{cryptography} is a package which provides cryptographic recipes
+and primitives to Python developers.  It aims to be the “cryptographic
+standard library” for Python.  The package includes both high level recipes,
+and low level interfaces to common cryptographic algorithms such as symmetric
+ciphers, message digests and key derivation functions.")
     ;; Distributed under either BSD-3 or ASL2.0
     (license (list license:bsd-3 license:asl2.0))))
 
-(define-public python-cryptography
+;;; This is the Rust component of the python-cryptography library, extracted
+;;; as a separate package to ease the Rust build.
+(define-public python-cryptography-rust
   (package
-    (inherit python-cryptography-next)
-    (version "3.4.8")
-    (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "cryptography" version))
-              (sha256
-               (base32 "072awar70cwfd2hnx0pvp1dkc7gw45mbm3wcyddvxz5frva5xk4l"))))
+    (inherit python-cryptography)
+    (name "python-cryptography-rust")
+    (build-system cargo-build-system)
     (arguments
-     (list #:phases
-           #~(modify-phases %standard-phases
-               (add-after 'unpack 'set-no-rust
-                 (lambda _
-                   (setenv "CRYPTOGRAPHY_DONT_BUILD_RUST" "1"))))))
-    (inputs (list openssl-1.1))
-    (native-inputs
-     (list python-cryptography-vectors
-           python-hypothesis
-           python-pretend
-           python-pytz
-           python-pytest
-           python-setuptools-rust))))
+     (list
+      #:modules '((guix build cargo-build-system)
+                  (guix build utils)
+                  (srfi srfi-1)
+                  (ice-9 match))
+      ;; XXX: Building the test objects appear to fail due to a missing link
+      ;; directive to Python's shared library (e.g.: "ld:
+      ;; cryptography_rust.c950d742-cgu.11:(.text._ZN3...+0x57): undefined
+      ;; reference to `PyLong_FromLong'").
+      #:tests? #f
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'chdir
+            (lambda _
+              (chdir "src/rust")))
+          (replace 'unpack-rust-crates
+            ;; This is to avoid the non-crate source from being erroneously
+            ;; unpacked by this phase, causing an error.
+            (lambda* (#:key inputs #:allow-other-keys #:rest args)
+              (apply (assoc-ref %standard-phases 'unpack-rust-crates)
+                     (append args
+                             (list #:inputs (alist-delete "source" inputs))))))
+          (replace 'configure
+            (lambda* (#:key inputs #:allow-other-keys #:rest args)
+              (apply (assoc-ref %standard-phases 'configure)
+                     (append args
+                             (list #:inputs (alist-delete "source" inputs))))))
+          (add-after 'install 'install-shared-library
+            (lambda _
+              (install-file "target/release/libcryptography_rust.so"
+                            (string-append #$output "/lib")))))
+      #:cargo-inputs
+      `(("rust-asn1-0.13" ,rust-asn1-0.13)
+        ("rust-chrono-0.4" ,rust-chrono-0.4)
+        ("rust-foreign-types-shared-0.1" ,rust-foreign-types-shared-0.1)
+        ("rust-once-cell-1" ,rust-once-cell-1)
+        ("rust-openssl-0.10" ,rust-openssl-0.10)
+        ("rust-openssl-sys-0.9" ,rust-openssl-sys-0.9)
+        ("rust-ouroboros-0.15" ,rust-ouroboros-0.15)
+        ("rust-pem-1" ,rust-pem-1)
+        ("rust-pyo3-0.15" ,rust-pyo3-0.15))
+      #:cargo-development-inputs
+      `(("rust-cc" ,rust-cc-1))))
+    (native-inputs (list pkg-config python python-cffi))
+    ;; XXX: Adding rust-openssl-sys-0.9 is needed because #:cargo-inputs
+    ;; doesn't honor propagated-inputs.
+    (inputs (list python rust-openssl-sys-0.9))
+    (propagated-inputs '())
+    (synopsis "Core implementation of the Cryptography Python library")))
 
-;; This is the last version which is compatable with python-cryptography < 35.
 (define-public python-pyopenssl
   (package
     (name "python-pyopenssl")
-    (version "21.0.0")
+    (version "23.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pyOpenSSL" version))
        (sha256
         (base32
-         "1cqcc20fwl521z3fxsc1c98gbnhb14q55vrvjfp6bn6h8rg8qbay"))
-       (patches (search-patches "python2-pyopenssl-openssl-compat.patch"))))
+         "1dxhip610zw1j2bz35g1w1h7vh374g0bnzn4nsqj65n6pswrh544"))))
     (build-system python-build-system)
     (arguments
      (list
@@ -668,7 +617,7 @@ message digests and key derivation functions.")
                 ;; PyOpenSSL runs tests against a certificate with a fixed
                 ;; expiry time.  To ensure successful builds in the future,
                 ;; set the time to roughly the release date.
-                (invoke "faketime" "2022-02-01" "py.test" "-v" "-k"
+                (invoke "faketime" "2023-03-25" "pytest" "-vv" "-k"
                         (string-append
                          ;; This test tries to look up certificates from
                          ;; the compiled-in default path in OpenSSL, which
@@ -680,17 +629,13 @@ message digests and key derivation functions.")
                          ;; Fails on i686-linux and possibly other 32-bit platforms
                          ;; https://github.com/pyca/pyopenssl/issues/974
                          "and not test_verify_with_time"))))))))
-    (propagated-inputs
-     (list python-cryptography python-six))
-    (inputs
-     (list openssl))
-    (native-inputs
-     (list libfaketime python-flaky python-pretend python-pytest))
+    (propagated-inputs (list python-cryptography))
+    (inputs (list openssl))
+    (native-inputs (list libfaketime python-flaky python-pretend python-pytest))
     (home-page "https://github.com/pyca/pyopenssl")
     (synopsis "Python wrapper module around the OpenSSL library")
-    (description
-      "PyOpenSSL is a high-level wrapper around a subset of the OpenSSL
-library.")
+    (description "PyOpenSSL is a high-level wrapper around a subset of the
+OpenSSL library.")
     (license license:asl2.0)))
 
 (define-public python-ed25519
@@ -1232,18 +1177,17 @@ derivation function.")
 (define-public python-service-identity
   (package
     (name "python-service-identity")
-    (version "18.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "service_identity" version))
-       (sha256
-        (base32
-         "0b9f5qiqjy8ralzgwjgkhx82h6h8sa7532psmb8mkd65md5aan08"))))
-    (build-system python-build-system)
-    (propagated-inputs
-     (list python-attrs python-pyasn1 python-pyasn1-modules
-           python-pyopenssl))
+    (version "21.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "service-identity" version))
+              (sha256
+               (base32
+                "0d4x84crbz0a17d8gi90z6zlxwm9pslc65rx0cdw2797ra360v3f"))))
+    (build-system pyproject-build-system)
+    (native-inputs (list python-idna python-pytest))
+    (propagated-inputs (list python-attrs python-cryptography python-pyasn1
+                             python-pyasn1-modules python-six))
     (home-page "https://service-identity.readthedocs.io/")
     (synopsis "Service identity verification for PyOpenSSL")
     (description
@@ -1444,21 +1388,14 @@ items and collections, editing items, locking and unlocking collections
 (define-public python-trustme
   (package
     (name "python-trustme")
-    (version "0.6.0")
+    (version "0.9.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "trustme" version))
        (sha256
-        (base32 "0v3vr5z6apnfmklf07m45kv5kaqvm6hxrkaqywch57bjd2siiywx"))))
-    (build-system python-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (invoke "pytest" "-vv"))))))
+        (base32 "0v2qzszmyazfgc1snicdr4b4qdajpjd4pbinpgrn9vfff0yv41sy"))))
+    (build-system pyproject-build-system)
     (native-inputs
      (list python-more-itertools
            python-pyopenssl
@@ -1467,7 +1404,9 @@ items and collections, editing items, locking and unlocking collections
            python-service-identity
            python-zipp))
     (propagated-inputs
-     (list python-cryptography))
+     (list python-cryptography
+           python-idna
+           python-ipaddress))
     (home-page "https://github.com/python-trio/trustme")
     (synopsis "Fake a certificate authority for tests")
     (description