commit
f94682bd26
@ -15,6 +15,8 @@ env:
|
||||
- TOXENV=py33 CC=clang
|
||||
- TOXENV=py34 CC=clang
|
||||
- TOXENV=pypy CC=clang
|
||||
- TOXENV=pep8
|
||||
- TOXENV=py3pep8
|
||||
|
||||
install: pip install tox
|
||||
|
||||
|
||||
@ -24,11 +24,17 @@ from cffi import FFI
|
||||
|
||||
import six
|
||||
|
||||
from . import __about__
|
||||
from .__about__ import *
|
||||
from .__about__ import (
|
||||
__author__, __copyright__, __email__, __license__, __summary__, __title__,
|
||||
__uri__, __version__,
|
||||
)
|
||||
|
||||
|
||||
__all__ = ["gensalt", "hashpw"] + __about__.__all__
|
||||
__all__ = [
|
||||
"__title__", "__summary__", "__uri__", "__version__", "__author__",
|
||||
"__email__", "__license__", "__copyright__",
|
||||
"gensalt", "hashpw",
|
||||
]
|
||||
|
||||
|
||||
_crypt_blowfish_dir = "crypt_blowfish-1.2"
|
||||
@ -42,26 +48,30 @@ _ffi.cdef("""
|
||||
char *crypt_rn(const char *key, const char *setting, void *data, int size);
|
||||
""")
|
||||
|
||||
_bcrypt_lib = _ffi.verify('#include "ow-crypt.h"',
|
||||
_bcrypt_lib = _ffi.verify(
|
||||
'#include "ow-crypt.h"',
|
||||
sources=[
|
||||
str(os.path.join(_bundled_dir, "crypt_blowfish.c")),
|
||||
str(os.path.join(_bundled_dir, "crypt_gensalt.c")),
|
||||
str(os.path.join(_bundled_dir, "wrapper.c")),
|
||||
# How can we get distutils to work with a .S file?
|
||||
# Set https://github.com/dstufft/bcrypt/blob/4c939e895bd9607301cda6d6f05ef3c1146eb658/bcrypt/crypt_blowfish-1.2/crypt_blowfish.c#L57
|
||||
# Set https://github.com/dstufft/bcrypt/blob/4c939e895bd9607301cda6d
|
||||
# 6f05ef3c1146eb658/bcrypt/crypt_blowfish-1.2/crypt_blowfish.c#L57
|
||||
# back to 1 if we get ASM loaded.
|
||||
# str(os.path.join(_bundled_dir, "x86.S")),
|
||||
],
|
||||
include_dirs=[str(_bundled_dir)],
|
||||
modulename=str("_".join([
|
||||
"_cffi",
|
||||
hashlib.sha1(
|
||||
"".join(_ffi._cdefsources).encode("utf-8")
|
||||
).hexdigest()[:6],
|
||||
hashlib.sha1(
|
||||
_crypt_blowfish_dir.encode("utf-8")
|
||||
).hexdigest()[:6],
|
||||
])),
|
||||
modulename=str(
|
||||
"_".join([
|
||||
"_cffi",
|
||||
hashlib.sha1(
|
||||
"".join(_ffi._cdefsources).encode("utf-8")
|
||||
).hexdigest()[:6],
|
||||
hashlib.sha1(
|
||||
_crypt_blowfish_dir.encode("utf-8")
|
||||
).hexdigest()[:6],
|
||||
]),
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@ -70,7 +80,8 @@ def gensalt(rounds=12):
|
||||
output = _ffi.new("unsigned char[]", 30)
|
||||
|
||||
retval = _bcrypt_lib.crypt_gensalt_rn(
|
||||
b"$2a$", rounds, salt, len(salt), output, len(output))
|
||||
b"$2a$", rounds, salt, len(salt), output, len(output),
|
||||
)
|
||||
|
||||
if not retval:
|
||||
raise ValueError("Invalid rounds")
|
||||
|
||||
8
setup.py
8
setup.py
@ -1,9 +1,9 @@
|
||||
#!/usr/bin/env python
|
||||
import sys
|
||||
import os
|
||||
import sys
|
||||
|
||||
from setuptools import setup
|
||||
from setuptools.command.test import test as TestCommand
|
||||
from setuptools.command.test import test
|
||||
|
||||
|
||||
SIX_DEPENDENCY = "six>=1.4.1"
|
||||
@ -42,9 +42,9 @@ else:
|
||||
ext_modules = [_ffi.verifier.get_extension()]
|
||||
|
||||
|
||||
class PyTest(TestCommand):
|
||||
class PyTest(test):
|
||||
def finalize_options(self):
|
||||
TestCommand.finalize_options(self)
|
||||
test.finalize_options(self)
|
||||
self.test_args = []
|
||||
self.test_suite = True
|
||||
|
||||
|
||||
@ -1,7 +1,9 @@
|
||||
import os
|
||||
|
||||
import mock
|
||||
|
||||
import pytest
|
||||
|
||||
import six
|
||||
|
||||
import bcrypt
|
||||
@ -52,52 +54,192 @@ def test_gensalt_rounds_invalid(rounds, monkeypatch):
|
||||
|
||||
|
||||
@pytest.mark.parametrize(("password", "salt", "expected"), [
|
||||
(b"Kk4DQuMMfZL9o", b"$2a$04$cVWp4XaNU8a4v1uMRum2SO", b"$2a$04$cVWp4XaNU8a4v1uMRum2SO026BWLIoQMD/TXg5uZV.0P.uO8m3YEm"),
|
||||
(b"9IeRXmnGxMYbs", b"$2a$04$pQ7gRO7e6wx/936oXhNjrO", b"$2a$04$pQ7gRO7e6wx/936oXhNjrOUNOHL1D0h1N2IDbJZYs.1ppzSof6SPy"),
|
||||
(b"xVQVbwa1S0M8r", b"$2a$04$SQe9knOzepOVKoYXo9xTte", b"$2a$04$SQe9knOzepOVKoYXo9xTteNYr6MBwVz4tpriJVe3PNgYufGIsgKcW"),
|
||||
(b"Zfgr26LWd22Za", b"$2a$04$eH8zX.q5Q.j2hO1NkVYJQO", b"$2a$04$eH8zX.q5Q.j2hO1NkVYJQOM6KxntS/ow3.YzVmFrE4t//CoF4fvne"),
|
||||
(b"Tg4daC27epFBE", b"$2a$04$ahiTdwRXpUG2JLRcIznxc.", b"$2a$04$ahiTdwRXpUG2JLRcIznxc.s1.ydaPGD372bsGs8NqyYjLY1inG5n2"),
|
||||
(b"xhQPMmwh5ALzW", b"$2a$04$nQn78dV0hGHf5wUBe0zOFu", b"$2a$04$nQn78dV0hGHf5wUBe0zOFu8n07ZbWWOKoGasZKRspZxtt.vBRNMIy"),
|
||||
(b"59je8h5Gj71tg", b"$2a$04$cvXudZ5ugTg95W.rOjMITu", b"$2a$04$cvXudZ5ugTg95W.rOjMITuM1jC0piCl3zF5cmGhzCibHZrNHkmckG"),
|
||||
(b"wT4fHJa2N9WSW", b"$2a$04$YYjtiq4Uh88yUsExO0RNTu", b"$2a$04$YYjtiq4Uh88yUsExO0RNTuEJ.tZlsONac16A8OcLHleWFjVawfGvO"),
|
||||
(b"uSgFRnQdOgm4S", b"$2a$04$WLTjgY/pZSyqX/fbMbJzf.", b"$2a$04$WLTjgY/pZSyqX/fbMbJzf.qxCeTMQOzgL.CimRjMHtMxd/VGKojMu"),
|
||||
(b"tEPtJZXur16Vg", b"$2a$04$2moPs/x/wnCfeQ5pCheMcu", b"$2a$04$2moPs/x/wnCfeQ5pCheMcuSJQ/KYjOZG780UjA/SiR.KsYWNrC7SG"),
|
||||
(b"vvho8C6nlVf9K", b"$2a$04$HrEYC/AQ2HS77G78cQDZQ.", b"$2a$04$HrEYC/AQ2HS77G78cQDZQ.r44WGcruKw03KHlnp71yVQEwpsi3xl2"),
|
||||
(b"5auCCY9by0Ruf", b"$2a$04$vVYgSTfB8KVbmhbZE/k3R.", b"$2a$04$vVYgSTfB8KVbmhbZE/k3R.ux9A0lJUM4CZwCkHI9fifke2.rTF7MG"),
|
||||
(b"GtTkR6qn2QOZW", b"$2a$04$JfoNrR8.doieoI8..F.C1O", b"$2a$04$JfoNrR8.doieoI8..F.C1OQgwE3uTeuardy6lw0AjALUzOARoyf2m"),
|
||||
(b"zKo8vdFSnjX0f", b"$2a$04$HP3I0PUs7KBEzMBNFw7o3O", b"$2a$04$HP3I0PUs7KBEzMBNFw7o3O7f/uxaZU7aaDot1quHMgB2yrwBXsgyy"),
|
||||
(b"I9VfYlacJiwiK", b"$2a$04$xnFVhJsTzsFBTeP3PpgbMe", b"$2a$04$xnFVhJsTzsFBTeP3PpgbMeMREb6rdKV9faW54Sx.yg9plf4jY8qT6"),
|
||||
(b"VFPO7YXnHQbQO", b"$2a$04$WQp9.igoLqVr6Qk70mz6xu", b"$2a$04$WQp9.igoLqVr6Qk70mz6xuRxE0RttVXXdukpR9N54x17ecad34ZF6"),
|
||||
(b"VDx5BdxfxstYk", b"$2a$04$xgZtlonpAHSU/njOCdKztO", b"$2a$04$xgZtlonpAHSU/njOCdKztOPuPFzCNVpB4LGicO4/OGgHv.uKHkwsS"),
|
||||
(b"dEe6XfVGrrfSH", b"$2a$04$2Siw3Nv3Q/gTOIPetAyPr.", b"$2a$04$2Siw3Nv3Q/gTOIPetAyPr.GNj3aO0lb1E5E9UumYGKjP9BYqlNWJe"),
|
||||
(b"cTT0EAFdwJiLn", b"$2a$04$7/Qj7Kd8BcSahPO4khB8me", b"$2a$04$7/Qj7Kd8BcSahPO4khB8me4ssDJCW3r4OGYqPF87jxtrSyPj5cS5m"),
|
||||
(b"J8eHUDuxBB520", b"$2a$04$VvlCUKbTMjaxaYJ.k5juoe", b"$2a$04$VvlCUKbTMjaxaYJ.k5juoecpG/7IzcH1AkmqKi.lIZMVIOLClWAk."),
|
||||
(
|
||||
b"Kk4DQuMMfZL9o",
|
||||
b"$2a$04$cVWp4XaNU8a4v1uMRum2SO",
|
||||
b"$2a$04$cVWp4XaNU8a4v1uMRum2SO026BWLIoQMD/TXg5uZV.0P.uO8m3YEm",
|
||||
),
|
||||
(
|
||||
b"9IeRXmnGxMYbs",
|
||||
b"$2a$04$pQ7gRO7e6wx/936oXhNjrO",
|
||||
b"$2a$04$pQ7gRO7e6wx/936oXhNjrOUNOHL1D0h1N2IDbJZYs.1ppzSof6SPy",
|
||||
),
|
||||
(
|
||||
b"xVQVbwa1S0M8r",
|
||||
b"$2a$04$SQe9knOzepOVKoYXo9xTte",
|
||||
b"$2a$04$SQe9knOzepOVKoYXo9xTteNYr6MBwVz4tpriJVe3PNgYufGIsgKcW",
|
||||
),
|
||||
(
|
||||
b"Zfgr26LWd22Za",
|
||||
b"$2a$04$eH8zX.q5Q.j2hO1NkVYJQO",
|
||||
b"$2a$04$eH8zX.q5Q.j2hO1NkVYJQOM6KxntS/ow3.YzVmFrE4t//CoF4fvne",
|
||||
),
|
||||
(
|
||||
b"Tg4daC27epFBE",
|
||||
b"$2a$04$ahiTdwRXpUG2JLRcIznxc.",
|
||||
b"$2a$04$ahiTdwRXpUG2JLRcIznxc.s1.ydaPGD372bsGs8NqyYjLY1inG5n2",
|
||||
),
|
||||
(
|
||||
b"xhQPMmwh5ALzW",
|
||||
b"$2a$04$nQn78dV0hGHf5wUBe0zOFu",
|
||||
b"$2a$04$nQn78dV0hGHf5wUBe0zOFu8n07ZbWWOKoGasZKRspZxtt.vBRNMIy",
|
||||
),
|
||||
(
|
||||
b"59je8h5Gj71tg",
|
||||
b"$2a$04$cvXudZ5ugTg95W.rOjMITu",
|
||||
b"$2a$04$cvXudZ5ugTg95W.rOjMITuM1jC0piCl3zF5cmGhzCibHZrNHkmckG",
|
||||
),
|
||||
(
|
||||
b"wT4fHJa2N9WSW",
|
||||
b"$2a$04$YYjtiq4Uh88yUsExO0RNTu",
|
||||
b"$2a$04$YYjtiq4Uh88yUsExO0RNTuEJ.tZlsONac16A8OcLHleWFjVawfGvO",
|
||||
),
|
||||
(
|
||||
b"uSgFRnQdOgm4S",
|
||||
b"$2a$04$WLTjgY/pZSyqX/fbMbJzf.",
|
||||
b"$2a$04$WLTjgY/pZSyqX/fbMbJzf.qxCeTMQOzgL.CimRjMHtMxd/VGKojMu",
|
||||
),
|
||||
(
|
||||
b"tEPtJZXur16Vg",
|
||||
b"$2a$04$2moPs/x/wnCfeQ5pCheMcu",
|
||||
b"$2a$04$2moPs/x/wnCfeQ5pCheMcuSJQ/KYjOZG780UjA/SiR.KsYWNrC7SG",
|
||||
),
|
||||
(
|
||||
b"vvho8C6nlVf9K",
|
||||
b"$2a$04$HrEYC/AQ2HS77G78cQDZQ.",
|
||||
b"$2a$04$HrEYC/AQ2HS77G78cQDZQ.r44WGcruKw03KHlnp71yVQEwpsi3xl2",
|
||||
),
|
||||
(
|
||||
b"5auCCY9by0Ruf",
|
||||
b"$2a$04$vVYgSTfB8KVbmhbZE/k3R.",
|
||||
b"$2a$04$vVYgSTfB8KVbmhbZE/k3R.ux9A0lJUM4CZwCkHI9fifke2.rTF7MG",
|
||||
),
|
||||
(
|
||||
b"GtTkR6qn2QOZW",
|
||||
b"$2a$04$JfoNrR8.doieoI8..F.C1O",
|
||||
b"$2a$04$JfoNrR8.doieoI8..F.C1OQgwE3uTeuardy6lw0AjALUzOARoyf2m",
|
||||
),
|
||||
(
|
||||
b"zKo8vdFSnjX0f",
|
||||
b"$2a$04$HP3I0PUs7KBEzMBNFw7o3O",
|
||||
b"$2a$04$HP3I0PUs7KBEzMBNFw7o3O7f/uxaZU7aaDot1quHMgB2yrwBXsgyy",
|
||||
),
|
||||
(
|
||||
b"I9VfYlacJiwiK",
|
||||
b"$2a$04$xnFVhJsTzsFBTeP3PpgbMe",
|
||||
b"$2a$04$xnFVhJsTzsFBTeP3PpgbMeMREb6rdKV9faW54Sx.yg9plf4jY8qT6",
|
||||
),
|
||||
(
|
||||
b"VFPO7YXnHQbQO",
|
||||
b"$2a$04$WQp9.igoLqVr6Qk70mz6xu",
|
||||
b"$2a$04$WQp9.igoLqVr6Qk70mz6xuRxE0RttVXXdukpR9N54x17ecad34ZF6",
|
||||
),
|
||||
(
|
||||
b"VDx5BdxfxstYk",
|
||||
b"$2a$04$xgZtlonpAHSU/njOCdKztO",
|
||||
b"$2a$04$xgZtlonpAHSU/njOCdKztOPuPFzCNVpB4LGicO4/OGgHv.uKHkwsS",
|
||||
),
|
||||
(
|
||||
b"dEe6XfVGrrfSH",
|
||||
b"$2a$04$2Siw3Nv3Q/gTOIPetAyPr.",
|
||||
b"$2a$04$2Siw3Nv3Q/gTOIPetAyPr.GNj3aO0lb1E5E9UumYGKjP9BYqlNWJe",
|
||||
),
|
||||
(
|
||||
b"cTT0EAFdwJiLn",
|
||||
b"$2a$04$7/Qj7Kd8BcSahPO4khB8me",
|
||||
b"$2a$04$7/Qj7Kd8BcSahPO4khB8me4ssDJCW3r4OGYqPF87jxtrSyPj5cS5m",
|
||||
),
|
||||
(
|
||||
b"J8eHUDuxBB520",
|
||||
b"$2a$04$VvlCUKbTMjaxaYJ.k5juoe",
|
||||
b"$2a$04$VvlCUKbTMjaxaYJ.k5juoecpG/7IzcH1AkmqKi.lIZMVIOLClWAk.",
|
||||
),
|
||||
])
|
||||
def test_hashpw_new(password, salt, expected):
|
||||
assert bcrypt.hashpw(password, salt) == expected
|
||||
|
||||
|
||||
@pytest.mark.parametrize(("password", "hashed"), [
|
||||
(b"Kk4DQuMMfZL9o", b"$2a$04$cVWp4XaNU8a4v1uMRum2SO026BWLIoQMD/TXg5uZV.0P.uO8m3YEm"),
|
||||
(b"9IeRXmnGxMYbs", b"$2a$04$pQ7gRO7e6wx/936oXhNjrOUNOHL1D0h1N2IDbJZYs.1ppzSof6SPy"),
|
||||
(b"xVQVbwa1S0M8r", b"$2a$04$SQe9knOzepOVKoYXo9xTteNYr6MBwVz4tpriJVe3PNgYufGIsgKcW"),
|
||||
(b"Zfgr26LWd22Za", b"$2a$04$eH8zX.q5Q.j2hO1NkVYJQOM6KxntS/ow3.YzVmFrE4t//CoF4fvne"),
|
||||
(b"Tg4daC27epFBE", b"$2a$04$ahiTdwRXpUG2JLRcIznxc.s1.ydaPGD372bsGs8NqyYjLY1inG5n2"),
|
||||
(b"xhQPMmwh5ALzW", b"$2a$04$nQn78dV0hGHf5wUBe0zOFu8n07ZbWWOKoGasZKRspZxtt.vBRNMIy"),
|
||||
(b"59je8h5Gj71tg", b"$2a$04$cvXudZ5ugTg95W.rOjMITuM1jC0piCl3zF5cmGhzCibHZrNHkmckG"),
|
||||
(b"wT4fHJa2N9WSW", b"$2a$04$YYjtiq4Uh88yUsExO0RNTuEJ.tZlsONac16A8OcLHleWFjVawfGvO"),
|
||||
(b"uSgFRnQdOgm4S", b"$2a$04$WLTjgY/pZSyqX/fbMbJzf.qxCeTMQOzgL.CimRjMHtMxd/VGKojMu"),
|
||||
(b"tEPtJZXur16Vg", b"$2a$04$2moPs/x/wnCfeQ5pCheMcuSJQ/KYjOZG780UjA/SiR.KsYWNrC7SG"),
|
||||
(b"vvho8C6nlVf9K", b"$2a$04$HrEYC/AQ2HS77G78cQDZQ.r44WGcruKw03KHlnp71yVQEwpsi3xl2"),
|
||||
(b"5auCCY9by0Ruf", b"$2a$04$vVYgSTfB8KVbmhbZE/k3R.ux9A0lJUM4CZwCkHI9fifke2.rTF7MG"),
|
||||
(b"GtTkR6qn2QOZW", b"$2a$04$JfoNrR8.doieoI8..F.C1OQgwE3uTeuardy6lw0AjALUzOARoyf2m"),
|
||||
(b"zKo8vdFSnjX0f", b"$2a$04$HP3I0PUs7KBEzMBNFw7o3O7f/uxaZU7aaDot1quHMgB2yrwBXsgyy"),
|
||||
(b"I9VfYlacJiwiK", b"$2a$04$xnFVhJsTzsFBTeP3PpgbMeMREb6rdKV9faW54Sx.yg9plf4jY8qT6"),
|
||||
(b"VFPO7YXnHQbQO", b"$2a$04$WQp9.igoLqVr6Qk70mz6xuRxE0RttVXXdukpR9N54x17ecad34ZF6"),
|
||||
(b"VDx5BdxfxstYk", b"$2a$04$xgZtlonpAHSU/njOCdKztOPuPFzCNVpB4LGicO4/OGgHv.uKHkwsS"),
|
||||
(b"dEe6XfVGrrfSH", b"$2a$04$2Siw3Nv3Q/gTOIPetAyPr.GNj3aO0lb1E5E9UumYGKjP9BYqlNWJe"),
|
||||
(b"cTT0EAFdwJiLn", b"$2a$04$7/Qj7Kd8BcSahPO4khB8me4ssDJCW3r4OGYqPF87jxtrSyPj5cS5m"),
|
||||
(b"J8eHUDuxBB520", b"$2a$04$VvlCUKbTMjaxaYJ.k5juoecpG/7IzcH1AkmqKi.lIZMVIOLClWAk."),
|
||||
(
|
||||
b"Kk4DQuMMfZL9o",
|
||||
b"$2a$04$cVWp4XaNU8a4v1uMRum2SO026BWLIoQMD/TXg5uZV.0P.uO8m3YEm",
|
||||
),
|
||||
(
|
||||
b"9IeRXmnGxMYbs",
|
||||
b"$2a$04$pQ7gRO7e6wx/936oXhNjrOUNOHL1D0h1N2IDbJZYs.1ppzSof6SPy",
|
||||
),
|
||||
(
|
||||
b"xVQVbwa1S0M8r",
|
||||
b"$2a$04$SQe9knOzepOVKoYXo9xTteNYr6MBwVz4tpriJVe3PNgYufGIsgKcW",
|
||||
),
|
||||
(
|
||||
b"Zfgr26LWd22Za",
|
||||
b"$2a$04$eH8zX.q5Q.j2hO1NkVYJQOM6KxntS/ow3.YzVmFrE4t//CoF4fvne",
|
||||
),
|
||||
(
|
||||
b"Tg4daC27epFBE",
|
||||
b"$2a$04$ahiTdwRXpUG2JLRcIznxc.s1.ydaPGD372bsGs8NqyYjLY1inG5n2",
|
||||
),
|
||||
(
|
||||
b"xhQPMmwh5ALzW",
|
||||
b"$2a$04$nQn78dV0hGHf5wUBe0zOFu8n07ZbWWOKoGasZKRspZxtt.vBRNMIy",
|
||||
),
|
||||
(
|
||||
b"59je8h5Gj71tg",
|
||||
b"$2a$04$cvXudZ5ugTg95W.rOjMITuM1jC0piCl3zF5cmGhzCibHZrNHkmckG",
|
||||
),
|
||||
(
|
||||
b"wT4fHJa2N9WSW",
|
||||
b"$2a$04$YYjtiq4Uh88yUsExO0RNTuEJ.tZlsONac16A8OcLHleWFjVawfGvO",
|
||||
),
|
||||
(
|
||||
b"uSgFRnQdOgm4S",
|
||||
b"$2a$04$WLTjgY/pZSyqX/fbMbJzf.qxCeTMQOzgL.CimRjMHtMxd/VGKojMu",
|
||||
),
|
||||
(
|
||||
b"tEPtJZXur16Vg",
|
||||
b"$2a$04$2moPs/x/wnCfeQ5pCheMcuSJQ/KYjOZG780UjA/SiR.KsYWNrC7SG",
|
||||
),
|
||||
(
|
||||
b"vvho8C6nlVf9K",
|
||||
b"$2a$04$HrEYC/AQ2HS77G78cQDZQ.r44WGcruKw03KHlnp71yVQEwpsi3xl2",
|
||||
),
|
||||
(
|
||||
b"5auCCY9by0Ruf",
|
||||
b"$2a$04$vVYgSTfB8KVbmhbZE/k3R.ux9A0lJUM4CZwCkHI9fifke2.rTF7MG",
|
||||
),
|
||||
(
|
||||
b"GtTkR6qn2QOZW",
|
||||
b"$2a$04$JfoNrR8.doieoI8..F.C1OQgwE3uTeuardy6lw0AjALUzOARoyf2m",
|
||||
),
|
||||
(
|
||||
b"zKo8vdFSnjX0f",
|
||||
b"$2a$04$HP3I0PUs7KBEzMBNFw7o3O7f/uxaZU7aaDot1quHMgB2yrwBXsgyy",
|
||||
),
|
||||
(
|
||||
b"I9VfYlacJiwiK",
|
||||
b"$2a$04$xnFVhJsTzsFBTeP3PpgbMeMREb6rdKV9faW54Sx.yg9plf4jY8qT6",
|
||||
),
|
||||
(
|
||||
b"VFPO7YXnHQbQO",
|
||||
b"$2a$04$WQp9.igoLqVr6Qk70mz6xuRxE0RttVXXdukpR9N54x17ecad34ZF6",
|
||||
),
|
||||
(
|
||||
b"VDx5BdxfxstYk",
|
||||
b"$2a$04$xgZtlonpAHSU/njOCdKztOPuPFzCNVpB4LGicO4/OGgHv.uKHkwsS",
|
||||
),
|
||||
(
|
||||
b"dEe6XfVGrrfSH",
|
||||
b"$2a$04$2Siw3Nv3Q/gTOIPetAyPr.GNj3aO0lb1E5E9UumYGKjP9BYqlNWJe",
|
||||
),
|
||||
(
|
||||
b"cTT0EAFdwJiLn",
|
||||
b"$2a$04$7/Qj7Kd8BcSahPO4khB8me4ssDJCW3r4OGYqPF87jxtrSyPj5cS5m",
|
||||
),
|
||||
(
|
||||
b"J8eHUDuxBB520",
|
||||
b"$2a$04$VvlCUKbTMjaxaYJ.k5juoecpG/7IzcH1AkmqKi.lIZMVIOLClWAk.",
|
||||
),
|
||||
])
|
||||
def test_hashpw_existing(password, hashed):
|
||||
assert bcrypt.hashpw(password, hashed) == hashed
|
||||
@ -110,9 +252,15 @@ def test_hashpw_invalid():
|
||||
|
||||
def test_hashpw_str_password():
|
||||
with pytest.raises(TypeError):
|
||||
bcrypt.hashpw(six.text_type("password"), b"$2a$04$cVWp4XaNU8a4v1uMRum2SO")
|
||||
bcrypt.hashpw(
|
||||
six.text_type("password"),
|
||||
b"$2a$04$cVWp4XaNU8a4v1uMRum2SO",
|
||||
)
|
||||
|
||||
|
||||
def test_hashpw_str_salt():
|
||||
with pytest.raises(TypeError):
|
||||
bcrypt.hashpw(b"password", six.text_type("$2a$04$cVWp4XaNU8a4v1uMRum2SO"))
|
||||
bcrypt.hashpw(
|
||||
b"password",
|
||||
six.text_type("$2a$04$cVWp4XaNU8a4v1uMRum2SO"),
|
||||
)
|
||||
|
||||
24
tox.ini
24
tox.ini
@ -1,5 +1,5 @@
|
||||
[tox]
|
||||
envlist = py26,py27,pypy,py32,py33,py34
|
||||
envlist = py26,py27,pypy,py32,py33,py34,pep8,py3pep8
|
||||
|
||||
[testenv]
|
||||
# If you add a new dep here you probably need to add it in setup.py as well
|
||||
@ -8,3 +8,25 @@ deps =
|
||||
pytest
|
||||
commands =
|
||||
py.test --strict {posargs}
|
||||
|
||||
[testenv:pep8]
|
||||
deps =
|
||||
flake8
|
||||
flake8-import-order
|
||||
pep8-naming
|
||||
commands =
|
||||
flake8 .
|
||||
|
||||
[testenv:py3pep8]
|
||||
basepython = python3.3
|
||||
deps =
|
||||
flake8
|
||||
flake8-import-order
|
||||
pep8-naming
|
||||
commands =
|
||||
flake8 .
|
||||
|
||||
[flake8]
|
||||
exclude = .tox,*.egg
|
||||
select = E,W,F,N,I
|
||||
application-import-names = bcrypt,tests
|
||||
|
||||
Loading…
Reference in New Issue
Block a user