Hi, while playing with Ansible I saw an issue with password_hash('blowfish') filter - it did not work[1], and I found py-passlib has newer version.
With py-passlib 1.7.0 I am able with little change in Ansible (22 chars long salt) to make encrypted passwords using Blowfish on OpenBSD. With old py-passlib I could not make passwords to have '2b' ident. I did not test much, not enough skills here :/ There sure will be some mistakes, sorry. (My goal was just make Ansible do valid passwords encryption. Not sure I follow good way.) j. [1] https://marc.info/?l=openbsd-ports&m=148482296414763&w=2 ~~ --- /usr/local/lib/python2.7/site-packages/ansible/plugins/filter/core.py.orig Thu Jan 19 18:46:05 2017 +++ /usr/local/lib/python2.7/site-packages/ansible/plugins/filter/core.py Thu Jan 19 18:48:42 2017 @ -247,6 +247,8 @@ def get_encrypted_password(password, hashtype='sha512' r = SystemRandom() if hashtype in ['md5']: saltsize = 8 + elif hashtype in ['blowfish']: + saltsize = 22 else: saltsize = 16 salt = ''.join([r.choice(string.ascii_letters + string.digits) for _ in range(saltsize)]) # ~~~ Diff: ~~~ Index: Makefile =================================================================== RCS file: /cvs/ports/security/py-passlib/Makefile,v retrieving revision 1.8 diff -u -p -u -p -r1.8 Makefile --- Makefile 3 Jan 2017 19:26:14 -0000 1.8 +++ Makefile 19 Jan 2017 17:49:35 -0000 @@ -2,10 +2,9 @@ COMMENT = Python module providing a password hashing framework -MODPY_EGG_VERSION = 1.6.5 +MODPY_EGG_VERSION = 1.7.0 DISTNAME = passlib-${MODPY_EGG_VERSION} PKGNAME = py-passlib-${MODPY_EGG_VERSION} -REVISION = 0 CATEGORIES = security Index: distinfo =================================================================== RCS file: /cvs/ports/security/py-passlib/distinfo,v retrieving revision 1.2 diff -u -p -u -p -r1.2 distinfo --- distinfo 15 Jan 2016 12:46:36 -0000 1.2 +++ distinfo 19 Jan 2017 17:49:35 -0000 @@ -1,2 +1,2 @@ -SHA256 (passlib-1.6.5.tar.gz) = qD009T3JsXqkLJo1w/vMUSDz/LB/f4ch7EXmonvjR/w= -SIZE (passlib-1.6.5.tar.gz) = 417044 +SHA256 (passlib-1.7.0.tar.gz) = C+T2BTNXxOu6VXigZfva11qERQHUxtkdSjoMFZTGq+0= +SIZE (passlib-1.7.0.tar.gz) = 637909 Index: pkg/PLIST =================================================================== RCS file: /cvs/ports/security/py-passlib/pkg/PLIST,v retrieving revision 1.3 diff -u -p -u -p -r1.3 PLIST --- pkg/PLIST 13 May 2014 09:18:24 -0000 1.3 +++ pkg/PLIST 19 Jan 2017 17:49:35 -0000 @@ -1,11 +1,12 @@ @comment $OpenBSD: PLIST,v 1.3 2014/05/13 09:18:24 sthen Exp $ lib/python${MODPY_VERSION}/site-packages/passlib/ -lib/python${MODPY_VERSION}/site-packages/passlib-${MODPY_EGG_VERSION}-py${MODPY_VERSION}.egg-info/ -lib/python${MODPY_VERSION}/site-packages/passlib-${MODPY_EGG_VERSION}-py${MODPY_VERSION}.egg-info/PKG-INFO -lib/python${MODPY_VERSION}/site-packages/passlib-${MODPY_EGG_VERSION}-py${MODPY_VERSION}.egg-info/SOURCES.txt -lib/python${MODPY_VERSION}/site-packages/passlib-${MODPY_EGG_VERSION}-py${MODPY_VERSION}.egg-info/dependency_links.txt -lib/python${MODPY_VERSION}/site-packages/passlib-${MODPY_EGG_VERSION}-py${MODPY_VERSION}.egg-info/top_level.txt -lib/python${MODPY_VERSION}/site-packages/passlib-${MODPY_EGG_VERSION}-py${MODPY_VERSION}.egg-info/zip-safe +lib/python${MODPY_VERSION}/site-packages/passlib-${MODPY_EGG_VERSION}.post20170119181752-py${MODPY_VERSION}.egg-info/ +lib/python${MODPY_VERSION}/site-packages/passlib-${MODPY_EGG_VERSION}.post20170119181752-py${MODPY_VERSION}.egg-info/PKG-INFO +lib/python${MODPY_VERSION}/site-packages/passlib-${MODPY_EGG_VERSION}.post20170119181752-py${MODPY_VERSION}.egg-info/SOURCES.txt +lib/python${MODPY_VERSION}/site-packages/passlib-${MODPY_EGG_VERSION}.post20170119181752-py${MODPY_VERSION}.egg-info/dependency_links.txt +lib/python${MODPY_VERSION}/site-packages/passlib-${MODPY_EGG_VERSION}.post20170119181752-py${MODPY_VERSION}.egg-info/requires.txt +lib/python${MODPY_VERSION}/site-packages/passlib-${MODPY_EGG_VERSION}.post20170119181752-py${MODPY_VERSION}.egg-info/top_level.txt +lib/python${MODPY_VERSION}/site-packages/passlib-${MODPY_EGG_VERSION}.post20170119181752-py${MODPY_VERSION}.egg-info/zip-safe lib/python${MODPY_VERSION}/site-packages/passlib/__init__.py ${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/passlib/${MODPY_PYCACHE}/ lib/python${MODPY_VERSION}/site-packages/passlib/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc @@ -16,8 +17,16 @@ lib/python${MODPY_VERSION}/site-packages lib/python${MODPY_VERSION}/site-packages/passlib/${MODPY_PYCACHE}hash.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/${MODPY_PYCACHE}hosts.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/${MODPY_PYCACHE}ifc.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/${MODPY_PYCACHE}pwd.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/${MODPY_PYCACHE}registry.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/${MODPY_PYCACHE}totp.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/${MODPY_PYCACHE}win32.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/_data/ +lib/python${MODPY_VERSION}/site-packages/passlib/_data/wordsets/ +lib/python${MODPY_VERSION}/site-packages/passlib/_data/wordsets/bip39.txt +lib/python${MODPY_VERSION}/site-packages/passlib/_data/wordsets/eff_long.txt +lib/python${MODPY_VERSION}/site-packages/passlib/_data/wordsets/eff_prefixed.txt +lib/python${MODPY_VERSION}/site-packages/passlib/_data/wordsets/eff_short.txt lib/python${MODPY_VERSION}/site-packages/passlib/_setup/ lib/python${MODPY_VERSION}/site-packages/passlib/_setup/__init__.py ${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/passlib/_setup/${MODPY_PYCACHE}/ @@ -29,6 +38,36 @@ lib/python${MODPY_VERSION}/site-packages lib/python${MODPY_VERSION}/site-packages/passlib/apache.py lib/python${MODPY_VERSION}/site-packages/passlib/apps.py lib/python${MODPY_VERSION}/site-packages/passlib/context.py +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/ +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/__init__.py +${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/passlib/crypto/${MODPY_PYCACHE}/ +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/${MODPY_PYCACHE}_md4.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/${MODPY_PYCACHE}des.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/${MODPY_PYCACHE}digest.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/_blowfish/ +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/_blowfish/__init__.py +${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/passlib/crypto/_blowfish/${MODPY_PYCACHE}/ +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/_blowfish/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/_blowfish/${MODPY_PYCACHE}_gen_files.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/_blowfish/${MODPY_PYCACHE}base.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/_blowfish/${MODPY_PYCACHE}unrolled.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/_blowfish/_gen_files.py +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/_blowfish/base.py +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/_blowfish/unrolled.py +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/_md4.py +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/des.py +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/digest.py +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/scrypt/ +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/scrypt/__init__.py +${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/passlib/crypto/scrypt/${MODPY_PYCACHE}/ +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/scrypt/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/scrypt/${MODPY_PYCACHE}_builtin.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/scrypt/${MODPY_PYCACHE}_gen_files.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/scrypt/${MODPY_PYCACHE}_salsa.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/scrypt/_builtin.py +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/scrypt/_gen_files.py +lib/python${MODPY_VERSION}/site-packages/passlib/crypto/scrypt/_salsa.py lib/python${MODPY_VERSION}/site-packages/passlib/exc.py lib/python${MODPY_VERSION}/site-packages/passlib/ext/ lib/python${MODPY_VERSION}/site-packages/passlib/ext/__init__.py @@ -46,6 +85,7 @@ lib/python${MODPY_VERSION}/site-packages lib/python${MODPY_VERSION}/site-packages/passlib/handlers/__init__.py ${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/passlib/handlers/${MODPY_PYCACHE}/ lib/python${MODPY_VERSION}/site-packages/passlib/handlers/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/handlers/${MODPY_PYCACHE}argon2.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/handlers/${MODPY_PYCACHE}bcrypt.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/handlers/${MODPY_PYCACHE}cisco.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/handlers/${MODPY_PYCACHE}des_crypt.${MODPY_PYC_MAGIC_TAG}pyc @@ -63,10 +103,12 @@ lib/python${MODPY_VERSION}/site-packages lib/python${MODPY_VERSION}/site-packages/passlib/handlers/${MODPY_PYCACHE}postgres.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/handlers/${MODPY_PYCACHE}roundup.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/handlers/${MODPY_PYCACHE}scram.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/handlers/${MODPY_PYCACHE}scrypt.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/handlers/${MODPY_PYCACHE}sha1_crypt.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/handlers/${MODPY_PYCACHE}sha2_crypt.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/handlers/${MODPY_PYCACHE}sun_md5_crypt.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/handlers/${MODPY_PYCACHE}windows.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/handlers/argon2.py lib/python${MODPY_VERSION}/site-packages/passlib/handlers/bcrypt.py lib/python${MODPY_VERSION}/site-packages/passlib/handlers/cisco.py lib/python${MODPY_VERSION}/site-packages/passlib/handlers/des_crypt.py @@ -84,6 +126,7 @@ lib/python${MODPY_VERSION}/site-packages lib/python${MODPY_VERSION}/site-packages/passlib/handlers/postgres.py lib/python${MODPY_VERSION}/site-packages/passlib/handlers/roundup.py lib/python${MODPY_VERSION}/site-packages/passlib/handlers/scram.py +lib/python${MODPY_VERSION}/site-packages/passlib/handlers/scrypt.py lib/python${MODPY_VERSION}/site-packages/passlib/handlers/sha1_crypt.py lib/python${MODPY_VERSION}/site-packages/passlib/handlers/sha2_crypt.py lib/python${MODPY_VERSION}/site-packages/passlib/handlers/sun_md5_crypt.py @@ -91,6 +134,7 @@ lib/python${MODPY_VERSION}/site-packages lib/python${MODPY_VERSION}/site-packages/passlib/hash.py lib/python${MODPY_VERSION}/site-packages/passlib/hosts.py lib/python${MODPY_VERSION}/site-packages/passlib/ifc.py +lib/python${MODPY_VERSION}/site-packages/passlib/pwd.py lib/python${MODPY_VERSION}/site-packages/passlib/registry.py lib/python${MODPY_VERSION}/site-packages/passlib/tests/ lib/python${MODPY_VERSION}/site-packages/passlib/tests/__init__.py @@ -104,15 +148,26 @@ lib/python${MODPY_VERSION}/site-packages lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}test_apps.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}test_context.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}test_context_deprecated.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}test_crypto_builtin_md4.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}test_crypto_des.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}test_crypto_digest.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}test_crypto_scrypt.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}test_ext_django.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}test_ext_django_source.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}test_handlers.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}test_handlers_argon2.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}test_handlers_bcrypt.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}test_handlers_django.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}test_handlers_pbkdf2.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}test_handlers_scrypt.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}test_hosts.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}test_pwd.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}test_registry.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}test_totp.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}test_utils.${MODPY_PYC_MAGIC_TAG}pyc -lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}test_utils_crypto.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}test_utils_handlers.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}test_utils_md4.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}test_utils_pbkdf2.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}test_win32.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}tox_support.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/tests/${MODPY_PYCACHE}utils.${MODPY_PYC_MAGIC_TAG}pyc @@ -126,38 +181,48 @@ lib/python${MODPY_VERSION}/site-packages lib/python${MODPY_VERSION}/site-packages/passlib/tests/test_apps.py lib/python${MODPY_VERSION}/site-packages/passlib/tests/test_context.py lib/python${MODPY_VERSION}/site-packages/passlib/tests/test_context_deprecated.py +lib/python${MODPY_VERSION}/site-packages/passlib/tests/test_crypto_builtin_md4.py +lib/python${MODPY_VERSION}/site-packages/passlib/tests/test_crypto_des.py +lib/python${MODPY_VERSION}/site-packages/passlib/tests/test_crypto_digest.py +lib/python${MODPY_VERSION}/site-packages/passlib/tests/test_crypto_scrypt.py lib/python${MODPY_VERSION}/site-packages/passlib/tests/test_ext_django.py +lib/python${MODPY_VERSION}/site-packages/passlib/tests/test_ext_django_source.py lib/python${MODPY_VERSION}/site-packages/passlib/tests/test_handlers.py +lib/python${MODPY_VERSION}/site-packages/passlib/tests/test_handlers_argon2.py lib/python${MODPY_VERSION}/site-packages/passlib/tests/test_handlers_bcrypt.py lib/python${MODPY_VERSION}/site-packages/passlib/tests/test_handlers_django.py +lib/python${MODPY_VERSION}/site-packages/passlib/tests/test_handlers_pbkdf2.py +lib/python${MODPY_VERSION}/site-packages/passlib/tests/test_handlers_scrypt.py lib/python${MODPY_VERSION}/site-packages/passlib/tests/test_hosts.py +lib/python${MODPY_VERSION}/site-packages/passlib/tests/test_pwd.py lib/python${MODPY_VERSION}/site-packages/passlib/tests/test_registry.py +lib/python${MODPY_VERSION}/site-packages/passlib/tests/test_totp.py lib/python${MODPY_VERSION}/site-packages/passlib/tests/test_utils.py -lib/python${MODPY_VERSION}/site-packages/passlib/tests/test_utils_crypto.py lib/python${MODPY_VERSION}/site-packages/passlib/tests/test_utils_handlers.py +lib/python${MODPY_VERSION}/site-packages/passlib/tests/test_utils_md4.py +lib/python${MODPY_VERSION}/site-packages/passlib/tests/test_utils_pbkdf2.py lib/python${MODPY_VERSION}/site-packages/passlib/tests/test_win32.py lib/python${MODPY_VERSION}/site-packages/passlib/tests/tox_support.py lib/python${MODPY_VERSION}/site-packages/passlib/tests/utils.py +lib/python${MODPY_VERSION}/site-packages/passlib/totp.py lib/python${MODPY_VERSION}/site-packages/passlib/utils/ lib/python${MODPY_VERSION}/site-packages/passlib/utils/__init__.py ${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/passlib/utils/${MODPY_PYCACHE}/ lib/python${MODPY_VERSION}/site-packages/passlib/utils/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc -lib/python${MODPY_VERSION}/site-packages/passlib/utils/${MODPY_PYCACHE}compat.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/utils/${MODPY_PYCACHE}binary.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/utils/${MODPY_PYCACHE}decor.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/utils/${MODPY_PYCACHE}des.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/utils/${MODPY_PYCACHE}handlers.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/utils/${MODPY_PYCACHE}md4.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/passlib/utils/${MODPY_PYCACHE}pbkdf2.${MODPY_PYC_MAGIC_TAG}pyc -lib/python${MODPY_VERSION}/site-packages/passlib/utils/_blowfish/ -lib/python${MODPY_VERSION}/site-packages/passlib/utils/_blowfish/__init__.py -${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/passlib/utils/_blowfish/${MODPY_PYCACHE}/ -lib/python${MODPY_VERSION}/site-packages/passlib/utils/_blowfish/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc -lib/python${MODPY_VERSION}/site-packages/passlib/utils/_blowfish/${MODPY_PYCACHE}_gen_files.${MODPY_PYC_MAGIC_TAG}pyc -lib/python${MODPY_VERSION}/site-packages/passlib/utils/_blowfish/${MODPY_PYCACHE}base.${MODPY_PYC_MAGIC_TAG}pyc -lib/python${MODPY_VERSION}/site-packages/passlib/utils/_blowfish/${MODPY_PYCACHE}unrolled.${MODPY_PYC_MAGIC_TAG}pyc -lib/python${MODPY_VERSION}/site-packages/passlib/utils/_blowfish/_gen_files.py -lib/python${MODPY_VERSION}/site-packages/passlib/utils/_blowfish/base.py -lib/python${MODPY_VERSION}/site-packages/passlib/utils/_blowfish/unrolled.py -lib/python${MODPY_VERSION}/site-packages/passlib/utils/compat.py +lib/python${MODPY_VERSION}/site-packages/passlib/utils/binary.py +lib/python${MODPY_VERSION}/site-packages/passlib/utils/compat/ +lib/python${MODPY_VERSION}/site-packages/passlib/utils/compat/__init__.py +${MODPY_COMMENT}lib/python${MODPY_VERSION}/site-packages/passlib/utils/compat/${MODPY_PYCACHE}/ +lib/python${MODPY_VERSION}/site-packages/passlib/utils/compat/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/utils/compat/${MODPY_PYCACHE}_ordered_dict.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/passlib/utils/compat/_ordered_dict.py +lib/python${MODPY_VERSION}/site-packages/passlib/utils/decor.py lib/python${MODPY_VERSION}/site-packages/passlib/utils/des.py lib/python${MODPY_VERSION}/site-packages/passlib/utils/handlers.py lib/python${MODPY_VERSION}/site-packages/passlib/utils/md4.py ~~~