ó
/<ő\c           @` sŔ   d  d l  m Z m Z m Z d  d l Z d  d l m Z d  d l m Z m	 Z	 m
 Z
 m Z d  d l m Z d  d l m Z d  d l m Z e j d Z e j e  d	 e f d
     Y Z d S(   i    (   t   absolute_importt   divisiont   print_functionN(   t   utils(   t   AlreadyFinalizedt
   InvalidKeyt   UnsupportedAlgorithmt   _Reasons(   t   ScryptBackend(   t   constant_time(   t   KeyDerivationFunctioni   t   Scryptc           B` s#   e  Z d    Z d   Z d   Z RS(   c         C` sÜ   t  | t  s$ t d t j   n  | |  _ t j d |  | d k  s] | | d @d k rl t d   n  | d k  r t d   n  | d k  r˘ t d   n  t	 |  _
 | |  _ | |  _ | |  _ | |  _ | |  _ d  S(	   Ns0   Backend object does not implement ScryptBackend.t   salti   i   i    s-   n must be greater than 1 and be a power of 2.s%   r must be greater than or equal to 1.s%   p must be greater than or equal to 1.(   t
   isinstanceR   R   R   t   BACKEND_MISSING_INTERFACEt   _lengthR   t   _check_bytest
   ValueErrort   Falset   _usedt   _saltt   _nt   _rt   _pt   _backend(   t   selfR   t   lengtht   nt   rt   pt   backend(    (    sH   lib/python2.7/site-packages/cryptography/hazmat/primitives/kdf/scrypt.pyt   __init__   s$    	 					c         C` s_   |  j  r t d   n  t |  _  t j d |  |  j j | |  j |  j |  j	 |  j
 |  j  S(   Ns'   Scrypt instances can only be used once.t   key_material(   R   R   t   TrueR   t   _check_byteslikeR   t   derive_scryptR   R   R   R   R   (   R   R    (    (    sH   lib/python2.7/site-packages/cryptography/hazmat/primitives/kdf/scrypt.pyt   derive2   s    			c         C` s4   |  j  |  } t j | |  s0 t d   n  d  S(   Ns   Keys do not match.(   R$   R	   t   bytes_eqR   (   R   R    t   expected_keyt   derived_key(    (    sH   lib/python2.7/site-packages/cryptography/hazmat/primitives/kdf/scrypt.pyt   verify<   s    (   t   __name__t
   __module__R   R$   R(   (    (    (    sH   lib/python2.7/site-packages/cryptography/hazmat/primitives/kdf/scrypt.pyR      s   		
(   t
   __future__R    R   R   t   syst   cryptographyR   t   cryptography.exceptionsR   R   R   R   t'   cryptography.hazmat.backends.interfacesR   t   cryptography.hazmat.primitivesR	   t"   cryptography.hazmat.primitives.kdfR
   t   maxsizet
   _MEM_LIMITt   register_interfacet   objectR   (    (    (    sH   lib/python2.7/site-packages/cryptography/hazmat/primitives/kdf/scrypt.pyt   <module>   s   "