diff options
| author | Paul Kehrer <paul.l.kehrer@gmail.com> | 2015-06-11 22:53:44 -0500 |
|---|---|---|
| committer | Paul Kehrer <paul.l.kehrer@gmail.com> | 2015-06-11 22:53:44 -0500 |
| commit | fe0835805f96539ca1ac737513bb019ddbbfee03 (patch) | |
| tree | b113c6a1b45246c430123c9c57a0a10319b88540 /src/bcrypt | |
| parent | f3280bda0a560fbf4d401bd8edf89b974a97b39c (diff) | |
| parent | 15cc4edec22c455f467fa97bb27aa6bbb9deffb4 (diff) | |
| download | py-bcrypt-git-fe0835805f96539ca1ac737513bb019ddbbfee03.tar.gz | |
Merge pull request #43 from dstufft/cffi1.0
Migrate to using CFFI 1.0
Diffstat (limited to 'src/bcrypt')
| -rw-r--r-- | src/bcrypt/__about__.py | 35 | ||||
| -rw-r--r-- | src/bcrypt/__init__.py | 65 |
2 files changed, 100 insertions, 0 deletions
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 (<donald@stufft.io>) +# 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 (<donald@stufft.io>) +# 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) |
