o
    b+                  
   @   sn  d dl Z d dlZd dlmZ d dlmZ d dlmZmZ G dd de j	dZ
ded	dfd
dZdeje deded	ejeef fddZdeje dedejegef d	efddZdeje deded	ejeef fddZdeje dedejegef d	efd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dS )$    N)utils)AlreadyFinalized)check_ansix923_paddingcheck_pkcs7_paddingc                   @   s8   e Zd ZejdedefddZejdefddZdS )PaddingContextdatareturnc                 C      dS )zR
        Pads the provided bytes and returns any available data as bytes.
        N )selfr   r
   r
   e/var/www/secure340b-portal/env/lib/python3.10/site-packages/cryptography/hazmat/primitives/padding.pyupdate       zPaddingContext.updatec                 C   r	   )z6
        Finalize the padding, returns bytes.
        Nr
   r   r
   r
   r   finalize   r   zPaddingContext.finalizeN)__name__
__module____qualname__abcabstractmethodbytesr   r   r
   r
   r
   r   r      s
    r   )	metaclass
block_sizer   c                 C   s<   d|   krdkst d t d| d dkrt dd S )Nr   i  z%block_size must be in range(0, 2041).   z#block_size must be a multiple of 8.)
ValueError)r   r
   r
   r   _byte_padding_check   s   r   buffer_r   c                 C   sh   | d u rt dtd| | t|7 } t| |d  }| d ||d   }| ||d  d  } | |fS )NContext was already finalized.r   r   )r   r   _check_bytesliker   lenr   r   r   Zfinished_blocksresultr
   r
   r   _byte_padding_update'   s   r"   	paddingfnc                 C   s,   | d u rt d|d t|  }| || S )Nr   r   )r   r   )r   r   r#   pad_sizer
   r
   r   _byte_padding_pad9   s   r%   c                 C   sr   | d u rt dtd| | t|7 } tt| |d  d d}| d ||d   }| ||d  d  } | |fS )Nr   r   r      r   )r   r   r   r   maxr   r    r
   r
   r   _byte_unpadding_updateE   s   r(   checkfnc                 C   sR   | d u rt dt| |d krtd|| }|std| d }| d |  S )Nr   r   zInvalid padding bytes.)r   r   r   )r   r   r)   Zvalidr$   r
   r
   r   _byte_unpadding_checkW   s   r+   c                   @   s*   e Zd ZdefddZdd Zdd ZdS )	PKCS7r   c                 C      t | || _d S Nr   r   r   r   r
   r
   r   __init__l      
zPKCS7.__init__c                 C   
   t | jS r.   )_PKCS7PaddingContextr   r   r
   r
   r   padderp      
zPKCS7.padderc                 C   r3   r.   )_PKCS7UnpaddingContextr   r   r
   r
   r   unpadders   r6   zPKCS7.unpadderN)r   r   r   intr1   r5   r8   r
   r
   r
   r   r,   k   s    r,   c                   @   \   e Zd ZU eje ed< defddZdedefddZ	d	edefd
dZ
defddZdS )r4   _bufferr   c                 C      || _ d| _d S N    r   r;   r0   r
   r
   r   r1   z      
z_PKCS7PaddingContext.__init__r   r   c                 C      t | j|| j\| _}|S r.   r"   r;   r   r   r   r!   r
   r
   r   r         

z_PKCS7PaddingContext.updatesizec                 C   s   t |g| S r.   r   r   rE   r
   r
   r   _padding   s   z_PKCS7PaddingContext._paddingc                 C      t | j| j| j}d | _|S r.   r%   r;   r   rH   r   r!   r
   r
   r   r      
   z_PKCS7PaddingContext.finalizeNr   r   r   typingOptionalr   __annotations__r9   r1   r   rH   r   r
   r
   r
   r   r4   w      
 r4   c                   @   J   e Zd ZU eje ed< defddZdedefddZ	defd	d
Z
dS )r7   r;   r   c                 C   r<   r=   r?   r0   r
   r
   r   r1      r@   z_PKCS7UnpaddingContext.__init__r   r   c                 C   rA   r.   r(   r;   r   rC   r
   r
   r   r      rD   z_PKCS7UnpaddingContext.updatec                 C      t | j| jt}d | _|S r.   )r+   r;   r   r   rK   r
   r
   r   r      s
   
z_PKCS7UnpaddingContext.finalizeNr   r   r   rN   rO   r   rP   r9   r1   r   r   r
   r
   r
   r   r7      
   
 r7   c                   @   s6   e Zd ZdefddZdefddZdefddZd	S )
ANSIX923r   c                 C   r-   r.   r/   r0   r
   r
   r   r1      r2   zANSIX923.__init__r   c                 C   r3   r.   )_ANSIX923PaddingContextr   r   r
   r
   r   r5      r6   zANSIX923.padderc                 C   r3   r.   )_ANSIX923UnpaddingContextr   r   r
   r
   r   r8      r6   zANSIX923.unpadderN)r   r   r   r9   r1   r   r5   r8   r
   r
   r
   r   rW      s    rW   c                   @   r:   )rX   r;   r   c                 C   r<   r=   r?   r0   r
   r
   r   r1      r@   z _ANSIX923PaddingContext.__init__r   r   c                 C   rA   r.   rB   rC   r
   r
   r   r      rD   z_ANSIX923PaddingContext.updaterE   c                 C   s   t dg|d  t |g S )Nr   r&   rF   rG   r
   r
   r   rH      s   z _ANSIX923PaddingContext._paddingc                 C   rI   r.   rJ   rK   r
   r
   r   r      rL   z _ANSIX923PaddingContext.finalizeNrM   r
   r
   r
   r   rX      rQ   rX   c                   @   rR   )rY   r;   r   c                 C   r<   r=   r?   r0   r
   r
   r   r1      r@   z"_ANSIX923UnpaddingContext.__init__r   r   c                 C   rA   r.   rS   rC   r
   r
   r   r      rD   z _ANSIX923UnpaddingContext.updatec                 C   rT   r.   )r+   r;   r   r   rK   r
   r
   r   r      s   z"_ANSIX923UnpaddingContext.finalizeNrU   r
   r
   r
   r   rY      rV   rY   )r   rN   Zcryptographyr   Zcryptography.exceptionsr   Z"cryptography.hazmat.bindings._rustr   r   ABCMetar   r9   r   rO   r   Tupler"   Callabler%   r(   r+   objectr,   r4   r7   rW   rX   rY   r
   r
   r
   r   <module>   sb   



