ó
/<õ\c           @` 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 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   hashest   _HMACContextc           B` sG   e  Z d d   Z e j d  Z d   Z d   Z d   Z	 d   Z
 RS(   c         C` s,  | |  _  | |  _ | d  k r|  j j j   } |  j j | |  j j j k  |  j j j | |  j j j	  } |  j j
 |  } | |  j j j k rļ t d j | j  t j   n  |  j j j |  } |  j j j | | t |  | |  j j j  } |  j j | d k  n  | |  _ | |  _ d  S(   Ns*   {} is not a supported hash on this backendi    (   t
   _algorithmt   _backendt   Nonet   _libt   Cryptography_HMAC_CTX_newt   openssl_assertt   _ffit   NULLt   gct   Cryptography_HMAC_CTX_freet   _evp_md_from_algorithmR   t   formatt   nameR   t   UNSUPPORTED_HASHt   from_buffert   HMAC_Init_ext   lent   _ctxt   _key(   t   selft   backendt   keyt	   algorithmt   ctxt   evp_mdt   key_ptrt   res(    (    sH   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/hmac.pyt   __init__   s&    			$	R
   c         C` sĒ   |  j  j j   } |  j  j | |  j  j j k  |  j  j j | |  j  j j  } |  j  j j | |  j	  } |  j  j | d k  t
 |  j  |  j |  j d | S(   Ni    R!   (   R   R   R   R   R   R   R   R   t   HMAC_CTX_copyR   R	   R   R    (   R   t
   copied_ctxR$   (    (    sH   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/hmac.pyt   copy-   s    c         C` sS   |  j  j j |  } |  j  j j |  j | t |   } |  j  j | d k  d  S(   Ni    (   R   R   R   R   t   HMAC_UpdateR   R   R   (   R   t   datat   data_ptrR$   (    (    sH   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/hmac.pyt   update9   s    $c         C` sĨ   |  j  j j d |  j  j j  } |  j  j j d  } |  j  j j |  j | |  } |  j  j | d k  |  j  j | d |  j j	 k  |  j  j j
 |  | d  S(   Ns   unsigned char[]s   unsigned int *i    (   R   R   t   newR   t   EVP_MAX_MD_SIZEt
   HMAC_FinalR   R   R    t   digest_sizet   buffer(   R   t   buft   outlenR$   (    (    sH   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/hmac.pyt   finalize>   s     c         C` s1   |  j    } t j | |  s- t d   n  d  S(   Ns   Signature did not match digest.(   R4   R   t   bytes_eqR   (   R   t	   signaturet   digest(    (    sH   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/hmac.pyt   verifyG   s    N(   t   __name__t
   __module__R   R%   R   t   read_only_propertyR    R(   R,   R4   R8   (    (    (    sH   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/hmac.pyR	      s   				N(   t
   __future__R    R   R   t   cryptographyR   t   cryptography.exceptionsR   R   R   t   cryptography.hazmat.primitivesR   R   t   register_interfacet   HashContextt   objectR	   (    (    (    sH   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/hmac.pyt   <module>   s
   