o
    cl                     @   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                   @   sN   e Zd ZejdefddZejdefddZejde	j
e fddZdS )	HashAlgorithmreturnc                 C      dS )zH
        A string naming this algorithm (e.g. "sha256", "md5").
        N selfr   r   Iusr/lib/python3.10/site-packages/cryptography/hazmat/primitives/hashes.pyname       zHashAlgorithm.namec                 C   r   )z<
        The size of the resulting digest in bytes.
        Nr   r   r   r   r
   digest_size   r   zHashAlgorithm.digest_sizec                 C   r   )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   r   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defddZejdeddfddZ	ejdefdd	Z
ejdd
dZdS )HashContextr   c                 C   r   )zD
        A HashAlgorithm that will be used by this context.
        Nr   r   r   r   r
   	algorithm$   r   zHashContext.algorithmdataNc                 C   r   )z@
        Processes the provided bytes through the hash.
        Nr   r	   r   r   r   r
   update*   r   zHashContext.updatec                 C   r   )zR
        Finalizes the hash context and returns the hash digest as bytes.
        Nr   r   r   r   r
   finalize0   r   zHashContext.finalizec                 C   r   )zM
        Return a HashContext that is a copy of the current context.
        Nr   r   r   r   r
   copy6   r   zHashContext.copy)r   r   )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"   =   s    r"   c                   @   s|   e Zd ZU eje ed< 		ddedejdejd fddZ	e
d	efd
dZded	dfddZdddZd	efddZdS )Hash_ctxNr   backendctxr   c                 C   sH   t |ts	td|| _|d u rddlm} || j| _d S || _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__F   s   

zHash.__init__r   c                 C      | j S N)r*   r   r   r   r
   r   Y      zHash.algorithmr   c                 C   s.   | j d u r	tdtd| | j | d S )NContext was already finalized.r   )r%   r   r   _check_bytesliker   r   r   r   r
   r   ]   s   
zHash.updatec                 C   s&   | j d u r	tdt| j| j  dS )Nr/   )r'   )r%   r   r$   r   r   r   r   r   r
   r   c   s   
z	Hash.copyc                 C   s&   | j d u r	td| j  }d | _ |S )Nr/   )r%   r   r   )r	   digestr   r   r
   r   h   s
   

zHash.finalize)NN)r   r$   )r   r   r   r   r   r   __annotations__r   Anyr+   propertyr   r!   r   r   r   r   r   r   r
   r$   C   s    
 

r$   c                   @      e Zd ZdZdZdZdS )SHA1Zsha1   @   Nr   r   r   r   r   r   r   r   r   r
   r6   p       r6   c                   @   r5   )
SHA512_224z
sha512-224      Nr9   r   r   r   r
   r;   v   r:   r;   c                   @   r5   )
SHA512_256z
sha512-256    r=   Nr9   r   r   r   r
   r>   |   r:   r>   c                   @   r5   )SHA224Zsha224r<   r8   Nr9   r   r   r   r
   r@      r:   r@   c                   @   r5   )SHA256Zsha256r?   r8   Nr9   r   r   r   r
   rA      r:   rA   c                   @   r5   )SHA384sha3840   r=   Nr9   r   r   r   r
   rB      r:   rB   c                   @   r5   )SHA512sha512r8   r=   Nr9   r   r   r   r
   rE      r:   rE   c                   @      e Zd ZdZdZdZdS )SHA3_224zsha3-224r<   Nr9   r   r   r   r
   rH      r:   rH   c                   @   rG   )SHA3_256zsha3-256r?   Nr9   r   r   r   r
   rI      r:   rI   c                   @   rG   )SHA3_384zsha3-384rD   Nr9   r   r   r   r
   rJ      r:   rJ   c                   @   rG   )SHA3_512zsha3-512r8   Nr9   r   r   r   r
   rK      r:   rK   c                   @   4   e Zd ZdZdZdefddZedefddZdS )	SHAKE128Zshake128Nr   c                 C   ,   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+      
   

zSHAKE128.__init__r   c                 C   r,   r-   rS   r   r   r   r
   r      r.   zSHAKE128.digest_size	r   r   r   r   r   r   r+   r4   r   r   r   r   r
   rM          	rM   c                   @   rL   )	SHAKE256Zshake256Nr   c                 C   rN   rO   rQ   rT   r   r   r
   r+      rU   zSHAKE256.__init__r   c                 C   r,   r-   rV   r   r   r   r
   r      r.   zSHAKE256.digest_sizerW   r   r   r   r
   rY      rX   rY   c                   @   r5   )MD5Zmd5   r8   Nr9   r   r   r   r
   rZ      r:   rZ   c                   @   <   e Zd ZdZdZdZdZdefddZe	defd	d
Z
dS )BLAKE2bZblake2br8   rP   r=   r   c                 C      |dkrt d|| _d S )Nr8   zDigest size must be 64rR   rS   rT   r   r   r
   r+         
zBLAKE2b.__init__r   c                 C   r,   r-   rV   r   r   r   r
   r      r.   zBLAKE2b.digest_sizeN)r   r   r   r   _max_digest_size_min_digest_sizer   r   r+   r4   r   r   r   r   r
   r]          r]   c                   @   r\   )BLAKE2sZblake2sr8   r?   rP   r   c                 C   r^   )Nr?   zDigest size must be 32r_   rT   r   r   r
   r+      r`   zBLAKE2s.__init__r   c                 C   r,   r-   rV   r   r   r   r
   r      r.   zBLAKE2s.digest_sizeN)r   r   r   r   r   ra   rb   r   r+   r4   r   r   r   r   r
   rd      rc   rd   c                   @   r5   )SM3Zsm3r?   r8   Nr9   r   r   r   r
   re      r:   re   )r   r   cryptographyr   Zcryptography.exceptionsr   ABCMetar   r   r"   r$   r6   r;   r>   r@   rA   rB   rE   rH   rI   rJ   rK   rM   rY   rZ   r]   rd   re   r   r   r   r
   <module>   s2   -