ó
Ġ{PXc           @` 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 m Z d  d l m Z 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   HashBackend(   t   constant_timet   hashes(   t   KeyDerivationFunctionc         C` s   t  j d |   S(   Ns   >I(   t   structt   pack(   t   n(    (    sN   /usr/lib/python2.7/dist-packages/cryptography/hazmat/primitives/kdf/x963kdf.pyt   _int_to_u32be   s    t   X963KDFc           B` s#   e  Z d    Z d   Z d   Z RS(   c         C` s°   | j  d } | | k r1 t d j |    n  | d  k pI t | t  s[ t d   n  | |  _ | |  _ | |  _	 t | t
  s t d t j   n  | |  _ t |  _ d  S(	   Ni   i    i   s)   Can not derive keys larger than {0} bits.s   sharedinfo must be bytes.s.   Backend object does not implement HashBackend.I       I˙˙˙˙    (   t   digest_sizet
   ValueErrort   formatt   Nonet
   isinstancet   bytest	   TypeErrort
   _algorithmt   _lengtht   _sharedinfoR   R   R   t   BACKEND_MISSING_INTERFACEt   _backendt   Falset   _used(   t   selft	   algorithmt   lengtht
   sharedinfot   backendt   max_len(    (    sN   /usr/lib/python2.7/dist-packages/cryptography/hazmat/primitives/kdf/x963kdf.pyt   __init__   s    				c         C` s  |  j  r t  n  t |  _  t | t  s9 t d   n  d g } d } d } x |  j | k rî t j |  j	 |  j
  } | j |  | j t |   |  j d  k	 rş | j |  j  n  | j | j    | t | d  7} | d 7} qQ Wd j |  |  j  S(   Ns   key_material must be bytes.t    i    i   i˙˙˙˙(   R   R   t   TrueR   R   R   R   R
   t   HashR   R   t   updateR   R   R   t   appendt   finalizet   lent   join(   R   t   key_materialt   outputt   outlent   countert   h(    (    sN   /usr/lib/python2.7/dist-packages/cryptography/hazmat/primitives/kdf/x963kdf.pyt   derive,   s$    				c         C` s(   t  j |  j |  |  s$ t  n  d  S(   N(   R	   t   bytes_eqR3   R   (   R   R.   t   expected_key(    (    sN   /usr/lib/python2.7/dist-packages/cryptography/hazmat/primitives/kdf/x963kdf.pyt   verifyD   s    (   t   __name__t
   __module__R%   R3   R6   (    (    (    sN   /usr/lib/python2.7/dist-packages/cryptography/hazmat/primitives/kdf/x963kdf.pyR      s   		(   t
   __future__R    R   R   R   t   cryptographyR   t   cryptography.exceptionsR   R   R   R   t'   cryptography.hazmat.backends.interfacesR   t   cryptography.hazmat.primitivesR	   R
   t"   cryptography.hazmat.primitives.kdfR   R   t   register_interfacet   objectR   (    (    (    sN   /usr/lib/python2.7/dist-packages/cryptography/hazmat/primitives/kdf/x963kdf.pyt   <module>   s   "	