o
    ªŒcÒ	  ã                   @   sL   d dl Z d dlmZ d dlmZ dZdZe jrd dlm	Z	 G dd„ dƒZ
dS )	é    N)ÚInvalidSignature)Úconstant_timeé   é    )ÚBackendc                   @   sT   e Zd Zdddeddfdd„Zdeddfd	d
„Zdefdd„Zdeddfdd„ZdS )Ú_Poly1305ContextÚbackendr   ÚkeyÚreturnNc                 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Ú_libZEVP_PKEY_new_raw_private_keyZNID_poly1305ÚNULLÚlenÚopenssl_assertÚgcZEVP_PKEY_freeZ	_evp_pkeyZEVP_MD_CTX_newZEVP_MD_CTX_freeÚ_ctxZEVP_DigestSignInit)Úselfr   r	   Zkey_ptrZevp_pkeyÚctxÚres© r   úQusr/lib/python3.10/site-packages/cryptography/hazmat/backends/openssl/poly1305.pyÚ__init__   s2   ü
ÿ
ÿûz_Poly1305Context.__init__Údatac                 C   s:   | j j |¡}| j j | j|t|ƒ¡}| j  |dk¡ d S )Nr   )r   r   r   r   ZEVP_DigestSignUpdater   r   r   )r   r   Zdata_ptrr   r   r   r   Úupdate2   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   ZEVP_DigestSignFinalr   r   Úbuffer)r   ÚbufZoutlenr   r   r   r   Úfinalize9   s   z_Poly1305Context.finalizeÚtagc                 C   s    |   ¡ }t ||¡stdƒ‚d S )Nz!Value did not match computed tag.)r!   r   Zbytes_eqr   )r   r"   Zmacr   r   r   ÚverifyA   s   ÿz_Poly1305Context.verify)Ú__name__Ú
__module__Ú__qualname__Úbytesr   r   r!   r#   r   r   r   r   r      s
    r   )ÚtypingZcryptography.exceptionsr   Zcryptography.hazmat.primitivesr   r   Z_POLY1305_KEY_SIZEÚTYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.backendr   r   r   r   r   r   Ú<module>   s   