%PDF- %PDF-
| Direktori : /lib/python3.9/site-packages/passlib/crypto/scrypt/__pycache__/ |
| Current File : //lib/python3.9/site-packages/passlib/crypto/scrypt/__pycache__/__init__.cpython-39.pyc |
a
f�Wc�% � @ s� d Z ddlmZ ddlZe�e�ZddlmZ ddl m
Z
ddlmZ ddl
mZ dd gZd
ZdZdZd
d� ZdZd"dd�Zdadad#dd �Zdd� Zdd� Zdd� ZdZeeeed�Zd$dd�Zed� d d!� Z dS )%zg
passlib.utils.scrypt -- scrypt hash frontend and help utilities
XXX: add this module to public docs?
� )�absolute_importN)�warn)�exc)�to_bytes)�PYPY�validate�scrypt���l �� i���?c C sh |dk rt d| ��|dk r(t d| ��|| tkrDt d||f ��| dk sX| | d @ rdt d| ��dS )aI
helper which validates a set of scrypt config parameters.
scrypt will take ``O(n * r * p)`` time and ``O(n * r)`` memory.
limitations are that ``n = 2**<positive integer>``, ``n < 2**(16*r)``, ``r * p < 2 ** 30``.
:param n: scrypt rounds
:param r: scrypt block size
:param p: scrypt parallel factor
� zr must be > 0: r=%rzp must be > 0: p=%rz!r * p must be < 2**30: r=%r, p=%r� z%n must be > 1, and a power of 2: n=%rT)�
ValueError�MAX_RP)�n�r�p� r �B/usr/lib/python3.9/site-packages/passlib/crypto/scrypt/__init__.pyr ) s
� ��������?c C s, |d| d| d t }t|| �}|S )a?
calculate memory required for parameter combination.
assumes parameters have already been validated.
.. warning::
this is derived from OpenSSL's scrypt maxmem formula;
and may not be correct for other implementations
(additional buffers, different parallelism tradeoffs, etc).
� � r )�UINT32_SIZE�int)r r r Zfudge�maxmemr r r �estimate_maxmemH s r r
r c C sZ t |||� t| dd�} t|dd�}|dk r4td��|tkrHtdt ��t| |||||�S )a4 run SCrypt key derivation function using specified parameters.
:arg secret:
passphrase string (unicode is encoded to bytes using utf-8).
:arg salt:
salt string (unicode is encoded to bytes using utf-8).
:arg n:
integer 'N' parameter
:arg r:
integer 'r' parameter
:arg p:
integer 'p' parameter
:arg keylen:
number of bytes of key to generate.
defaults to 32 (the internal block size).
:returns:
a *keylen*-sized bytes instance
SCrypt imposes a number of constraints on it's input parameters:
* ``r * p < 2**30`` -- due to a limitation of PBKDF2-HMAC-SHA256.
* ``keylen < (2**32 - 1) * 32`` -- due to a limitation of PBKDF2-HMAC-SHA256.
* ``n`` must a be a power of 2, and > 1 -- internal limitation of scrypt() implementation
:raises ValueError: if the provided parameters are invalid (see constraints above).
.. warning::
Unless the third-party ``scrypt <https://pypi.python.org/pypi/scrypt/>``_ package
is installed, passlib will use a builtin pure-python implementation of scrypt,
which is *considerably* slower (and thus requires a much lower / less secure
``n`` value in order to be usuable). Installing the :mod:`!scrypt` package
is strongly recommended.
�secret)Zparam�saltr
zkeylen must be at least 1zkeylen too large, must be <= %d)r r r �
MAX_KEYLEN�_scrypt)r r r r r �keylenr r r r k s )c C s. t rdnd} td| tj� ddlm} |jS )zD
Load pure-python scrypt implementation built into passlib.
�
�d z�Using builtin scrypt backend, which is %dx slower than is required for adequate security. Installing scrypt support (via 'pip install scrypt') is strongly recommendedr
)�ScryptEngine)r r r ZPasslibSecurityWarningZ_builtinr"