U
    *}f                     @   sH   d dl mZmZmZ d dlmZ d dlmZmZm	Z	 G dd de
ZdS )    )absolute_importdivisionprint_function)utils)AlreadyFinalizedUnsupportedAlgorithm_Reasonsc                   @   sD   e Zd Zdd Zdd Zdd Zdd Zed	d
 Zedd Z	dS )Poly1305c                 C   s0   ddl m} | s tdtj||| _d S )Nr   )backendz5poly1305 is not supported by this version of OpenSSL.)Z,cryptography.hazmat.backends.openssl.backendr
   Zpoly1305_supportedr   r   ZUNSUPPORTED_MACZcreate_poly1305_ctx_ctx)selfkeyr
    r   K/tmp/pip-unpacked-wheel-x36vw73o/cryptography/hazmat/primitives/poly1305.py__init__   s    zPoly1305.__init__c                 C   s.   | j d krtdtd| | j | d S )NContext was already finalized.data)r   r   r   Z_check_byteslikeupdate)r   r   r   r   r   r      s    
zPoly1305.updatec                 C   s&   | j d krtd| j  }d | _ |S )Nr   )r   r   finalize)r   macr   r   r   r   !   s
    

zPoly1305.finalizec                 C   s:   t d| | jd krtd| jd  }| _|| d S )Ntagr   )r   _check_bytesr   r   verify)r   r   ctxr   r   r   r   (   s
    
zPoly1305.verifyc                 C   s   t |}|| | S N)r	   r   r   )clsr   r   pr   r   r   generate_tag0   s    
zPoly1305.generate_tagc                 C   s    t |}|| || d S r   )r	   r   r   )r   r   r   r   r   r   r   r   
verify_tag6   s    
zPoly1305.verify_tagN)
__name__
__module____qualname__r   r   r   r   classmethodr   r   r   r   r   r   r	      s   

r	   N)
__future__r   r   r   Zcryptographyr   Zcryptography.exceptionsr   r   r   objectr	   r   r   r   r   <module>   s   