U
    *”}f«  ã                   @   s‚  d dl mZmZmZ d dlZd dlZd dlmZ d dlm	Z	m
Z
mZ d dlmZ d dlmZ e ej¡G dd„ deƒƒZe ej¡G d	d
„ d
eƒƒZe ej¡G dd„ deƒƒZe e¡G dd„ deƒƒZe e¡G dd„ deƒƒZe e¡G dd„ deƒƒZe e¡G dd„ deƒƒZe e¡G dd„ deƒƒZe e¡G dd„ deƒƒZe e¡G dd„ deƒƒZe e¡G dd„ deƒƒZe e¡G dd„ deƒƒZe e¡G dd „ d eƒƒZ e e¡G d!d"„ d"eƒƒZ!e e¡G d#d$„ d$eƒƒZ"e e¡e e¡G d%d&„ d&eƒƒƒZ#e e¡e e¡G d'd(„ d(eƒƒƒZ$e e¡G d)d*„ d*eƒƒZ%e e¡G d+d,„ d,eƒƒZ&e e¡G d-d.„ d.eƒƒZ'dS )/é    )Úabsolute_importÚdivisionÚprint_functionN)Úutils)ÚAlreadyFinalizedÚUnsupportedAlgorithmÚ_Reasons)Ú_get_backend)ÚHashBackendc                   @   s(   e Zd Zejdd„ ƒZejdd„ ƒZdS )ÚHashAlgorithmc                 C   s   dS )zH
        A string naming this algorithm (e.g. "sha256", "md5").
        N© ©Úselfr   r   úI/tmp/pip-unpacked-wheel-x36vw73o/cryptography/hazmat/primitives/hashes.pyÚname   s    zHashAlgorithm.namec                 C   s   dS )z<
        The size of the resulting digest in bytes.
        Nr   r   r   r   r   Údigest_size   s    zHashAlgorithm.digest_sizeN)Ú__name__Ú
__module__Ú__qualname__ÚabcÚabstractpropertyr   r   r   r   r   r   r      s   
r   c                   @   sD   e Zd Zejdd„ ƒZejdd„ ƒZejdd„ ƒZejdd„ ƒZ	d	S )
ÚHashContextc                 C   s   dS )zD
        A HashAlgorithm that will be used by this context.
        Nr   r   r   r   r   Ú	algorithm&   s    zHashContext.algorithmc                 C   s   dS )z@
        Processes the provided bytes through the hash.
        Nr   ©r   Údatar   r   r   Úupdate,   s    zHashContext.updatec                 C   s   dS )zR
        Finalizes the hash context and returns the hash digest as bytes.
        Nr   r   r   r   r   Úfinalize2   s    zHashContext.finalizec                 C   s   dS )zM
        Return a HashContext that is a copy of the current context.
        Nr   r   r   r   r   Úcopy8   s    zHashContext.copyN)
r   r   r   r   r   r   Úabstractmethodr   r   r   r   r   r   r   r   $   s   


r   c                   @   s   e Zd ZdZdS )ÚExtendableOutputFunctionz7
    An interface for extendable output functions.
    N)r   r   r   Ú__doc__r   r   r   r   r   ?   s   r   c                   @   s8   e Zd Zddd„Ze d¡Zdd„ Zdd„ Zd	d
