o
    gàe+	  ã                   @   s4   d dl mZ d dlmZ dZdZG dd„ deƒZdS )é    )ÚInvalidSignature)Úconstant_timeé   é    c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú_Poly1305Contextc                 C   sà   || _ | j j |¡}| j j | j jj| j jj|t|ƒ¡}| j  || j jjk¡ | j j 	|| j jj
¡| _| j j ¡ }| j  || j jjk¡ | j j 	|| j jj¡| _| j j | j| j jj| j jj| j jj| j¡}| j  |dk¡ d S )Né   )Ú_backendÚ_ffiÚfrom_bufferÚ_libÚEVP_PKEY_new_raw_private_keyÚNID_poly1305ÚNULLÚlenÚopenssl_assertÚgcÚEVP_PKEY_freeÚ	_evp_pkeyÚEVP_MD_CTX_newÚEVP_MD_CTX_freeÚ_ctxÚEVP_DigestSignInit)ÚselfÚbackendÚkeyÚkey_ptrÚevp_pkeyÚctxÚres© r   úO/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/poly1305.pyÚ__init__   s2   ü
ÿ
ÿûz_Poly1305Context.__init__c                 C   s:   | j j |¡}| j j | j|t|ƒ¡}| j  |dk¡ d S )Nr   )r   r	   r
   r   ÚEVP_DigestSignUpdater   r   r   )r   ÚdataÚdata_ptrr   r   r   r    Úupdate-   s
   ÿz_Poly1305Context.updatec                 C   sr   | j j dt¡}| j j dt¡}| j j | j||¡}| j  |dk¡ | j  |d tk¡ | j j |¡d |d … S )Nzunsigned char[]zsize_t *r   )	r   r	   ÚnewÚ_POLY1305_TAG_SIZEr   ÚEVP_DigestSignFinalr   r   Úbuffer)r   ÚbufÚoutlenr   r   r   r    Úfinalize4   s   z_Poly1305Context.finalizec                 C   s    |   ¡ }t ||¡stdƒ‚d S )Nz!Value did not match computed tag.)r,   r   Úbytes_eqr   )r   ÚtagÚmacr   r   r    Úverify<   s   ÿz_Poly1305Context.verifyN)Ú__name__Ú
__module__Ú__qualname__r!   r%   r,   r0   r   r   r   r    r      s
    r   N)Úcryptography.exceptionsr   Úcryptography.hazmat.primitivesr   r'   Ú_POLY1305_KEY_SIZEÚobjectr   r   r   r   r    Ú<module>   s
   