Merge pull request #1052 from dstufft/bcrypt-python3

BCrypt on Python3
This commit is contained in:
Donald Stufft 2013-05-11 10:53:18 -07:00
commit 11c7ec7993
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.test.signals import setting_changed
from django.utils import importlib from django.utils import importlib
from django.utils.datastructures import SortedDict 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.core.exceptions import ImproperlyConfigured
from django.utils.crypto import ( from django.utils.crypto import (
pbkdf2, constant_time_compare, get_random_string) pbkdf2, constant_time_compare, get_random_string)
@ -291,7 +291,7 @@ class BCryptSHA256PasswordHasher(BasePasswordHasher):
password = force_bytes(password) password = force_bytes(password)
data = bcrypt.hashpw(password, salt) data = bcrypt.hashpw(password, salt)
return "%s$%s" % (self.algorithm, data) return "%s$%s" % (self.algorithm, force_text(data))
def verify(self, password, encoded): def verify(self, password, encoded):
algorithm, data = encoded.split('$', 1) algorithm, data = encoded.split('$', 1)
@ -307,6 +307,9 @@ class BCryptSHA256PasswordHasher(BasePasswordHasher):
else: else:
password = force_bytes(password) password = force_bytes(password)
# Ensure that our data is a bytestring
data = force_bytes(data)
return constant_time_compare(data, bcrypt.hashpw(password, data)) return constant_time_compare(data, bcrypt.hashpw(password, data))
def safe_summary(self, encoded): def safe_summary(self, encoded):