Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Source code on github and pypi differs #65

Closed
mahenzon opened this issue Jan 9, 2021 · 1 comment
Closed

Source code on github and pypi differs #65

mahenzon opened this issue Jan 9, 2021 · 1 comment

Comments

@mahenzon
Copy link

mahenzon commented Jan 9, 2021

I noticed that Flask-Bcrypt==0.7.1 installed from pypi is not the same found in this repo (no matter it's 0.7.1 too https://github.com/maxcountryman/flask-bcrypt/blob/13df85ab1b4d7602a967c7ec1c6707c8cda459c6/flask_bcrypt.py)

here's comparison pypi vs repo (repo is newer)

4,6c4,6
<     
<     A Flask extension providing bcrypt hasing and comparison facilities.
<     
---
> 
>     A Flask extension providing bcrypt hashing and comparison facilities.
> 
28a29,30
> import hashlib
> 
40,41c42,44
<     To this this function, simple import it from the module and use it in a 
<     similar fashion as the method would be used. Here is a quick example::
---
>     To use this function, simply import it from the module and use it in a 
>     similar fashion as the original method would be used. Here is a quick
>     example::
43c46
<         from flask.ext.bcrypt import generate_password_hash
---
>         from flask_bcrypt import generate_password_hash
57,61c60,65
<     
<     To this this function, simple import it from the module and use it in a 
<     similar fashion as the method would be used. Here is a quick example::
<         
<         from flask.ext.bcrypt import check_password_hash
---
> 
>     To use this function, simply import it from the module and use it in a 
>     similar fashion as the original method would be used. Here is a quick
>     example::
> 
>         from flask_bcrypt import check_password_hash
63c67
<     
---
> 
119c123,138
<     
---
> 
>     You may also set the hash version using the `BCRYPT_HASH_PREFIX` field in
>     the configuration of the Flask app. If not set, this will default to `2b`.
>     (See bcrypt for more details)
> 
>     By default, the bcrypt algorithm has a maximum password length of 72 bytes
>     and ignores any bytes beyond that. A common workaround is to hash the
>     given password using a cryptographic hash (such as `sha256`), take its
>     hexdigest to prevent NULL byte problems, and hash the result with bcrypt.
>     If the `BCRYPT_HANDLE_LONG_PASSWORDS` configuration value is set to `True`,
>     the workaround described above will be enabled.
>     **Warning: do not enable this option on a project that is already using
>     Flask-Bcrypt, or you will break password checking.**
>     **Warning: if this option is enabled on an existing project, disabling it
>     will break password checking.**
> 
123a143,144
>     _prefix = '2b'
>     _handle_long_passwords = False
135,139c156,181
<     
<     def generate_password_hash(self, password, rounds=None):
<         '''Generates a password hash using bcrypt. Specifying `rounds` 
<         sets the log_rounds parameter of `bcrypt.gensalt()` which determines 
<         the complexity of the salt. 12 is the default value.
---
>         self._prefix = app.config.get('BCRYPT_HASH_PREFIX', '2b')
>         self._handle_long_passwords = app.config.get(
>             'BCRYPT_HANDLE_LONG_PASSWORDS', False)
> 
>     def _unicode_to_bytes(self, unicode_string):
>         '''Converts a unicode string to a bytes object.
> 
>         :param unicode_string: The unicode string to convert.'''
>         if PY3:
>             if isinstance(unicode_string, str):
>                 bytes_object = bytes(unicode_string, 'utf-8')
>             else:
>                 bytes_object = unicode_string
>         else:
>             if isinstance(unicode_string, unicode):
>                 bytes_object = unicode_string.encode('utf-8')
>             else:
>                 bytes_object = unicode_string
>         return bytes_object
> 
>     def generate_password_hash(self, password, rounds=None, prefix=None):
>         '''Generates a password hash using bcrypt. Specifying `rounds`
>         sets the log_rounds parameter of `bcrypt.gensalt()` which determines
>         the complexity of the salt. 12 is the default value. Specifying `prefix`
>         sets the `prefix` parameter of `bcrypt.gensalt()` which determines the 
>         version of the algorithm used to create the hash.
147a190
>         :param prefix: The algorithm version to use.
154a198,199
>         if prefix is None:
>             prefix = self._prefix
157,158c202,203
<         if PY3 and isinstance(password, str):
<             password = bytes(password, 'utf-8')
---
>         password = self._unicode_to_bytes(password)
>         prefix = self._unicode_to_bytes(prefix)
160,161c205,207
<         if not PY3 and isinstance(password, unicode):
<             password = password.encode('utf-8')
---
>         if self._handle_long_passwords:
>             password = hashlib.sha256(password).hexdigest()
>             password = self._unicode_to_bytes(password)
163c209,210
<         return bcrypt.hashpw(password, bcrypt.gensalt(rounds))
---
>         salt = bcrypt.gensalt(rounds=rounds, prefix=prefix)
>         return bcrypt.hashpw(password, salt)
181,182c228,229
<         if PY3 and isinstance(pw_hash, str):
<             pw_hash = bytes(pw_hash, 'utf-8')
---
>         pw_hash = self._unicode_to_bytes(pw_hash)
>         password = self._unicode_to_bytes(password)
184,185c231,233
<         if PY3 and isinstance(password, str):
<             password = bytes(password, 'utf-8')
---
>         if self._handle_long_passwords:
>             password = hashlib.sha256(password).hexdigest()
>             password = self._unicode_to_bytes(password)
187,192d234
<         if not PY3 and isinstance(pw_hash, unicode):
<             pw_hash = pw_hash.encode('utf-8')
< 
<         if not PY3 and isinstance(password, unicode):
<             password = password.encode('utf-8')
< 
194d235
< 

pypi was updated a long time ago and lacks such features as long_passwords and etc


bcrypt==3.2.0
Flask-Bcrypt==0.7.1
@mahenzon mahenzon mentioned this issue Jan 9, 2021
@mahenzon
Copy link
Author

Kinda duplicate of #53

Repository owner deleted a comment from mahenzon Feb 18, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant