3
ãde  ã               @   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jjkƒ | jjj|| jjjƒ}| jj	|ƒ}|| jjjkrzt
dj|jƒtjƒ‚| jjj|ƒ}| jjj||t|ƒ|| j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   ú`/var/www/agendate/envp3/lib/python3.6/site-packages/cryptography/hazmat/backends/openssl/hmac.pyÚ__init__   s$    z_HMACContext.__init__)Úreturnc             C   s   | j S )N)r   )r   r   r   r   r   2   s    z_HMACContext.algorithmc             C   sp   | j jjƒ }| j j|| j jjkƒ | j jj|| 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   Úcopy6   s    z_HMACContext.copy)Údatar!   c             C   s:   | j jj|ƒ}| j jj| j|t|ƒƒ}| j j|dkƒ d S )Nr   )r   r   r   r   ZHMAC_Updater   r   r   )r   r#   Zdata_ptrr   r   r   r   ÚupdateB   s    z_HMACContext.updatec             C   sz   | j jjd| j jjƒ}| j jjdƒ}| j jj| j||ƒ}| j j|dkƒ | j j|d | jj	kƒ | j 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   ÚfinalizeG   s    z_HMACContext.finalize)Ú	signaturer!   c             C   s    | j ƒ }tj||ƒstdƒ‚d S )NzSignature did not match digest.)r)   r   Zbytes_eqr   )r   r*   Údigestr   r   r   ÚverifyQ   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
   