U
    EZh                     @   s  d dl Z d dl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G d-d. d.eZdS )/    N)utils)AlreadyFinalizedc                   @   sZ   e Zd ZeejedddZeejedddZ	e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   l/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/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__propertyabcabstractmethodstrr   intr   typingOptionalr   r   r   r   r
   r      s   r   )	metaclassc                   @   sb   e Zd Ze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 )HashContextr   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
   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.copy)r   r   r   r   r   r   r   r   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"   ?   s   r"   c                   @   sx   e Zd ZU eje ed< deejejd ddddZ	e
eddd	Zedd
ddZd dddZedddZdS )Hash_ctxNr   )r   backendctxr   c                 C   sF   t |tstd|| _|d kr<ddlm} || j| _n|| _d S )Nz*Expected instance of hashes.HashAlgorithm.r   )r&   )	
isinstancer   	TypeError
_algorithmZ,cryptography.hazmat.backends.openssl.backendr&   Zcreate_hash_ctxr   r%   )r	   r   r&   r'   Zosslr   r   r
   __init__H   s    
zHash.__init__r   c                 C   s   | j S N)r*   r   r   r   r
   r   [   s    zHash.algorithmr   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  dS )Nr-   )r'   )r%   r   r$   r   r    r   r   r   r
   r    e   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   r   __annotations__r   Anyr+   r   r   r!   r   r    r   r   r   r   r
   r$   E   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
   r1   r   s   r1   c                   @   s   e Zd ZdZdZdZdS )
SHA512_224z
sha512-224      Nr5   r   r   r   r
   r6   x   s   r6   c                   @   s   e Zd ZdZdZdZdS )
SHA512_256z
sha512-256    r8   Nr5   r   r   r   r
   r9   ~   s   r9   c                   @   s   e Zd ZdZdZdZdS )SHA224sha224r7   r4   Nr5   r   r   r   r
   r;      s   r;   c                   @   s   e Zd ZdZdZdZdS )SHA256sha256r:   r4   Nr5   r   r   r   r
   r=      s   r=   c                   @   s   e Zd ZdZdZdZdS )SHA384sha3840   r8   Nr5   r   r   r   r
   r?      s   r?   c                   @   s   e Zd ZdZdZdZdS )SHA512sha512r4   r8   Nr5   r   r   r   r
   rB      s   rB   c                   @   s   e Zd ZdZdZdZdS )SHA3_224zsha3-224r7   Nr5   r   r   r   r
   rD      s   rD   c                   @   s   e Zd ZdZdZdZdS )SHA3_256zsha3-256r:   Nr5   r   r   r   r
   rE      s   rE   c                   @   s   e Zd ZdZdZdZdS )SHA3_384zsha3-384rA   Nr5   r   r   r   r
   rF      s   rF   c                   @   s   e Zd ZdZdZdZdS )SHA3_512zsha3-512r4   Nr5   r   r   r   r
   rG      s   rG   c                   @   s4   e Zd ZdZdZedddZeedd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__r   c                 C   s   | j S r,   rN   r   r   r   r
   r      s    zSHAKE128.digest_size	r   r   r   r   r   r   r+   r   r   r   r   r   r
   rH      s
   	rH   c                   @   s4   e Zd ZdZdZedddZeedddZdS )	SHAKE256Zshake256NrI   c                 C   s,   t |tstd|dk r"td|| _d S rJ   rL   rO   r   r   r
   r+      s
    
zSHAKE256.__init__r   c                 C   s   | j S r,   rP   r   r   r   r
   r      s    zSHAKE256.digest_sizerQ   r   r   r   r
   rR      s
   	rR   c                   @   s   e Zd ZdZdZdZdS )MD5md5   r4   Nr5   r   r   r   r
   rS      s   rS   c                   @   s<   e Zd ZdZdZdZdZedddZe	edd	d
Z
dS )BLAKE2bblake2br4   rK   r8   rI   c                 C   s   |dkrt d|| _d S )Nr4   zDigest size must be 64rM   rN   rO   r   r   r
   r+      s    zBLAKE2b.__init__r   c                 C   s   | j S r,   rP   r   r   r   r
   r      s    zBLAKE2b.digest_sizeN)r   r   r   r   _max_digest_size_min_digest_sizer   r   r+   r   r   r   r   r   r
   rV      s   rV   c                   @   s<   e Zd ZdZdZdZdZedddZe	edd	d
Z
dS )BLAKE2sblake2sr4   r:   rK   rI   c                 C   s   |dkrt d|| _d S )Nr:   zDigest size must be 32rX   rO   r   r   r
   r+      s    zBLAKE2s.__init__r   c                 C   s   | j S r,   rP   r   r   r   r
   r      s    zBLAKE2s.digest_sizeN)r   r   r   r   r   rY   rZ   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 )SM3Zsm3r:   r4   Nr5   r   r   r   r
   r]      s   r]   )r   r   Zcryptographyr   Zcryptography.exceptionsr   ABCMetar   r   r"   r$   r1   r6   r9   r;   r=   r?   rB   rD   rE   rF   rG   rH   rR   rS   rV   r[   r]   r   r   r   r
   <module>   s0   -