U
    ÒZj  ã                   @   sT   d dl Z d dlmZmZmZ d dlmZmZ e jr>d dl	m
Z
 G dd„ dejƒZdS )é    N)ÚInvalidSignatureÚUnsupportedAlgorithmÚ_Reasons)Úconstant_timeÚhashes)ÚBackendc                   @   sr   e Zd Zddeejdœdd„Zeejdœdd„ƒZd dœd	d
„Z	eddœdd„Z
edœdd„Zeddœdd„ZdS )Ú_HMACContextNr   )ÚbackendÚkeyÚ	algorithmc                 C   sÈ   || _ || _|d kr¸| jj ¡ }| j || jjjk¡ | jj || jjj¡}| j 	|¡}|| jjjkrzt
d |j¡tjƒ‚| jj |¡}| jj ||t|ƒ|| jjj¡}| j |dk¡ || _|| _d S )Nz*{} is not a supported hash on this backendr   )Ú
_algorithmÚ_backendÚ_libÚHMAC_CTX_newÚopenssl_assertÚ_ffiÚNULLÚgcÚHMAC_CTX_freeZ_evp_md_from_algorithmr   ÚformatÚnamer   ZUNSUPPORTED_HASHÚfrom_bufferZHMAC_Init_exÚlenÚ_ctxÚ_key)Úselfr	   r
   r   ÚctxZevp_mdZkey_ptrÚres© r   úl/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/cryptography/hazmat/backends/openssl/hmac.pyÚ__init__   s2    ÿü    ÿz_HMACContext.__init__)Úreturnc                 C   s   | j S )N)r   )r   r   r   r   r   3   s    z_HMACContext.algorithmc                 C   sp   | j j ¡ }| j  || j jjk¡ | j j || j jj¡}| j j || j	¡}| j  |dk¡ t
| j | j| j|d�S )Nr   )r   )r   r   r   r   r   r   r   r   ZHMAC_CTX_copyr   r   r   r   )r   Z
copied_ctxr   r   r   r   Úcopy7   s     ÿ   ÿz_HMACContext.copy)Údatar!   c                 C   s:   | j j |¡}| j j | j|t|ƒ¡}| j  |dk¡ d S )Nr   )r   r   r   r   ZHMAC_Updater   r   r   )r   r#   Zdata_ptrr   r   r   r   ÚupdateC   s    z_HMACContext.updatec                 C   sz   | j j d| j jj¡}| j j d¡}| j j | j||¡}| j  |dk¡ | j  |d | jj	k¡ | j j 
|¡d |d … S )Nzunsigned char[]zunsigned int *r   )r   r   Únewr   ZEVP_MAX_MD_SIZEZ
HMAC_Finalr   r   r   Údigest_sizeÚbuffer)r   ÚbufZoutlenr   r   r   r   ÚfinalizeH   s     ÿz_HMACContext.finalize)Ú	signaturer!   c                 C   s    |   ¡ }t ||¡stdƒ‚d S )NzSignature did not match digest.)r)   r   Zbytes_eqr   )r   r*   Údigestr   r   r   ÚverifyR   s    z_HMACContext.verify)N)Ú__name__Ú
__module__Ú__qualname__Úbytesr   ZHashAlgorithmr    Úpropertyr   r"   r$   r)   r,   r   r   r   r   r      s    ûü
r   )ÚtypingZcryptography.exceptionsr   r   r   Zcryptography.hazmat.primitivesr   r   ÚTYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.backendr   ZHashContextr   r   r   r   r   Ú<module>   s
   