Properly force bytes or str for bcrypt on Python3

This commit is contained in:
Donald Stufft 2013-05-11 01:33:10 -04:00
parent 9012833af8
commit 3070e8f711
1 changed files with 5 additions and 2 deletions

View File

@ -9,7 +9,7 @@ from django.conf import settings
from django.test.signals import setting_changed
from django.utils import importlib
from django.utils.datastructures import SortedDict
from django.utils.encoding import force_bytes, force_str
from django.utils.encoding import force_bytes, force_str, force_text
from django.core.exceptions import ImproperlyConfigured
from django.utils.crypto import (
pbkdf2, constant_time_compare, get_random_string)
@ -291,7 +291,7 @@ class BCryptSHA256PasswordHasher(BasePasswordHasher):
password = force_bytes(password)
data = bcrypt.hashpw(password, salt)
return "%s$%s" % (self.algorithm, data)
return "%s$%s" % (self.algorithm, force_text(data))
def verify(self, password, encoded):
algorithm, data = encoded.split('$', 1)
@ -307,6 +307,9 @@ class BCryptSHA256PasswordHasher(BasePasswordHasher):
else:
password = force_bytes(password)
# Ensure that our data is a bytestring
data = force_bytes(data)
return constant_time_compare(data, bcrypt.hashpw(password, data))
def safe_summary(self, encoded):