U
    Nf                     @  s  d dl mZ 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	d
dddZddd	ddddZdd	dddddZddd	ddddZdd	dddddZG dd dZG d d! d!eZG d"d# d#eZG d$d% d%ZG d&d' d'eZG d(d) d)eZdS )*    )annotationsN)utils)AlreadyFinalized)check_ansix923_paddingcheck_pkcs7_paddingc                   @  s6   e Zd ZejdddddZejddddZdS )	PaddingContextbytesdatareturnc                 C  s   dS )zR
        Pads the provided bytes and returns any available data as bytes.
        N )selfr
   r   r   J/tmp/pip-unpacked-wheel-bjwtc2fy/cryptography/hazmat/primitives/padding.pyupdate   s    zPaddingContext.updater   c                 C  s   dS )z6
        Finalize the padding, returns bytes.
        Nr   r   r   r   r   finalize   s    zPaddingContext.finalizeN)__name__
__module____qualname__abcabstractmethodr   r   r   r   r   r   r      s   r   )	metaclassintNone)
block_sizer   c                 C  s6   d|   krdksn t d| d dkr2t 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   bytes | Noner   ztuple[bytes, bytes])buffer_r
   r   r   c                 C  sh   | d k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'   ztyping.Callable[[int], bytes])r!   r   	paddingfnr   c                 C  s,   | d krt d|d t|  }| || S )Nr"   r   )r   r$   )r!   r   r(   pad_sizer   r   r   _byte_padding_pad:   s    r*   c                 C  sr   | d k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_updateF   s    r-   ztyping.Callable[[bytes], int])r!   r   checkfnr   c                 C  sR   | d k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_checkX   s    r0   c                   @  s6   e Zd ZddddZddddZddd	d
ZdS )PKCS7r   r   c                 C  s   t | || _d S Nr   r   r   r   r   r   r   __init__m   s    zPKCS7.__init__r   r   c                 C  s
   t | jS r2   )_PKCS7PaddingContextr   r   r   r   r   padderq   s    zPKCS7.padderc                 C  s
   t | jS r2   )_PKCS7UnpaddingContextr   r   r   r   r   unpaddert   s    zPKCS7.unpadderNr   r   r   r5   r7   r9   r   r   r   r   r1   l   s   r1   c                   @  sR   e Zd ZU ded< ddddZdddd	d
ZdddddZddddZdS )r6   r    _bufferr   r   c                 C  s   || _ d| _d S N    r   r;   r4   r   r   r   r5   {   s    z_PKCS7PaddingContext.__init__r   r	   c                 C  s   t | j|| j\| _}|S r2   r'   r;   r   r   r
   r&   r   r   r   r      s      
z_PKCS7PaddingContext.updatesizer   c                 C  s   t |g| S r2   r   r   rB   r   r   r   _padding   s    z_PKCS7PaddingContext._paddingr   c                 C  s   t | j| j| j}d | _|S r2   r*   r;   r   rE   r   r&   r   r   r   r      s      z_PKCS7PaddingContext.finalizeNr   r   r   __annotations__r5   r   rE   r   r   r   r   r   r6   x   s
   
r6   c                   @  sB   e Zd ZU ded< ddddZdddd	d
ZddddZdS )r8   r    r;   r   r   c                 C  s   || _ d| _d S r<   r>   r4   r   r   r   r5      s    z_PKCS7UnpaddingContext.__init__r   r	   c                 C  s   t | j|| j\| _}|S r2   r-   r;   r   r@   r   r   r   r      s      
z_PKCS7UnpaddingContext.updater   c                 C  s   t | j| jt}d | _|S r2   )r0   r;   r   r   rG   r   r   r   r      s      z_PKCS7UnpaddingContext.finalizeNr   r   r   rI   r5   r   r   r   r   r   r   r8      s   
r8   c                   @  s6   e Zd ZddddZddddZddd	d
ZdS )ANSIX923r   r   c                 C  s   t | || _d S r2   r3   r4   r   r   r   r5      s    zANSIX923.__init__r   r   c                 C  s
   t | jS r2   )_ANSIX923PaddingContextr   r   r   r   r   r7      s    zANSIX923.padderc                 C  s
   t | jS r2   )_ANSIX923UnpaddingContextr   r   r   r   r   r9      s    zANSIX923.unpadderNr:   r   r   r   r   rL      s   rL   c                   @  sR   e Zd ZU ded< ddddZdddd	d
ZdddddZddddZdS )rM   r    r;   r   r   c                 C  s   || _ d| _d S r<   r>   r4   r   r   r   r5      s    z _ANSIX923PaddingContext.__init__r   r	   c                 C  s   t | j|| j\| _}|S r2   r?   r@   r   r   r   r      s      
z_ANSIX923PaddingContext.updaterA   c                 C  s   t dg|d  t |g S )Nr   r+   rC   rD   r   r   r   rE      s    z _ANSIX923PaddingContext._paddingr   c                 C  s   t | j| j| j}d | _|S r2   rF   rG   r   r   r   r      s      z _ANSIX923PaddingContext.finalizeNrH   r   r   r   r   rM      s
   
rM   c                   @  sB   e Zd ZU ded< ddddZdddd	d
ZddddZdS )rN   r    r;   r   r   c                 C  s   || _ d| _d S r<   r>   r4   r   r   r   r5      s    z"_ANSIX923UnpaddingContext.__init__r   r	   c                 C  s   t | j|| j\| _}|S r2   rJ   r@   r   r   r   r      s      
z _ANSIX923UnpaddingContext.updater   c                 C  s   t | j| jt}d | _|S r2   )r0   r;   r   r   rG   r   r   r   r      s    z"_ANSIX923UnpaddingContext.finalizeNrK   r   r   r   r   rN      s   
rN   )
__future__r   r   typingZcryptographyr   Zcryptography.exceptionsr   Z"cryptography.hazmat.bindings._rustr   r   ABCMetar   r   r'   r*   r-   r0   r1   r6   r8   rL   rM   rN   r   r   r   r   <module>   s"   