Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-bcrypt for openSUSE:Factory 
checked in at 2025-03-24 13:25:16
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-bcrypt (Old)
 and      /work/SRC/openSUSE:Factory/.python-bcrypt.new.2696 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-bcrypt"

Mon Mar 24 13:25:16 2025 rev:17 rq:1255006 version:4.3.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-bcrypt/python-bcrypt.changes      
2024-12-05 17:05:41.210171195 +0100
+++ /work/SRC/openSUSE:Factory/.python-bcrypt.new.2696/python-bcrypt.changes    
2025-03-24 13:25:18.178425845 +0100
@@ -1,0 +2,65 @@
+Fri Mar 21 07:03:29 UTC 2025 - John Paul Adrian Glaubitz 
<adrian.glaub...@suse.com>
+
+- Update 4.3.0
+  * Bump proc-macro2 from 1.0.89 to 1.0.90 in /src/_bcrypt (#916)
+  * Bump unicode-ident from 1.0.13 to 1.0.14 in /src/_bcrypt (#915)
+  * fixes #917 -- correctly handle a salt that's too short (#918)
+  * Bump cpufeatures from 0.2.15 to 0.2.16 in /src/_bcrypt (#919)
+  * Bump proc-macro2 from 1.0.90 to 1.0.92 in /src/_bcrypt (#920)
+  * Bump syn from 2.0.87 to 2.0.89 in /src/_bcrypt (#921)
+  * Fix new ruff warning (#923)
+  * Build manylinux 2.34 images (#922)
+  * Bump portable-atomic from 1.9.0 to 1.10.0 in /src/_bcrypt (#924)
+  * drop py37 (#926)
+  * Bump pyo3 from 0.23.1 to 0.23.2 in /src/_bcrypt (#927)
+  * Bump libc from 0.2.164 to 0.2.165 in /src/_bcrypt (#928)
+  * Bump libc from 0.2.165 to 0.2.166 in /src/_bcrypt (#929)
+  * Bump dawidd6/action-download-artifact from 6 to 7 (#932)
+  * Bump syn from 2.0.89 to 2.0.90 in /src/_bcrypt (#931)
+  * Bump libc from 0.2.166 to 0.2.167 in /src/_bcrypt (#930)
+  * Bump pyo3 from 0.23.2 to 0.23.3 in /src/_bcrypt (#933)
+  * Bump actions/cache from 4.1.2 to 4.2.0 (#934)
+  * Bump libc from 0.2.167 to 0.2.168 in /src/_bcrypt (#935)
+  * Bump pypa/gh-action-pypi-publish from 1.12.2 to 1.12.3 (#936)
+  * Bump dtolnay/rust-toolchain (#937)
+  * Bump actions/upload-artifact from 4.4.3 to 4.5.0 (#938)
+  * Bump libc from 0.2.168 to 0.2.169 in /src/_bcrypt (#939)
+  * Bump syn from 2.0.90 to 2.0.91 in /src/_bcrypt (#940)
+  * Bump quote from 1.0.37 to 1.0.38 in /src/_bcrypt (#942)
+  * Bump syn from 2.0.91 to 2.0.92 in /src/_bcrypt (#941)
+  * Bump syn from 2.0.92 to 2.0.93 in /src/_bcrypt (#943)
+  * Bump syn from 2.0.93 to 2.0.94 in /src/_bcrypt (#944)
+  * Bump syn from 2.0.94 to 2.0.95 in /src/_bcrypt (#945)
+  * Bump syn from 2.0.95 to 2.0.96 in /src/_bcrypt (#948)
+  * Bump actions/upload-artifact from 4.5.0 to 4.6.0 (#947)
+  * Bump proc-macro2 from 1.0.92 to 1.0.93 in /src/_bcrypt (#949)
+  * Bump pyo3 from 0.23.3 to 0.23.4 in /src/_bcrypt (#950)
+  * Support free-threaded Python 3.13 (#925)
+  * Switch to nox (#954)
+  * use github hosted arm runners in wheel builder (#952)
+  * use github hosted arm runners in ci (#951)
+  * Bump dawidd6/action-download-artifact from 7 to 8 (#956)
+  * Bump pypa/gh-action-pypi-publish from 1.12.3 to 1.12.4 (#957)
+  * Bump unicode-ident from 1.0.14 to 1.0.15 in /src/_bcrypt (#958)
+  * include matrix.PYTHON.VERSION in CI cache keys (#964)
+  * Bump cpufeatures from 0.2.16 to 0.2.17 in /src/_bcrypt (#960)
+  * Bump unicode-ident from 1.0.15 to 1.0.16 in /src/_bcrypt (#962)
+  * Bump actions/setup-python from 5.3.0 to 5.4.0 (#963)
+  * Update getrandom and bcrypt (#966)
+  * Bump syn from 2.0.96 to 2.0.98 in /src/_bcrypt (#967)
+  * Bump quansight-labs/setup-python from 5.3.1 to 5.4.0 (#968)
+  * add support for free-threaded wheels (#955)
+  * Bump once_cell from 1.20.2 to 1.20.3 in /src/_bcrypt (#970)
+  * Bump unicode-ident from 1.0.16 to 1.0.17 in /src/_bcrypt (#972)
+  * Bump typenum from 1.17.0 to 1.18.0 in /src/_bcrypt (#973)
+  * Bump actions/cache from 4.2.0 to 4.2.1 (#974)
+  * Bump actions/upload-artifact from 4.6.0 to 4.6.1 (#975)
+  * Bump libc from 0.2.169 to 0.2.170 in /src/_bcrypt (#976)
+  * Bump inout from 0.1.3 to 0.1.4 in /src/_bcrypt (#977)
+  * Bump portable-atomic from 1.10.0 to 1.11.0 in /src/_bcrypt (#978)
+  * Update PyO3 to 0.23.5 (#980)
+  * Bump actions/download-artifact from 4.1.8 to 4.1.9 (#982)
+  * Add PyPy 3.11 and armv7l to matrix runner (#983)
+  * PyPy 3.11 and armv7l wheels (#984)
+
+-------------------------------------------------------------------

Old:
----
  bcrypt-4.2.1.tar.gz

New:
----
  bcrypt-4.3.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-bcrypt.spec ++++++
--- /var/tmp/diff_new_pack.AwCQiU/_old  2025-03-24 13:25:19.234469847 +0100
+++ /var/tmp/diff_new_pack.AwCQiU/_new  2025-03-24 13:25:19.238470013 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-bcrypt
 #
-# Copyright (c) 2024 SUSE LLC
+# Copyright (c) 2025 SUSE LLC
 # Copyright (c) 2016, Martin Hauke <mar...@gmx.de>
 #
 # All modifications and additions to the file contributed by third parties
@@ -20,7 +20,7 @@
 %global rustflags '-Clink-arg=-Wl,-z,relro,-z,now'
 %{?sle15_python_module_pythons}
 Name:           python-bcrypt
-Version:        4.2.1
+Version:        4.3.0
 Release:        0
 Summary:        BSD type 2a and 2b password hashing
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.AwCQiU/_old  2025-03-24 13:25:19.294472347 +0100
+++ /var/tmp/diff_new_pack.AwCQiU/_new  2025-03-24 13:25:19.298472513 +0100
@@ -3,7 +3,7 @@
     <param name="url">https://github.com/pyca/bcrypt/</param>
     <param name="versionformat">@PARENT_TAG@~@TAG_OFFSET@</param>
     <param name="scm">git</param>
-    <param name="revision">4.2.1</param>
+    <param name="revision">4.3.0</param>
   </service>
   <service name="cargo_vendor" mode="manual">
      <param name="srcdir">bcrypt/src/_bcrypt</param>

++++++ bcrypt-4.2.1.tar.gz -> bcrypt-4.3.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bcrypt-4.2.1/MANIFEST.in new/bcrypt-4.3.0/MANIFEST.in
--- old/bcrypt-4.2.1/MANIFEST.in        2024-11-19 21:03:02.000000000 +0100
+++ new/bcrypt-4.3.0/MANIFEST.in        2025-02-28 02:17:02.000000000 +0100
@@ -2,7 +2,7 @@
 
 include pyproject.toml
 
-include tox.ini .coveragerc
+include noxfile.py .coveragerc
 
 recursive-include src py.typed *.pyi
 recursive-include src/_bcrypt Cargo.toml Cargo.lock *.rs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bcrypt-4.2.1/PKG-INFO new/bcrypt-4.3.0/PKG-INFO
--- old/bcrypt-4.2.1/PKG-INFO   2024-11-19 21:03:09.908717400 +0100
+++ new/bcrypt-4.3.0/PKG-INFO   2025-02-28 02:17:09.378459200 +0100
@@ -1,6 +1,6 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.2
 Name: bcrypt
-Version: 4.2.1
+Version: 4.3.0
 Summary: Modern password hashing for your software and your servers
 Author-email: The Python Cryptographic Authority developers 
<cryptography-...@python.org>
 License: Apache-2.0
@@ -11,14 +11,13 @@
 Classifier: Programming Language :: Python :: Implementation :: PyPy
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3 :: Only
-Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: 3.10
 Classifier: Programming Language :: Python :: 3.11
 Classifier: Programming Language :: Python :: 3.12
 Classifier: Programming Language :: Python :: 3.13
-Requires-Python: >=3.7
+Requires-Python: >=3.8
 Description-Content-Type: text/x-rst
 License-File: LICENSE
 Provides-Extra: tests
@@ -79,6 +78,15 @@
 Changelog
 =========
 
+Unreleased
+----------
+
+* Dropped support for Python 3.7.
+* We now support free-threaded Python 3.13.
+* We now support PyPy 3.11.
+* We now publish wheels for free-threaded Python 3.13, for PyPy 3.11 on
+  ``manylinux``, and for ARMv7l on ``manylinux``.
+
 4.2.1
 -----
 
@@ -308,7 +316,7 @@
 -------------
 
 This library should be compatible with py-bcrypt and it will run on Python
-3.6+, and PyPy 3.
+3.8+ (including free-threaded builds), and PyPy 3.
 
 Security
 --------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bcrypt-4.2.1/README.rst new/bcrypt-4.3.0/README.rst
--- old/bcrypt-4.2.1/README.rst 2024-11-19 21:03:02.000000000 +0100
+++ new/bcrypt-4.3.0/README.rst 2025-02-28 02:17:02.000000000 +0100
@@ -51,6 +51,15 @@
 Changelog
 =========
 
+Unreleased
+----------
+
+* Dropped support for Python 3.7.
+* We now support free-threaded Python 3.13.
+* We now support PyPy 3.11.
+* We now publish wheels for free-threaded Python 3.13, for PyPy 3.11 on
+  ``manylinux``, and for ARMv7l on ``manylinux``.
+
 4.2.1
 -----
 
@@ -280,7 +289,7 @@
 -------------
 
 This library should be compatible with py-bcrypt and it will run on Python
-3.6+, and PyPy 3.
+3.8+ (including free-threaded builds), and PyPy 3.
 
 Security
 --------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bcrypt-4.2.1/noxfile.py new/bcrypt-4.3.0/noxfile.py
--- old/bcrypt-4.2.1/noxfile.py 1970-01-01 01:00:00.000000000 +0100
+++ new/bcrypt-4.3.0/noxfile.py 2025-02-28 02:17:02.000000000 +0100
@@ -0,0 +1,42 @@
+import nox
+
+nox.options.reuse_existing_virtualenvs = True
+nox.options.default_venv_backend = "uv|virtualenv"
+
+
+@nox.session
+def tests(session: nox.Session) -> None:
+    session.install("coverage")
+    session.install(".[tests]")
+
+    session.run(
+        "coverage", "run", "-m", "pytest", "--strict-markers", *session.posargs
+    )
+    session.run("coverage", "combine")
+    session.run("coverage", "report", "-m", "--fail-under", "100")
+
+
+@nox.session
+def pep8(session: nox.Session) -> None:
+    session.install("ruff")
+
+    session.run("ruff", "check", ".")
+    session.run("ruff", "format", "--check", ".")
+
+
+@nox.session
+def mypy(session: nox.Session) -> None:
+    session.install("mypy")
+    session.install(".[tests]")
+
+    session.run("mypy", "tests/")
+
+
+@nox.session
+def packaging(session: nox.Session) -> None:
+    session.install("setuptools-rust", "check-manifest", "readme_renderer")
+
+    session.run("check-manifest")
+    session.run(
+        "python3", "-m", "readme_renderer", "README.rst", "-o", "/dev/null"
+    )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bcrypt-4.2.1/pyproject.toml 
new/bcrypt-4.3.0/pyproject.toml
--- old/bcrypt-4.2.1/pyproject.toml     2024-11-19 21:03:02.000000000 +0100
+++ new/bcrypt-4.3.0/pyproject.toml     2025-02-28 02:17:02.000000000 +0100
@@ -11,7 +11,7 @@
 [project]
 name = "bcrypt"
 # When updating this, also update lib.rs
-version = "4.2.1"
+version = "4.3.0"
 authors = [
     {name = "The Python Cryptographic Authority developers", email = 
"cryptography-...@python.org"}
 ]
@@ -24,7 +24,6 @@
     "Programming Language :: Python :: Implementation :: PyPy",
     "Programming Language :: Python :: 3",
     "Programming Language :: Python :: 3 :: Only",
-    "Programming Language :: Python :: 3.7",
     "Programming Language :: Python :: 3.8",
     "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
@@ -32,7 +31,7 @@
     "Programming Language :: Python :: 3.12",
     "Programming Language :: Python :: 3.13",
 ]
-requires-python = ">= 3.7"
+requires-python = ">= 3.8"
 dynamic = ["readme"]
 
 [project.urls]
@@ -73,3 +72,6 @@
 warn_unused_ignores = true
 warn_unused_configs = true
 strict_equality = true
+
+[tool.check-manifest]
+ignore = ["tests/reference/*"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bcrypt-4.2.1/src/_bcrypt/Cargo.lock 
new/bcrypt-4.3.0/src/_bcrypt/Cargo.lock
--- old/bcrypt-4.2.1/src/_bcrypt/Cargo.lock     2024-11-19 21:03:02.000000000 
+0100
+++ new/bcrypt-4.3.0/src/_bcrypt/Cargo.lock     2025-02-28 02:17:02.000000000 
+0100
@@ -16,9 +16,9 @@
 
 [[package]]
 name = "bcrypt"
-version = "0.16.0"
+version = "0.17.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2b1866ecef4f2d06a0bb77880015fdf2b89e25a1c2e5addacb87e459c86dc67e"
+checksum = "92758ad6077e4c76a6cadbce5005f666df70d4f13b19976b1a8062eef880040f"
 dependencies = [
  "base64",
  "blowfish",
@@ -51,6 +51,12 @@
 ]
 
 [[package]]
+name = "bitflags"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36"
+
+[[package]]
 name = "block-buffer"
 version = "0.10.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
@@ -93,9 +99,9 @@
 
 [[package]]
 name = "cpufeatures"
-version = "0.2.15"
+version = "0.2.17"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6"
+checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
 dependencies = [
  "libc",
 ]
@@ -133,13 +139,14 @@
 
 [[package]]
 name = "getrandom"
-version = "0.2.15"
+version = "0.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
+checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8"
 dependencies = [
  "cfg-if",
  "libc",
  "wasi",
+ "windows-targets",
 ]
 
 [[package]]
@@ -156,18 +163,18 @@
 
 [[package]]
 name = "inout"
-version = "0.1.3"
+version = "0.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01"
 dependencies = [
  "generic-array",
 ]
 
 [[package]]
 name = "libc"
-version = "0.2.164"
+version = "0.2.170"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "433bfe06b8c75da9b2e3fbea6e5329ff87748f0b144ef75306e674c3f6f7c13f"
+checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828"
 
 [[package]]
 name = "memoffset"
@@ -180,9 +187,9 @@
 
 [[package]]
 name = "once_cell"
-version = "1.20.2"
+version = "1.20.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
+checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e"
 
 [[package]]
 name = "pbkdf2"
@@ -195,24 +202,24 @@
 
 [[package]]
 name = "portable-atomic"
-version = "1.9.0"
+version = "1.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2"
+checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e"
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.89"
+version = "1.0.93"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e"
+checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99"
 dependencies = [
  "unicode-ident",
 ]
 
 [[package]]
 name = "pyo3"
-version = "0.23.1"
+version = "0.23.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7ebb0c0cc0de9678e53be9ccf8a2ab53045e6e3a8be03393ceccc5e7396ccb40"
+checksum = "7778bffd85cf38175ac1f545509665d0b9b92a198ca7941f131f85f7a4f9a872"
 dependencies = [
  "cfg-if",
  "indoc",
@@ -228,9 +235,9 @@
 
 [[package]]
 name = "pyo3-build-config"
-version = "0.23.1"
+version = "0.23.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "80e3ce69c4ec34476534b490e412b871ba03a82e35604c3dfb95fcb6bfb60c09"
+checksum = "94f6cbe86ef3bf18998d9df6e0f3fc1050a8c5efa409bf712e661a4366e010fb"
 dependencies = [
  "once_cell",
  "target-lexicon",
@@ -238,9 +245,9 @@
 
 [[package]]
 name = "pyo3-ffi"
-version = "0.23.1"
+version = "0.23.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3b09f311c76b36dfd6dd6f7fa6f9f18e7e46a1c937110d283e80b12ba2468a75"
+checksum = "e9f1b4c431c0bb1c8fb0a338709859eed0d030ff6daa34368d3b152a63dfdd8d"
 dependencies = [
  "libc",
  "pyo3-build-config",
@@ -248,9 +255,9 @@
 
 [[package]]
 name = "pyo3-macros"
-version = "0.23.1"
+version = "0.23.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "fd4f74086536d1e1deaff99ec0387481fb3325c82e4e48be0e75ab3d3fcb487a"
+checksum = "fbc2201328f63c4710f68abdf653c89d8dbc2858b88c5d88b0ff38a75288a9da"
 dependencies = [
  "proc-macro2",
  "pyo3-macros-backend",
@@ -260,9 +267,9 @@
 
 [[package]]
 name = "pyo3-macros-backend"
-version = "0.23.1"
+version = "0.23.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9e77dfeb76b32bbf069144a5ea0a36176ab59c8db9ce28732d0f06f096bbfbc8"
+checksum = "fca6726ad0f3da9c9de093d6f116a93c1a38e417ed73bf138472cf4064f72028"
 dependencies = [
  "heck",
  "proc-macro2",
@@ -273,9 +280,9 @@
 
 [[package]]
 name = "quote"
-version = "1.0.37"
+version = "1.0.38"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"
+checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc"
 dependencies = [
  "proc-macro2",
 ]
@@ -299,9 +306,9 @@
 
 [[package]]
 name = "syn"
-version = "2.0.87"
+version = "2.0.98"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d"
+checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -316,15 +323,15 @@
 
 [[package]]
 name = "typenum"
-version = "1.17.0"
+version = "1.18.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
 
 [[package]]
 name = "unicode-ident"
-version = "1.0.13"
+version = "1.0.17"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe"
+checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe"
 
 [[package]]
 name = "unindent"
@@ -340,9 +347,85 @@
 
 [[package]]
 name = "wasi"
-version = "0.11.0+wasi-snapshot-preview1"
+version = "0.13.3+wasi-0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2"
+dependencies = [
+ "wit-bindgen-rt",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_gnullvm",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
+
+[[package]]
+name = "wit-bindgen-rt"
+version = "0.33.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c"
+dependencies = [
+ "bitflags",
+]
 
 [[package]]
 name = "zeroize"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bcrypt-4.2.1/src/_bcrypt/Cargo.toml 
new/bcrypt-4.3.0/src/_bcrypt/Cargo.toml
--- old/bcrypt-4.2.1/src/_bcrypt/Cargo.toml     2024-11-19 21:03:02.000000000 
+0100
+++ new/bcrypt-4.3.0/src/_bcrypt/Cargo.toml     2025-02-28 02:17:02.000000000 
+0100
@@ -6,12 +6,12 @@
 publish = false
 
 [dependencies]
-pyo3 = { version = "0.23", features = ["abi3"] }
-bcrypt = "0.16"
+pyo3 = { version = "0.23.5", features = ["abi3"] }
+bcrypt = "0.17"
 bcrypt-pbkdf = "0.10.0"
 base64 = "0.22.1"
 subtle = "2.6"
-getrandom = "0.2"
+getrandom = "0.3"
 
 [features]
 extension-module = ["pyo3/extension-module"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bcrypt-4.2.1/src/_bcrypt/src/lib.rs 
new/bcrypt-4.3.0/src/_bcrypt/src/lib.rs
--- old/bcrypt-4.2.1/src/_bcrypt/src/lib.rs     2024-11-19 21:03:02.000000000 
+0100
+++ new/bcrypt-4.3.0/src/_bcrypt/src/lib.rs     2025-02-28 02:17:02.000000000 
+0100
@@ -46,7 +46,7 @@
     }
 
     let mut salt = [0; 16];
-    getrandom::getrandom(&mut salt).unwrap();
+    getrandom::fill(&mut salt).unwrap();
 
     let encoded_salt = BASE64_ENGINE.encode(salt);
 
@@ -83,14 +83,14 @@
     // salt here is not just the salt bytes, but rather an encoded value
     // containing a version number, number of rounds, and the salt.
     // Should be [prefix, cost, hash]. This logic is copied from `bcrypt`
-    let raw_parts: Vec<_> = salt
+    let [raw_version, raw_cost, remainder]: [&[u8]; 3] = salt
         .split(|&b| b == b'$')
         .filter(|s| !s.is_empty())
-        .collect();
-    if raw_parts.len() != 3 {
-        return Err(pyo3::exceptions::PyValueError::new_err("Invalid salt"));
-    }
-    let version = match raw_parts[0] {
+        .collect::<Vec<_>>()
+        .try_into()
+        .map_err(|_| pyo3::exceptions::PyValueError::new_err("Invalid salt"))?;
+
+    let version = match raw_version {
         b"2y" => bcrypt::Version::TwoY,
         b"2b" => bcrypt::Version::TwoB,
         b"2a" => bcrypt::Version::TwoA,
@@ -99,15 +99,20 @@
             return Err(pyo3::exceptions::PyValueError::new_err("Invalid 
salt"));
         }
     };
-    let cost = std::str::from_utf8(raw_parts[1])
+    let cost = std::str::from_utf8(raw_cost)
         .map_err(|_| pyo3::exceptions::PyValueError::new_err("Invalid salt"))?
         .parse::<u32>()
         .map_err(|_| pyo3::exceptions::PyValueError::new_err("Invalid salt"))?;
+
+    if remainder.len() < 22 {
+        return Err(pyo3::exceptions::PyValueError::new_err("Invalid salt"));
+    }
+
     // The last component can contain either just the salt, or the salt and
     // the result hash, depending on if the `salt` value come from `hashpw` or
     // `gensalt`.
     let raw_salt = BASE64_ENGINE
-        .decode(&raw_parts[2][..22])
+        .decode(&remainder[..22])
         .map_err(|_| pyo3::exceptions::PyValueError::new_err("Invalid salt"))?
         .try_into()
         .map_err(|_| pyo3::exceptions::PyValueError::new_err("Invalid salt"))?;
@@ -177,7 +182,7 @@
     })
 }
 
-#[pyo3::pymodule]
+#[pyo3::pymodule(gil_used = false)]
 mod _bcrypt {
     use pyo3::types::PyModuleMethods;
 
@@ -197,14 +202,14 @@
         // When updating this, also update pyproject.toml
         // This isn't named __version__ because passlib treats the existence of
         // that attribute as proof that we're a different module
-        m.add("__version_ex__", "4.2.1")?;
+        m.add("__version_ex__", "4.3.0")?;
 
         let author = "The Python Cryptographic Authority developers";
         m.add("__author__", author)?;
         m.add("__email__", "cryptography-...@python.org")?;
 
         m.add("__license__", "Apache License, Version 2.0")?;
-        m.add("__copyright__", format!("Copyright 2013-2024 {author}"))?;
+        m.add("__copyright__", format!("Copyright 2013-2025 {author}"))?;
 
         Ok(())
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bcrypt-4.2.1/src/bcrypt/__init__.py 
new/bcrypt-4.3.0/src/bcrypt/__init__.py
--- old/bcrypt-4.2.1/src/bcrypt/__init__.py     2024-11-19 21:03:02.000000000 
+0100
+++ new/bcrypt-4.3.0/src/bcrypt/__init__.py     2025-02-28 02:17:02.000000000 
+0100
@@ -28,16 +28,16 @@
 )
 
 __all__ = [
-    "gensalt",
-    "hashpw",
-    "checkpw",
-    "kdf",
-    "__title__",
-    "__summary__",
-    "__uri__",
-    "__version__",
     "__author__",
+    "__copyright__",
     "__email__",
     "__license__",
-    "__copyright__",
+    "__summary__",
+    "__title__",
+    "__uri__",
+    "__version__",
+    "checkpw",
+    "gensalt",
+    "hashpw",
+    "kdf",
 ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bcrypt-4.2.1/src/bcrypt.egg-info/PKG-INFO 
new/bcrypt-4.3.0/src/bcrypt.egg-info/PKG-INFO
--- old/bcrypt-4.2.1/src/bcrypt.egg-info/PKG-INFO       2024-11-19 
21:03:09.000000000 +0100
+++ new/bcrypt-4.3.0/src/bcrypt.egg-info/PKG-INFO       2025-02-28 
02:17:09.000000000 +0100
@@ -1,6 +1,6 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.2
 Name: bcrypt
-Version: 4.2.1
+Version: 4.3.0
 Summary: Modern password hashing for your software and your servers
 Author-email: The Python Cryptographic Authority developers 
<cryptography-...@python.org>
 License: Apache-2.0
@@ -11,14 +11,13 @@
 Classifier: Programming Language :: Python :: Implementation :: PyPy
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3 :: Only
-Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: 3.10
 Classifier: Programming Language :: Python :: 3.11
 Classifier: Programming Language :: Python :: 3.12
 Classifier: Programming Language :: Python :: 3.13
-Requires-Python: >=3.7
+Requires-Python: >=3.8
 Description-Content-Type: text/x-rst
 License-File: LICENSE
 Provides-Extra: tests
@@ -79,6 +78,15 @@
 Changelog
 =========
 
+Unreleased
+----------
+
+* Dropped support for Python 3.7.
+* We now support free-threaded Python 3.13.
+* We now support PyPy 3.11.
+* We now publish wheels for free-threaded Python 3.13, for PyPy 3.11 on
+  ``manylinux``, and for ARMv7l on ``manylinux``.
+
 4.2.1
 -----
 
@@ -308,7 +316,7 @@
 -------------
 
 This library should be compatible with py-bcrypt and it will run on Python
-3.6+, and PyPy 3.
+3.8+ (including free-threaded builds), and PyPy 3.
 
 Security
 --------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bcrypt-4.2.1/src/bcrypt.egg-info/SOURCES.txt 
new/bcrypt-4.3.0/src/bcrypt.egg-info/SOURCES.txt
--- old/bcrypt-4.2.1/src/bcrypt.egg-info/SOURCES.txt    2024-11-19 
21:03:09.000000000 +0100
+++ new/bcrypt-4.3.0/src/bcrypt.egg-info/SOURCES.txt    2025-02-28 
02:17:09.000000000 +0100
@@ -2,8 +2,8 @@
 LICENSE
 MANIFEST.in
 README.rst
+noxfile.py
 pyproject.toml
-tox.ini
 src/_bcrypt/Cargo.lock
 src/_bcrypt/Cargo.toml
 src/_bcrypt/src/lib.rs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bcrypt-4.2.1/tests/test_bcrypt.py 
new/bcrypt-4.3.0/tests/test_bcrypt.py
--- old/bcrypt-4.2.1/tests/test_bcrypt.py       2024-11-19 21:03:02.000000000 
+0100
+++ new/bcrypt-4.3.0/tests/test_bcrypt.py       2025-02-28 02:17:02.000000000 
+0100
@@ -1,3 +1,6 @@
+import uuid
+from concurrent.futures import ThreadPoolExecutor
+
 import pytest
 
 import bcrypt
@@ -171,7 +174,7 @@
 ]
 
 
-def test_gensalt_basic(monkeypatch):
+def test_gensalt_basic():
     salt = bcrypt.gensalt()
     assert salt.startswith(b"$2b$12$")
 
@@ -219,7 +222,7 @@
         bcrypt.gensalt(prefix=b"bad")
 
 
-def test_gensalt_2a_prefix(monkeypatch):
+def test_gensalt_2a_prefix():
     salt = bcrypt.gensalt(prefix=b"2a")
     assert salt.startswith(b"$2a$12$")
 
@@ -275,6 +278,8 @@
             b"password",
             b"$2b$3$mdEQPMOtfPX.WGZNXgF66OhmBlOGKEd66SQ7DyJPGucYYmvTJYviy",
         )
+    with pytest.raises(ValueError):
+        bcrypt.checkpw(b"password", b"$2b$12$incorrect")
 
 
 def test_checkpw_str_password():
@@ -492,3 +497,24 @@
         )
         == b"$2a$04$R1lJ2gkNaoPGdafE.H.16.1MKHPvmKwryeulRe225LKProWYwt9Oi"
     )
+
+
+def test_multithreading():
+    def create_user(pw):
+        salt = bcrypt.gensalt(4)
+        hash_ = bcrypt.hashpw(pw, salt)
+        key = bcrypt.kdf(pw, salt, 32, 50)
+        assert bcrypt.checkpw(pw, hash_)
+        return (salt, hash_, key)
+
+    user_creator = ThreadPoolExecutor(max_workers=4)
+    pws = [uuid.uuid4().bytes for _ in range(50)]
+
+    futures = [user_creator.submit(create_user, pw) for pw in pws]
+
+    users = [future.result() for future in futures]
+
+    for pw, (salt, hash_, key) in zip(pws, users):
+        assert bcrypt.hashpw(pw, salt) == hash_
+        assert bcrypt.checkpw(pw, hash_)
+        assert bcrypt.kdf(pw, salt, 32, 50) == key
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bcrypt-4.2.1/tox.ini new/bcrypt-4.3.0/tox.ini
--- old/bcrypt-4.2.1/tox.ini    2024-11-19 21:03:02.000000000 +0100
+++ new/bcrypt-4.3.0/tox.ini    1970-01-01 01:00:00.000000000 +0100
@@ -1,43 +0,0 @@
-[tox]
-isolated_build = True
-
-[testenv]
-extras =
-    tests
-deps =
-    coverage
-passenv =
-    RUSTUP_HOME
-commands =
-    coverage run -m pytest --strict-markers {posargs}
-    coverage combine
-    coverage report -m --fail-under 100
-
-[testenv:pep8]
-deps =
-    ruff
-commands =
-    ruff check .
-    ruff format --check .
-
-[testenv:mypy]
-extras =
-    tests
-deps =
-    mypy
-commands =
-    mypy tests/
-
-[testenv:packaging]
-deps =
-    setuptools-rust
-    check-manifest
-    readme_renderer
-commands =
-    check-manifest
-    python3 -m readme_renderer README.rst -o /dev/null
-
-
-[check-manifest]
-ignore =
-    tests/reference/*

++++++ vendor.tar.gz ++++++
++++ 783778 lines of diff (skipped)

Reply via email to