3
ãde¨  ã               @   sL   d dl Z d dlmZmZ d dlmZ e jr6d dlmZ G dd„ dej	ƒZ
dS )é    N)ÚUnsupportedAlgorithmÚ_Reasons)Úhashes)ÚBackendc               @   sp   e Zd Zddejd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„ZdS )Ú_HashContextNr   )ÚbackendÚ	algorithmÚreturnc             C   s–   || _ || _|d krŒ| jjjƒ }| jjj|| jjjƒ}| jj|ƒ}|| jjjkrdt	dj
|jƒtjƒ‚| jjj||| jjjƒ}| jj|dkƒ || _d S )Nz+{} is not a supported hash on this backend.r   )Ú
_algorithmÚ_backendÚ_libÚEVP_MD_CTX_newÚ_ffiÚgcÚEVP_MD_CTX_freeZ_evp_md_from_algorithmZNULLr   ÚformatÚnamer   ZUNSUPPORTED_HASHZEVP_DigestInit_exÚopenssl_assertÚ_ctx)Úselfr   r   ÚctxZevp_mdÚres© r   úb/var/www/agendate/envp3/lib/python3.6/site-packages/cryptography/hazmat/backends/openssl/hashes.pyÚ__init__   s     z_HashContext.__init__)r	   c             C   s   | j S )N)r
   )r   r   r   r   r   *   s    z_HashContext.algorithmc             C   sV   | j jjƒ }| j jj|| j jjƒ}| j jj|| jƒ}| j j|dkƒ t	| j | j
|d�S )Nr   )r   )r   r   r   r   r   r   ZEVP_MD_CTX_copy_exr   r   r   r   )r   Z
copied_ctxr   r   r   r   Úcopy.   s    z_HashContext.copy)Údatar	   c             C   s:   | j jj|ƒ}| j jj| j|t|ƒƒ}| j j|dkƒ d S )Nr   )r   r   Úfrom_bufferr   ZEVP_DigestUpdater   Úlenr   )r   r   Zdata_ptrr   r   r   r   Úupdate7   s    z_HashContext.updatec             C   s”   t | jtjƒr| jƒ S | 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 d S )Nzunsigned char[]zunsigned int *r   )Ú
isinstancer   r   ZExtendableOutputFunctionÚ_finalize_xofr   r   Únewr   ZEVP_MAX_MD_SIZEZEVP_DigestFinal_exr   r   Údigest_sizeÚbuffer)r   ÚbufZoutlenr   r   r   r   Úfinalize>   s    z_HashContext.finalizec             C   sV   | j jjd| jjƒ}| j jj| j|| jjƒ}| j j|dkƒ | j jj	|ƒd | jj… S )Nzunsigned char[]r   )
r   r   r"   r   r#   r   ZEVP_DigestFinalXOFr   r   r$   )r   r%   r   r   r   r   r!   N   s    z_HashContext._finalize_xof)N)Ú__name__Ú
__module__Ú__qualname__r   ZHashAlgorithmr   Úpropertyr   r   Úbytesr   r&   r!   r   r   r   r   r      s   	r   )ÚtypingZcryptography.exceptionsr   r   Zcryptography.hazmat.primitivesr   ÚTYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.backendr   ZHashContextr   r   r   r   r   Ú<module>   s
   