ó
Õ{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 d  d l	 m
 Z
 d  d l m Z d   Z d   Z d	 e f d
     YZ d S(   i    (   t   absolute_importt   divisiont   print_functionN(   t   Cipher(   t   AES(   t   ECB(   t   bytes_eqc   
      C` s  t  |   d k r! t d   n  t  |  d k  rB t d   n  t  |  d d k rg t d   n  t t |   t   |  j   } d	 } g  t d t  |  d  D] } | | | d !^ q§ } t  |  } x t d
  D]x } xo t |  D]a } | j | | |  }	 t j	 d t j
 d |	 d   d | | | d A } |	 d | | <qð WqÝ W| j   d k sqt  | d j |  S(   Ni   i   i    s/   The wrapping key must be a valid AES key lengths)   The key to wrap must be at least 16 bytesi   i    s-   The key to wrap must be a multiple of 8 bytess   ŠŠŠŠŠŠŠŠi   s   >Qi   iøÿÿÿt    (   i   i   i    (   t   lent
   ValueErrorR   R   R   t	   encryptort   ranget   updatet   structt   packt   unpackt   finalizet   AssertionErrort   join(
   t   wrapping_keyt   key_to_wrapt   backendR
   t   at   it   rt   nt   jt   b(    (    sJ   /usr/lib/python2.7/dist-packages/cryptography/hazmat/primitives/keywrap.pyt   aes_key_wrap   s$    !60c         C` sº  t  |  d k  r! t d   n  t  |  d d k rF t d   n  t  |   d k rg t d   n  t t |   t   |  j   } d	 } g  t d t  |  d  D] } | | | d !^ q§ } | j d  } t  |  } x t t d
   D] }	 x{ t t |   D]g } t	 j
 d t	 j d |  d | |	 | d A | | }
 | j |
  } | d  } | d | | <qWqò W| j   d k st  t | |  s­t    n  d j |  S(   Ni   s   Must be at least 24 bytesi   i    s-   The wrapped key must be a multiple of 8 bytesi   i    s/   The wrapping key must be a valid AES key lengths   ŠŠŠŠŠŠŠŠi   s   >Qi   iøÿÿÿR   (   i   i   i    (   R   R	   R   R   R   t	   decryptorR   t   popt   reversedR   R   R   R   R   R   R   t   InvalidUnwrapR   (   R   t   wrapped_keyR   R   t   aivR   R   R   R   R   t   atrR   (    (    sJ   /usr/lib/python2.7/dist-packages/cryptography/hazmat/primitives/keywrap.pyt   aes_key_unwrap/   s.    !6)
R    c           B` s   e  Z RS(    (   t   __name__t
   __module__(    (    (    sJ   /usr/lib/python2.7/dist-packages/cryptography/hazmat/primitives/keywrap.pyR    T   s   (   t
   __future__R    R   R   R   t&   cryptography.hazmat.primitives.ciphersR   t1   cryptography.hazmat.primitives.ciphers.algorithmsR   t,   cryptography.hazmat.primitives.ciphers.modesR   t,   cryptography.hazmat.primitives.constant_timeR   R   R$   t	   ExceptionR    (    (    (    sJ   /usr/lib/python2.7/dist-packages/cryptography/hazmat/primitives/keywrap.pyt   <module>   s   	 	%