o
    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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/d0 d0eZ"dS )1    N)utils)AlreadyFinalizedUnsupportedAlgorithm_Reasons)_get_backend)BackendHashBackendc                   @   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   d/var/www/secure340b-portal/env/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   finalize4   r   zHashContext.finalizec                 C   r   )zM
        Return a HashContext that is a copy of the current context.
        Nr   r   r   r   r   copy:   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'   A   s    r'   c                   @   sp   e Zd Z		ddedeje 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 )HashNr   backendctxr   c                 C   sb   t |}t|tstdtjt|tstd|| _|| _	|d u r,| j	
| j| _d S || _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   r*   r+   r   r   r   __init__H   s   


zHash.__init__r
   c                 C      | j S N)r.   r   r   r   r   r   `      zHash.algorithmr    c                 C   s.   | j d u r	tdtd| | j | d S )NContext was already finalized.r    )r0   r   r   Z_check_bytesliker"   r!   r   r   r   r"   d   s   
zHash.updatec                 C   s*   | j d u r	tdt| j| j| j  dS )Nr5   )r*   r+   )r0   r   r)   r   r/   r$   r   r   r   r   r$   j   s
   
z	Hash.copyc                 C   s&   | j d u r	td| j  }d | _ |S )Nr5   )r0   r   r#   )r   digestr   r   r   r#   q   s
   

zHash.finalize)NN)r
   r)   )r   r   r   r	   r   r   r   r1   propertyr   r&   r"   r$   r#   r   r   r   r   r)   G   s    

r)   c                   @      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   r9   y       r9   c                   @   r8   )
SHA512_224z
sha512-224      Nr=   r   r   r   r   r?      r>   r?   c                   @   r8   )
SHA512_256z
sha512-256    rA   Nr=   r   r   r   r   rB      r>   rB   c                   @   r8   )SHA224sha224r@   r<   Nr=   r   r   r   r   rD      r>   rD   c                   @   r8   )SHA256sha256rC   r<   Nr=   r   r   r   r   rF      r>   rF   c                   @   r8   )SHA384sha3840   rA   Nr=   r   r   r   r   rH      r>   rH   c                   @   r8   )SHA512sha512r<   rA   Nr=   r   r   r   r   rK      r>   rK   c                   @      e Zd ZdZdZdZdS )SHA3_224zsha3-224r@   Nr=   r   r   r   r   rN      r>   rN   c                   @   rM   )SHA3_256zsha3-256rC   Nr=   r   r   r   r   rO      r>   rO   c                   @   rM   )SHA3_384zsha3-384rJ   Nr=   r   r   r   r   rP      r>   rP   c                   @   rM   )SHA3_512zsha3-512r<   Nr=   r   r   r   r   rQ      r>   rQ   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   r1      
   

zSHAKE128.__init__r
   c                 C   r2   r3   rY   r   r   r   r   r      r4   zSHAKE128.digest_size	r   r   r   r   r   r   r1   r7   r   r   r   r   r   rS          	rS   c                   @   rR   )	SHAKE256Zshake256Nr   c                 C   rT   rU   rW   rZ   r   r   r   r1      r[   zSHAKE256.__init__r
   c                 C   r2   r3   r\   r   r   r   r   r      r4   zSHAKE256.digest_sizer]   r   r   r   r   r_      r^   r_   c                   @   r8   )MD5md5   r<   Nr=   r   r   r   r   r`      r>   r`   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 )BLAKE2bblake2br<   rV   rA   r   c                 C      |dkrt d|| _d S )Nr<   zDigest size must be 64rX   rY   rZ   r   r   r   r1         
zBLAKE2b.__init__r
   c                 C   r2   r3   r\   r   r   r   r   r      r4   zBLAKE2b.digest_sizeN)r   r   r   r   _max_digest_size_min_digest_sizer   r   r1   r7   r   r   r   r   r   rd          rd   c                   @   rc   )BLAKE2sblake2sr<   rC   rV   r   c                 C   rf   )NrC   zDigest size must be 32rg   rZ   r   r   r   r1      rh   zBLAKE2s.__init__r
   c                 C   r2   r3   r\   r   r   r   r   r     r4   zBLAKE2s.digest_sizeN)r   r   r   r   r   ri   rj   r   r1   r7   r   r   r   r   r   rl      rk   rl   c                   @   r8   )SM3Zsm3rC   r<   Nr=   r   r   r   r   rn   	  r>   rn   )#r   r   Zcryptographyr   Zcryptography.exceptionsr   r   r   Zcryptography.hazmat.backendsr   Z'cryptography.hazmat.backends.interfacesr   r   ABCMetar	   r   r'   r)   r9   r?   rB   rD   rF   rH   rK   rN   rO   rP   rQ   rS   r_   r`   rd   rl   rn   r   r   r   r   <module>   s6   2