B
    `                 @   s  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 G dd de jdZG d	d
 d
e jdZG dd de jdZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd  d eZG d!d" d"eZG d#d$ d$eZG d%d& d&eeZG d'd( d(eeZG d)d* d*eZG d+d, d,eZG d-d. d.eZ dS )/    N)utils)AlreadyFinalizedUnsupportedAlgorithm_Reasons)_get_backend)HashBackendc               @   sN   e Zd ZejedddZejedddZeje	j
e dddZdS )	HashAlgorithm)returnc             C   s   dS )zH
        A string naming this algorithm (e.g. "sha256", "md5").
        N )selfr
   r
   T/home/dcms/DCMS/lib/python3.7/site-packages/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_sizec             C   s   dS )z
        The internal block size of the hash function, or None if the hash
        function does not use blocks internally (e.g. SHA3).
        Nr
   )r   r
   r
   r   
block_size   s    zHashAlgorithm.block_sizeN)__name__
__module____qualname__abcabstractpropertystrr   intr   typingOptionalr   r
   r
   r
   r   r      s   r   )	metaclassc               @   s^   e Zd ZejedddZejeddddZ	ejeddd	Z
ejd dd
dZdS )HashContext)r	   c             C   s   dS )zD
        A HashAlgorithm that will be used by this context.
        Nr
   )r   r
   r
   r   	algorithm(   s    zHashContext.algorithmN)datar	   c             C   s   dS )z@
        Processes the provided bytes through the hash.
        Nr
   )r   r   r
   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   finalize4   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   copy:   s    zHashContext.copy)r   r   r   r   r   r   r   abstractmethodbytesr   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"   A   s   r"   c               @   sR   e Zd ZdedddZedZeddddZ	d d	d
dZ
ed	ddZdS )HashN)r   c             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'   )r   r	   c             C   s.   | j d krtdtd| | j | d S )NzContext was already finalized.r   )r)   r   r   Z_check_bytesliker   )r   r   r
   r
   r   r   ]   s    
zHash.update)r	   c             C   s*   | j d krtdt| j| j| j  dS )NzContext was already finalized.)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 )NzContext was already finalized.)r)   r   r   )r   digestr
   r
   r   r   j   s
    

zHash.finalize)NN)r   r   r   r   r,   r   read_only_propertyr   r!   r   r   r   r
   r
   r
   r   r$   G   s
   
r$   c               @   s   e Zd ZdZdZdZdS )SHA1sha1   @   N)r   r   r   r   r   r   r
   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      N)r   r   r   r   r   r   r
   r
   r
   r   r3   x   s   r3   c               @   s   e Zd ZdZdZdZdS )
SHA512_256z
sha512-256    r5   N)r   r   r   r   r   r   r
   r
   r
   r   r6   ~   s   r6   c               @   s   e Zd ZdZdZdZdS )SHA224sha224r4   r2   N)r   r   r   r   r   r   r
   r
   r
   r   r8      s   r8   c               @   s   e Zd ZdZdZdZdS )SHA256sha256r7   r2   N)r   r   r   r   r   r   r
   r
   r
   r   r:      s   r:   c               @   s   e Zd ZdZdZdZdS )SHA384sha3840   r5   N)r   r   r   r   r   r   r
   r
   r
   r   r<      s   r<   c               @   s   e Zd ZdZdZdZdS )SHA512sha512r2   r5   N)r   r   r   r   r   r   r
   r
   r
   r   r?      s   r?   c               @   s   e Zd ZdZdZdZdS )SHA3_224zsha3-224r4   N)r   r   r   r   r   r   r
   r
   r
   r   rA      s   rA   c               @   s   e Zd ZdZdZdZdS )SHA3_256zsha3-256r7   N)r   r   r   r   r   r   r
   r
   r
   r   rB      s   rB   c               @   s   e Zd ZdZdZdZdS )SHA3_384zsha3-384r>   N)r   r   r   r   r   r   r
   r
   r
   r   rC      s   rC   c               @   s   e Zd ZdZdZdZdS )SHA3_512zsha3-512r2   N)r   r   r   r   r   r   r
   r
   r
   r   rD      s   rD   c               @   s,   e Zd ZdZdZedddZedZ	dS )SHAKE128Zshake128N)r   c             C   s,   t |t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%   r   r&   
ValueError_digest_size)r   r   r
   r
   r   r,      s
    
zSHAKE128.__init__rH   )
r   r   r   r   r   r   r,   r   r.   r   r
   r
   r
   r   rE      s   	rE   c               @   s,   e Zd ZdZdZedddZedZ	dS )SHAKE256Zshake256N)r   c             C   s,   t |tstd|dk r"td|| _d S )Nzdigest_size must be an integerrF   z&digest_size must be a positive integer)r%   r   r&   rG   rH   )r   r   r
   r
   r   r,      s
    
zSHAKE256.__init__rH   )
r   r   r   r   r   r   r,   r   r.   r   r
   r
   r
   r   rI      s   	rI   c               @   s   e Zd ZdZdZdZdS )MD5md5   r2   N)r   r   r   r   r   r   r
   r
   r
   r   rJ      s   rJ   c               @   s4   e Zd ZdZdZdZdZedddZe	
dZd	S )
BLAKE2bblake2br2   rF   r5   )r   c             C   s   |dkrt d|| _d S )Nr2   zDigest size must be 64)rG   rH   )r   r   r
   r
   r   r,      s    zBLAKE2b.__init__rH   N)r   r   r   r   _max_digest_size_min_digest_sizer   r   r,   r   r.   r   r
   r
   r
   r   rM      s   rM   c               @   s4   e Zd ZdZdZdZdZedddZe	
dZd	S )
BLAKE2sblake2sr2   r7   rF   )r   c             C   s   |dkrt d|| _d S )Nr7   zDigest size must be 32)rG   rH   )r   r   r
   r
   r   r,      s    zBLAKE2s.__init__rH   N)r   r   r   r   r   rO   rP   r   r,   r   r.   r   r
   r
   r
   r   rQ      s   rQ   )!r   r   Zcryptographyr   Zcryptography.exceptionsr   r   r   Zcryptography.hazmat.backendsr   Z'cryptography.hazmat.backends.interfacesr   ABCMetar   r   r"   r$   r/   r3   r6   r8   r:   r<   r?   rA   rB   rC   rD   rE   rI   rJ   rM   rQ   r
   r
   r
   r   <module>   s2   +