summaryrefslogtreecommitdiff
path: root/passlib/tests/test_handlers_bcrypt.py
diff options
context:
space:
mode:
Diffstat (limited to 'passlib/tests/test_handlers_bcrypt.py')
-rw-r--r--passlib/tests/test_handlers_bcrypt.py77
1 files changed, 8 insertions, 69 deletions
diff --git a/passlib/tests/test_handlers_bcrypt.py b/passlib/tests/test_handlers_bcrypt.py
index 64fc8bf..abe44ec 100644
--- a/passlib/tests/test_handlers_bcrypt.py
+++ b/passlib/tests/test_handlers_bcrypt.py
@@ -2,7 +2,6 @@
#=============================================================================
# imports
#=============================================================================
-from __future__ import with_statement
# core
import logging; log = logging.getLogger(__name__)
import os
@@ -12,7 +11,6 @@ import warnings
from passlib import hash
from passlib.handlers.bcrypt import IDENT_2, IDENT_2X
from passlib.utils import repeat_string, to_bytes, is_safe_crypt_input
-from passlib.utils.compat import irange, PY3
from passlib.tests.utils import HandlerCase, TEST_MODE
from passlib.tests.test_handlers import UPASS_TABLE
# module
@@ -179,7 +177,7 @@ class _bcrypt_test(HandlerCase):
self.addCleanup(os.environ.__delitem__, key)
os.environ[key] = "true"
- super(_bcrypt_test, self).setUp()
+ super().setUp()
# silence this warning, will come up a bunch during testing of old 2a hashes.
warnings.filterwarnings("ignore", ".*backend is vulnerable to the bsd wraparound bug.*")
@@ -188,7 +186,7 @@ class _bcrypt_test(HandlerCase):
# builtin is still just way too slow.
if self.backend == "builtin":
kwds.setdefault("rounds", 4)
- super(_bcrypt_test, self).populate_settings(kwds)
+ super().populate_settings(kwds)
#===================================================================
# fuzz testing
@@ -202,8 +200,6 @@ class _bcrypt_test(HandlerCase):
fuzz_verifiers = HandlerCase.fuzz_verifiers + (
"fuzz_verifier_bcrypt",
- "fuzz_verifier_pybcrypt",
- "fuzz_verifier_bcryptor",
)
def fuzz_verifier_bcrypt(self):
@@ -238,61 +234,6 @@ class _bcrypt_test(HandlerCase):
raise ValueError("bcrypt rejected hash: %r (secret=%r)" % (hash, secret))
return check_bcrypt
- def fuzz_verifier_pybcrypt(self):
- # test against py-bcrypt, if available
- from passlib.handlers.bcrypt import (
- IDENT_2, IDENT_2A, IDENT_2B, IDENT_2X, IDENT_2Y,
- _PyBcryptBackend,
- )
- from passlib.utils import to_native_str
-
- loaded = _PyBcryptBackend._load_backend_mixin("pybcrypt", False)
- if not loaded:
- return
-
- from passlib.handlers.bcrypt import _pybcrypt as bcrypt_mod
-
- lock = _PyBcryptBackend._calc_lock # reuse threadlock workaround for pybcrypt 0.2
-
- def check_pybcrypt(secret, hash):
- """pybcrypt"""
- secret = to_native_str(secret, self.FuzzHashGenerator.password_encoding)
- if len(secret) > 200: # vulnerable to wraparound bug
- secret = secret[:200]
- if hash.startswith((IDENT_2B, IDENT_2Y)):
- hash = IDENT_2A + hash[4:]
- try:
- if lock:
- with lock:
- return bcrypt_mod.hashpw(secret, hash) == hash
- else:
- return bcrypt_mod.hashpw(secret, hash) == hash
- except ValueError:
- raise ValueError("py-bcrypt rejected hash: %r" % (hash,))
- return check_pybcrypt
-
- def fuzz_verifier_bcryptor(self):
- # test against bcryptor if available
- from passlib.handlers.bcrypt import IDENT_2, IDENT_2A, IDENT_2Y, IDENT_2B
- from passlib.utils import to_native_str
- try:
- from bcryptor.engine import Engine
- except ImportError:
- return
- def check_bcryptor(secret, hash):
- """bcryptor"""
- secret = to_native_str(secret, self.FuzzHashGenerator.password_encoding)
- if hash.startswith((IDENT_2B, IDENT_2Y)):
- hash = IDENT_2A + hash[4:]
- elif hash.startswith(IDENT_2):
- # bcryptor doesn't support $2$ hashes; but we can fake it
- # using the $2a$ algorithm, by repeating the password until
- # it's 72 chars in length.
- hash = IDENT_2A + hash[3:]
- if secret:
- secret = repeat_string(secret, 72)
- return Engine(False).hash_key(secret, hash) == hash
- return check_bcryptor
class FuzzHashGenerator(HandlerCase.FuzzHashGenerator):
@@ -366,9 +307,9 @@ class _bcrypt_test(HandlerCase):
"unexpectedly malformed hash: %r" % (hash,)
self.assertTrue(hash[28] in '.Oeu',
"unused bits incorrectly set in hash: %r" % (hash,))
- for i in irange(6):
+ for i in range(6):
check_padding(bcrypt.genconfig())
- for i in irange(3):
+ for i in range(3):
check_padding(bcrypt.using(rounds=bcrypt.min_rounds).hash("bob"))
#
@@ -425,8 +366,7 @@ class _bcrypt_test(HandlerCase):
# create test cases for specific backends
bcrypt_bcrypt_test = _bcrypt_test.create_backend_case("bcrypt")
-bcrypt_pybcrypt_test = _bcrypt_test.create_backend_case("pybcrypt")
-bcrypt_bcryptor_test = _bcrypt_test.create_backend_case("bcryptor")
+
class bcrypt_os_crypt_test(_bcrypt_test.create_backend_case("os_crypt")):
@@ -583,14 +523,14 @@ class _bcrypt_sha256_test(HandlerCase):
else:
self.addCleanup(os.environ.__delitem__, key)
os.environ[key] = "enabled"
- super(_bcrypt_sha256_test, self).setUp()
+ super().setUp()
warnings.filterwarnings("ignore", ".*backend is vulnerable to the bsd wraparound bug.*")
def populate_settings(self, kwds):
# builtin is still just way too slow.
if self.backend == "builtin":
kwds.setdefault("rounds", 4)
- super(_bcrypt_sha256_test, self).populate_settings(kwds)
+ super().populate_settings(kwds)
#===================================================================
# override ident tests for now
@@ -670,8 +610,7 @@ class _bcrypt_sha256_test(HandlerCase):
# create test cases for specific backends
bcrypt_sha256_bcrypt_test = _bcrypt_sha256_test.create_backend_case("bcrypt")
-bcrypt_sha256_pybcrypt_test = _bcrypt_sha256_test.create_backend_case("pybcrypt")
-bcrypt_sha256_bcryptor_test = _bcrypt_sha256_test.create_backend_case("bcryptor")
+
class bcrypt_sha256_os_crypt_test(_bcrypt_sha256_test.create_backend_case("os_crypt")):