U
    çe¨]„  ã                   @   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   úI/usr/lib/python3/dist-packages/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   Z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   Zctxr   r   r   r   %   s
    
zPoly1305.verifyc                 C   s   t |ƒ}| |¡ | ¡ S ©N)r	   r   r   )Úclsr   r   Úpr   r   r   Úgenerate_tag-   s    
zPoly1305.generate_tagc                 C   s    t |ƒ}| |¡ | |¡ d S r   )r	   r   r   )r   r   r   r   r   r   r   r   Ú
verify_tag3   s    
zPoly1305.verify_tagN)
Ú__name__Ú
__module__Ú__qualname__r   r   r   r   Úclassmethodr   r   r   r   r   r   r	      s   	
r	   N)Z
__future__r   r   r   Zcryptographyr   Zcryptography.exceptionsr   r   r   Úobjectr	   r   r   r   r   Ú<module>   s   