„ Z	dS )ÚHashNc                 C   s`   t |ƒ}t|tƒstdtjƒ‚t|tƒs0tdƒ‚|| _|| _	|d krV| j	 
| j¡| _n|| _d S )Nz.Backend object does not implement HashBackend.z*Expected instance of hashes.HashAlgorithm.)r	   Ú
isinstancer
   r   r   ZBACKEND_MISSING_INTERFACEr   Ú	TypeErrorÚ
_algorithmÚ_backendZcreate_hash_ctxr   Ú_ctx)r   r   ÚbackendÚctxr   r   r   Ú__init__H   s    
þ
zHash.__init__r$   c                 C   s.   | j d krtdƒ‚t d|¡ | j  |¡ d S )NúContext was already finalized.r   )r&   r   r   Z_check_bytesliker   r   r   r   r   r   ]   s    
zHash.updatec                 C   s*   | j d krtdƒ‚t| j| j| j  ¡ dS )Nr*   )r'   r(   )r&   r   r!   r   r%   r   r   r   r   r   r   c   s    
  ÿz	Hash.copyc                 C   s&   | j d krtdƒ‚| j  ¡ }d | _ |S )Nr*   )r&   r   r   )r   Údigestr   r   r   r   j   s
    

zHash.finalize)NN)
r   r   r   r)   r   Úread_only_propertyr   r   r   r   r   r   r   r   r!   F   s
   

r!   c                   @   s   e Zd ZdZdZdZdS )ÚSHA1Úsha1é   é@   N©r   r   r   r   r   Ú
block_sizer   r   r   r   r-   r   s   r-   c                   @   s   e Zd ZdZdZdZdS )Ú
SHA512_224z
sha512-224é   é€   Nr1   r   r   r   r   r3   y   s   r3   c                   @   s   e Zd ZdZdZdZdS )Ú
SHA512_256z
sha512-256é    r5   Nr1   r   r   r   r   r6   €   s   r6   c                   @   s   e Zd ZdZdZdZdS )ÚSHA224Úsha224r4   r0   Nr1   r   r   r   r   r8   ‡   s   r8   c                   @   s   e Zd ZdZdZdZdS )ÚSHA256Úsha256r7   r0   Nr1   r   r   r   r   r:   Ž   s   r:   c                   @   s   e Zd ZdZdZdZdS )ÚSHA384Úsha384é0   r5   Nr1   r   r   r   r   r<   •   s   r<   c                   @   s   e Zd ZdZdZdZdS )ÚSHA512Úsha512r0   r5   Nr1   r   r   r   r   r?   œ   s   r?   c                   @   s   e Zd ZdZdZdS )ÚSHA3_224zsha3-224r4   N©r   r   r   r   r   r   r   r   r   rA   £   s   rA   c                   @   s   e Zd ZdZdZdS )ÚSHA3_256zsha3-256r7   NrB   r   r   r   r   rC   ©   s   rC   c                   @   s   e Zd ZdZdZdS )ÚSHA3_384zsha3-384r>   NrB   r   r   r   r   rD   ¯   s   rD   c                   @   s   e Zd ZdZdZdS )ÚSHA3_512zsha3-512r0   NrB   r   r   r   r   rE   µ   s   rE   c                   @   s"   e Zd ZdZdd„ Ze d¡ZdS )ÚSHAKE128Zshake128c                 C   s.   t |tjƒstdƒ‚|dk r$tdƒ‚|| _d S ©Nzdigest_size must be an integeré   z&digest_size must be a positive integer©r"   ÚsixÚinteger_typesr#   Ú
ValueErrorÚ_digest_size©r   r   r   r   r   r)   À   s
    zSHAKE128.__init__rM   N©r   r   r   r   r)   r   r,   r   r   r   r   r   rF   »   s   	rF   c                   @   s"   e Zd ZdZdd„ Ze d¡ZdS )ÚSHAKE256Zshake256c                 C   s.   t |tjƒstdƒ‚|dk r$tdƒ‚|| _d S rG   rI   rN   r   r   r   r)   Ñ   s
    zSHAKE256.__init__rM   NrO   r   r   r   r   rP   Ì   s   	rP   c                   @   s   e Zd ZdZdZdZdS )ÚMD5Úmd5é   r0   Nr1   r   r   r   r   rQ   Ý   s   rQ   c                   @   s.   e Zd ZdZdZdZdZdd„ Ze 	d¡Z
dS )	ÚBLAKE2bÚblake2br0   rH   r5   c                 C   s   |dkrt dƒ‚|| _d S )Nr0   zDigest size must be 64©rL   rM   rN   r   r   r   r)   ë   s    zBLAKE2b.__init__rM   N)r   r   r   r   Ú_max_digest_sizeÚ_min_digest_sizer2   r)   r   r,   r   r   r   r   r   rT   ä   s   rT   c                   @   s.   e Zd ZdZdZdZdZdd„ Ze 	d¡Z
dS )	ÚBLAKE2sÚblake2sr0   r7   rH   c                 C   s   |dkrt dƒ‚|| _d S )Nr7   zDigest size must be 32rV   rN   r   r   r   r)   ü   s    zBLAKE2s.__init__rM   N)r   r   r   r   r2   rW   rX   r)   r   r,   r   r   r   r   r   rY   õ   s   rY   )(Ú
__future__r   r   r   r   rJ   Zcryptographyr   Zcryptography.exceptionsr   r   r   Zcryptography.hazmat.backendsr	   Z'cryptography.hazmat.backends.interfacesr
   Úadd_metaclassÚABCMetaÚobjectr   r   r   Zregister_interfacer!   r-   r3   r6   r8   r:   r<   r?   rA   rC   rD   rE   rF   rP   rQ   rT   rY   r   r   r   r   Ú<module>   s`   


+