File: //proc/self/root/lib/python3/dist-packages/nacl/pwhash/__pycache__/scrypt.cpython-38.pyc
U
�֫[� � @ s� d dl mZ d dl mZ d dlZd dlZd dlmZ d dlm Z ej
jZej
j
Zej
jZej
jZej
jZed Zej
jZej
jZej
jZej
jZej
jZej
j Z!ej
j"Z#ej
j$Z%ej
j&Z'ej
j(Z)de# Z*de% Z+e'e)ej,j-fdd �Z.e#e%fd
d�Z/dd
� Z0dS )� )�absolute_import)�divisionN)�
exceptions)�ensure� � c
C sd t t|�tkdtt|�f tjd� tj�||�\}}}|d } |�tjj ||d| ||| | d��S )a
Derive a ``size`` bytes long key from a caller-supplied
``password`` and ``salt`` pair using the scryptsalsa208sha256
memory-hard construct.
the enclosing module provides the constants
- :py:const:`.OPSLIMIT_INTERACTIVE`
- :py:const:`.MEMLIMIT_INTERACTIVE`
- :py:const:`.OPSLIMIT_SENSITIVE`
- :py:const:`.MEMLIMIT_SENSITIVE`
- :py:const:`.OPSLIMIT_MODERATE`
- :py:const:`.MEMLIMIT_MODERATE`
as a guidance for correct settings respectively for the
interactive login and the long term key protecting sensitive data
use cases.
:param size: derived key size, must be between
:py:const:`.BYTES_MIN` and
:py:const:`.BYTES_MAX`
:type size: int
:param password: password used to seed the key derivation procedure;
it length must be between
:py:const:`.PASSWD_MIN` and
:py:const:`.PASSWD_MAX`
:type password: bytes
:param salt: **RANDOM** salt used in the key derivation procedure;
its length must be exactly :py:const:`.SALTBYTES`
:type salt: bytes
:param opslimit: the time component (operation count)
of the key derivation procedure's computational cost;
it must be between
:py:const:`.OPSLIMIT_MIN` and
:py:const:`.OPSLIMIT_MAX`
:type opslimit: int
:param memlimit: the memory occupation component
of the key derivation procedure's computational cost;
it must be between
:py:const:`.MEMLIMIT_MIN` and
:py:const:`.MEMLIMIT_MAX`
:type memlimit: int
:rtype: bytes
.. versionadded:: 1.2
z.The salt must be exactly %s, not %s bytes long�Zraisingi � )�maxmemZdklen)
r �len� SALTBYTES�exc�
ValueError�nacl�bindingsZ nacl_bindings_pick_scrypt_params�encodeZ%crypto_pwhash_scryptsalsa208sha256_ll)
�size�passwordZsalt�opslimit�memlimit�encoderZn_log2�r�pr
� r �4/usr/lib/python3/dist-packages/nacl/pwhash/scrypt.py�kdf6 s. 3
�� �
��r c C s t j�| ||�S )a�
Hashes a password with a random salt, using the memory-hard
scryptsalsa208sha256 construct and returning an ascii string
that has all the needed info to check against a future password
The default settings for opslimit and memlimit are those deemed
correct for the interactive user login case.
:param bytes password:
:param int opslimit:
:param int memlimit:
:rtype: bytes
.. versionadded:: 1.2
)r r Z&crypto_pwhash_scryptsalsa208sha256_str)r r r r r r �str| s �r c C s. t t| �tkdtjj tjd� tj�| |�S )z�
Takes the output of scryptsalsa208sha256 and compares it against
a user provided password to see if they are the same
:param password_hash: bytes
:param password: bytes
:rtype: boolean
.. versionadded:: 1.2
z/The password hash must be exactly %s bytes longr ) r r �PWHASH_SIZEr r �+crypto_pwhash_scryptsalsa208sha256_STRBYTESr
r Z-crypto_pwhash_scryptsalsa208sha256_str_verify)Z
password_hashr r r r �verify� s �� �r )1Z
__future__r r Z
nacl.bindingsr Z
nacl.encodingr r
Znacl.exceptionsr r r Z_strbytes_plus_oneZ,crypto_pwhash_scryptsalsa208sha256_STRPREFIXZ STRPREFIXZ,crypto_pwhash_scryptsalsa208sha256_SALTBYTESr Z-crypto_pwhash_scryptsalsa208sha256_PASSWD_MINZ
PASSWD_MINZ-crypto_pwhash_scryptsalsa208sha256_PASSWD_MAXZ
PASSWD_MAXr Z,crypto_pwhash_scryptsalsa208sha256_BYTES_MINZ BYTES_MINZ,crypto_pwhash_scryptsalsa208sha256_BYTES_MAXZ BYTES_MAXZ/crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MINZMEMLIMIT_MINZ/crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MAXZMEMLIMIT_MAXZ/crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MINZOPSLIMIT_MINZ/crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MAXZOPSLIMIT_MAXZ7crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_INTERACTIVEZOPSLIMIT_INTERACTIVEZ7crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_INTERACTIVEZMEMLIMIT_INTERACTIVEZ5crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_SENSITIVEZOPSLIMIT_SENSITIVEZ5crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_SENSITIVEZMEMLIMIT_SENSITIVEZOPSLIMIT_MODERATEZMEMLIMIT_MODERATE�encodingZ
RawEncoderr r r r r r r �<module> sF �����
G