--- /dev/null
+diff --git a/passlib/utils/__init__.py b/passlib/utils/__init__.py
+index 69b55e5..d18ec50 100644
+--- a/passlib/utils/__init__.py
++++ b/passlib/utils/__init__.py
+@@ -807,7 +807,13 @@ else:
+
+ if isinstance(hash, bytes):
+ hash = hash.decode("ascii")
+- result = _crypt(secret, hash)
++ try:
++ result = _crypt(secret, hash)
++ except OSError:
++ # new in py39 -- per https://bugs.python.org/issue39289,
++ # crypt() now throws OSError for various things, mainly unknown hash formats
++ # translating that to None for now (may revise safe_crypt behavior in future)
++ return None
+ if PYPY and isinstance(result, bytes):
+ result = result.decode("utf-8")
+ if not result or result[0:1] in _invalid_prefixes:
# Distributed under the terms of the GNU General Public License v2
EAPI=7
-PYTHON_COMPAT=( python{2_7,3_{6,7,8}} pypy3 )
+PYTHON_COMPAT=( python{2_7,3_{6,7,8,9}} pypy3 )
inherit distutils-r1
RDEPEND="bcrypt? ( dev-python/bcrypt[${PYTHON_USEDEP}] )
totp? ( dev-python/cryptography[${PYTHON_USEDEP}] )
scrypt? ( dev-python/scrypt[${PYTHON_USEDEP}] )"
-DEPEND="${RDEPEND}
- dev-python/setuptools[${PYTHON_USEDEP}]"
+BDEPEND="
+ test? (
+ dev-python/bcrypt[${PYTHON_USEDEP}]
+ dev-python/cryptography[${PYTHON_USEDEP}]
+ dev-python/scrypt[${PYTHON_USEDEP}]
+ )"
PATCHES=(
"${FILESDIR}/passlib-1.7.2-pypy3.patch"
+ "${FILESDIR}/passlib-1.7.2-py39.patch"
)
distutils_enable_tests nose