ó
Õ{PXc           @` sš   d  d l  m Z m Z m Z d  d l m Z d  d l m Z m Z m	 Z	 d  d l
 m Z m Z d  d l m Z e j e j ƒ d e f d „  ƒ  Yƒ Z d S(	   i    (   t   absolute_importt   divisiont   print_function(   t   utils(   t   InvalidSignaturet   UnsupportedAlgorithmt   _Reasons(   t   constant_timet
   interfaces(   t   CBCt   _CMACContextc           B` sG   e  Z d d  „ Z e j d ƒ Z d „  Z d „  Z d „  Z	 d „  Z
 RS(   c         C` s+  | j  | ƒ s$ t d t j ƒ ‚ n  | |  _ | j |  _ | |  _ | j d |  _	 | d  k r|  j j } | t | ƒ t f } | |  j | t ƒ } |  j j j ƒ  } |  j j | |  j j j k ƒ |  j j j | |  j j j ƒ } |  j j j | |  j t |  j ƒ | |  j j j ƒ n  | |  _ d  S(   Ns#   This backend does not support CMAC.i   (   t   cmac_algorithm_supportedR   R   t   UNSUPPORTED_CIPHERt   _backendt   keyt   _keyt
   _algorithmt
   block_sizet   _output_lengtht   Nonet   _cipher_registryt   typeR	   t   _libt   CMAC_CTX_newt   openssl_assertt   _ffit   NULLt   gct   CMAC_CTX_freet	   CMAC_Initt   lent   _ctx(   t   selft   backendt	   algorithmt   ctxt   registryt   adaptert
   evp_cipher(    (    sM   /usr/lib/python2.7/dist-packages/cryptography/hazmat/backends/openssl/cmac.pyt   __init__   s$    		!R   c         C` s>   |  j  j j |  j | t | ƒ ƒ } |  j  j | d k ƒ d  S(   Ni   (   R   R   t   CMAC_UpdateR   R   R   (   R    t   datat   res(    (    sM   /usr/lib/python2.7/dist-packages/cryptography/hazmat/backends/openssl/cmac.pyt   update0   s    $c         C` s‡   |  j  j j d |  j ƒ } |  j  j j d |  j ƒ } |  j  j j |  j | | ƒ } |  j  j | d k ƒ d  |  _ |  j  j j	 | ƒ S(   Ns   unsigned char[]s   size_t *i   (
   R   R   t   newR   R   t
   CMAC_FinalR   R   R   t   buffer(   R    t   buft   lengthR*   (    (    sM   /usr/lib/python2.7/dist-packages/cryptography/hazmat/backends/openssl/cmac.pyt   finalize4   s    	c         C` s}   |  j  j j ƒ  } |  j  j j | |  j  j j ƒ } |  j  j j | |  j ƒ } |  j  j | d k ƒ t	 |  j  |  j
 d | ƒS(   Ni   R#   (   R   R   R   R   R   R   t   CMAC_CTX_copyR   R   R
   R   (   R    t
   copied_ctxR*   (    (    sM   /usr/lib/python2.7/dist-packages/cryptography/hazmat/backends/openssl/cmac.pyt   copy@   s    c         C` s1   |  j  ƒ  } t j | | ƒ s- t d ƒ ‚ n  d  S(   Ns   Signature did not match digest.(   R1   R   t   bytes_eqR   (   R    t	   signaturet   digest(    (    sM   /usr/lib/python2.7/dist-packages/cryptography/hazmat/backends/openssl/cmac.pyt   verifyM   s    N(   t   __name__t
   __module__R   R'   R   t   read_only_propertyR"   R+   R1   R4   R8   (    (    (    sM   /usr/lib/python2.7/dist-packages/cryptography/hazmat/backends/openssl/cmac.pyR
      s   			N(   t
   __future__R    R   R   t   cryptographyR   t   cryptography.exceptionsR   R   R   t   cryptography.hazmat.primitivesR   R   t,   cryptography.hazmat.primitives.ciphers.modesR	   t   register_interfacet
   MACContextt   objectR
   (    (    (    sM   /usr/lib/python2.7/dist-packages/cryptography/hazmat/backends/openssl/cmac.pyt   <module>   s   