o
    )%a1                  
   @   sl  d dl Z d dlZd dlmZ d dlmZ d dl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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)libc                   @   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	   H/usr/lib/python3/dist-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_pad6   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_updateB   s   r'   checkfnc                 C   sX   | d u rt dt| |d krtd|| |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_checkT   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__i      
zPKCS7.__init__c                 C   
   t | jS r-   )_PKCS7PaddingContextr   r   r	   r	   r   padderm      
zPKCS7.padderc                 C   r2   r-   )_PKCS7UnpaddingContextr   r   r	   r	   r   unpadderp   r5   zPKCS7.unpadderN)r   r   r   intr0   r4   r7   r	   r	   r	   r   r+   h   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 )r3   _bufferr   c                 C      || _ d| _d S N    r   r:   r/   r	   r	   r   r0   w      
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
   rD   r	   r	   r   _padding   s   z_PKCS7PaddingContext._paddingc                 C      t | j| j| j}d | _|S r-   r$   r:   r   rG   r
   r    r	   r	   r   r      
   z_PKCS7PaddingContext.finalizeNr   r   r   typingOptionalr   __annotations__r8   r0   r   rG   r   r	   r	   r	   r   r3   t      
 r3   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 )r6   r:   r   c                 C   r;   r<   r>   r/   r	   r	   r   r0      r?   z_PKCS7UnpaddingContext.__init__r   r   c                 C   r@   r-   r'   r:   r   rB   r	   r	   r   r      rC   z_PKCS7UnpaddingContext.updatec                 C      t | j| jtj}d | _|S r-   )r*   r:   r   r   Z Cryptography_check_pkcs7_paddingrJ   r	   r	   r   r      rK   z_PKCS7UnpaddingContext.finalizeNr   r   r   rM   rN   r   rO   r8   r0   r   r   r	   r	   r	   r   r6      
   
 r6   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.   r/   r	   r	   r   r0      r1   zANSIX923.__init__r   c                 C   r2   r-   )_ANSIX923PaddingContextr   r   r	   r	   r   r4      r5   zANSIX923.padderc                 C   r2   r-   )_ANSIX923UnpaddingContextr   r   r	   r	   r   r7      r5   zANSIX923.unpadderN)r   r   r   r8   r0   r   r4   r7   r	   r	   r	   r   rV      s    rV   c                   @   r9   )rW   r:   r   c                 C   r;   r<   r>   r/   r	   r	   r   r0      r?   z _ANSIX923PaddingContext.__init__r   r   c                 C   r@   r-   rA   rB   r	   r	   r   r      rC   z_ANSIX923PaddingContext.updaterD   c                 C   s   t dg|d  t |g S )Nr   r%   rE   rF   r	   r	   r   rG      s   z _ANSIX923PaddingContext._paddingc                 C   rH   r-   rI   rJ   r	   r	   r   r      rK   z _ANSIX923PaddingContext.finalizeNrL   r	   r	   r	   r   rW      rP   rW   c                   @   rQ   )rX   r:   r   c                 C   r;   r<   r>   r/   r	   r	   r   r0      r?   z"_ANSIX923UnpaddingContext.__init__r   r   c                 C   r@   r-   rR   rB   r	   r	   r   r      rC   z _ANSIX923UnpaddingContext.updatec                 C   rS   r-   )r*   r:   r   r   Z#Cryptography_check_ansix923_paddingrJ   r	   r	   r   r      s   z"_ANSIX923UnpaddingContext.finalizeNrT   r	   r	   r	   r   rX      rU   rX   )r   rM   Zcryptographyr   Zcryptography.exceptionsr   Z%cryptography.hazmat.bindings._paddingr   ABCMetar   r8   r   rN   r   ZTupler!   Callabler$   r'   r*   objectr+   r3   r6   rV   rW   rX   r	   r	   r	   r   <module>   sb   



