From 51ebadb34d22d25c10c5e54d4dada46b88c3829b Mon Sep 17 00:00:00 2001 From: Donald Stufft Date: Thu, 11 Jun 2015 09:23:01 -0400 Subject: Migrate to using CFFI 1.0 * Move everything under src/ to ensure we test against the installed library. * Create a build_bcrypt.py script which will build _bcrypt.so. * Refactor to utilize the new _bcrypt.so instead of implicit compile. --- src/bcrypt/__about__.py | 35 ++++++++++++++++++++++++++ src/bcrypt/__init__.py | 65 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 src/bcrypt/__about__.py create mode 100644 src/bcrypt/__init__.py (limited to 'src/bcrypt') diff --git a/src/bcrypt/__about__.py b/src/bcrypt/__about__.py new file mode 100644 index 0000000..d526fe7 --- /dev/null +++ b/src/bcrypt/__about__.py @@ -0,0 +1,35 @@ +# Author:: Donald Stufft () +# Copyright:: Copyright (c) 2013 Donald Stufft +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +from __future__ import absolute_import +from __future__ import division +from __future__ import unicode_literals + +__all__ = [ + "__title__", "__summary__", "__uri__", "__version__", "__author__", + "__email__", "__license__", "__copyright__", +] + +__title__ = "bcrypt" +__summary__ = "Modern password hashing for your software and your servers" +__uri__ = "https://github.com/pyca/bcrypt/" + +__version__ = "1.1.1" + +__author__ = "Donald Stufft" +__email__ = "donald@stufft.io" + +__license__ = "Apache License, Version 2.0" +__copyright__ = "Copyright 2013 Donald Stufft" diff --git a/src/bcrypt/__init__.py b/src/bcrypt/__init__.py new file mode 100644 index 0000000..10f860b --- /dev/null +++ b/src/bcrypt/__init__.py @@ -0,0 +1,65 @@ +# Author:: Donald Stufft () +# Copyright:: Copyright (c) 2013 Donald Stufft +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +from __future__ import absolute_import +from __future__ import division + +import os + +import six + +from bcrypt import _bcrypt + +from .__about__ import ( + __author__, __copyright__, __email__, __license__, __summary__, __title__, + __uri__, __version__, +) + + +__all__ = [ + "__title__", "__summary__", "__uri__", "__version__", "__author__", + "__email__", "__license__", "__copyright__", + "gensalt", "hashpw", +] + + +def gensalt(rounds=12): + salt = os.urandom(16) + output = _bcrypt.ffi.new("unsigned char[]", 30) + + retval = _bcrypt.lib.crypt_gensalt_rn( + b"$2a$", rounds, salt, len(salt), output, len(output), + ) + + if not retval: + raise ValueError("Invalid rounds") + + return _bcrypt.ffi.string(output) + + +def hashpw(password, salt): + if isinstance(password, six.text_type) or isinstance(salt, six.text_type): + raise TypeError("Unicode-objects must be encoded before hashing") + + if b"\x00" in password: + raise ValueError("password may not contain NUL bytes") + + hashed = _bcrypt.ffi.new("unsigned char[]", 128) + retval = _bcrypt.lib.crypt_rn(password, salt, hashed, len(hashed)) + + if not retval: + raise ValueError("Invalid salt") + + return _bcrypt.ffi.string(hashed) -- cgit v1.2.1