3
ãdeÑ	  ã               @   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               @   sL   e Zd Zdeddœdd„Zeddœdd„Zed	œd
d„Zeddœdd„ZdS )Ú_Poly1305Contextr   N)ÚbackendÚkeyÚreturnc             C   sà   || _ | j jj|ƒ}| j jj| j jj| j jj|t|ƒƒ}| j j|| j jjkƒ | j jj	|| 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| jƒ}| j j|dkƒ d S )Né   )Ú_backendÚ_ffiÚfrom_bufferÚ_libZEVP_PKEY_new_raw_private_keyZNID_poly1305Z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   úd/var/www/agendate/envp3/lib/python3.6/site-packages/cryptography/hazmat/backends/openssl/poly1305.pyÚ__init__   s*    
z_Poly1305Context.__init__)Údatar
   c             C   s:   | j jj|ƒ}| j jj| j|t|ƒƒ}| j j|dkƒ d S )Nr   )r   r   r   r   ZEVP_DigestSignUpdater   r   r   )r   r   Zdata_ptrr   r   r   r   Úupdate1   s    z_Poly1305Context.update)r
   c             C   sr   | j jjdtƒ}| j jjdtƒ}| j jj| j||ƒ}| j j|dkƒ | j j|d tkƒ | j 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   Úfinalize8   s    z_Poly1305Context.finalize)Útagr
   c             C   s    | j ƒ }tj||ƒstdƒ‚d S )Nz!Value did not match computed tag.)r    r   Zbytes_eqr   )r   r!   Úmacr   r   r   Úverify@   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   