B
    ó±ô`1  ã               @   sR  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	e
ddœd	d
„Zeje ee
ejeef dœdd„Zeje e
eje
gef edœdd„Zeje ee
ejeef dœdd„Zeje e
ejee
ge
f edœ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               @   s6   e Zd Zejeedœdd„ƒZejedœdd„ƒZdS )ÚPaddingContext)ÚdataÚreturnc             C   s   dS )zR
        Pads the provided bytes and returns any available data as bytes.
        N© )Úselfr   r   r   úU/home/dcms/DCMS/lib/python3.7/site-packages/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ÚabstractmethodÚbytesr   r   r   r   r   r
   r      s   r   )Ú	metaclass)Ú
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   )Úbuffer_r   r   r   c             C   sh   | d krt dƒ‚t d|¡ | t|ƒ7 } t| ƒ|d  }| d ||d  … }| ||d  d … } | |fS )NzContext was already finalized.r   r   )r   r   Ú_check_bytesliker   Úlen)r   r   r   Úfinished_blocksÚresultr   r   r
   Ú_byte_padding_update$   s    r   )r   r   Ú	paddingfnr   c             C   s,   | d krt dƒ‚|d t| ƒ }| ||ƒ S )NzContext was already finalized.r   )r   r   )r   r   r   Úpad_sizer   r   r
   Ú_byte_padding_pad6   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 )NzContext was already finalized.r   r   é   r   )r   r   r   r   Úmaxr   )r   r   r   r   r   r   r   r
   Ú_byte_unpadding_updateB   s    r#   )r   r   Úcheckfnr   c             C   sX   | d krt dƒ‚t| ƒ|d kr(tdƒ‚|| |d ƒ}|sBtdƒ‚| d }| d | … S )NzContext was already finalized.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edœdd„Zdd„ Zdd„ ZdS )	ÚPKCS7)r   c             C   s   t |ƒ || _d S )N)r   r   )r	   r   r   r   r
   Ú__init__i   s    zPKCS7.__init__c             C   s
   t | jƒS )N)Ú_PKCS7PaddingContextr   )r	   r   r   r
   Úpadderm   s    zPKCS7.padderc             C   s
   t | jƒS )N)Ú_PKCS7UnpaddingContextr   )r	   r   r   r
   Úunpadderp   s    zPKCS7.unpadderN)r   r   r   Úintr(   r*   r,   r   r   r   r
   r'   h   s   r'   c               @   sX   e Zd ZU eje ed< edœdd„Zeedœdd„Z	eedœd	d
„Z
edœdd„ZdS )r)   Ú_buffer)r   c             C   s   || _ d| _d S )Nó    )r   r.   )r	   r   r   r   r
   r(   w   s    z_PKCS7PaddingContext.__init__)r   r   c             C   s   t | j|| jƒ\| _}|S )N)r   r.   r   )r	   r   r   r   r   r
   r   |   s    z_PKCS7PaddingContext.update)Úsizer   c             C   s   t |gƒ| S )N)r   )r	   r0   r   r   r
   Ú_padding‚   s    z_PKCS7PaddingContext._padding)r   c             C   s   t | j| j| jƒ}d | _|S )N)r    r.   r   r1   )r	   r   r   r   r
   r   …   s    z_PKCS7PaddingContext.finalizeN)r   r   r   ÚtypingÚOptionalr   Ú__annotations__r-   r(   r   r1   r   r   r   r   r
   r)   t   s
   
r)   c               @   sH   e Zd ZU eje ed< edœdd„Zeedœdd„Z	edœd	d
„Z
dS )r+   r.   )r   c             C   s   || _ d| _d S )Nr/   )r   r.   )r	   r   r   r   r
   r(      s    z_PKCS7UnpaddingContext.__init__)r   r   c             C   s   t | j|| jƒ\| _}|S )N)r#   r.   r   )r	   r   r   r   r   r
   r   •   s    z_PKCS7UnpaddingContext.update)r   c             C   s   t | j| jtjƒ}d | _|S )N)r&   r.   r   r   Z Cryptography_check_pkcs7_padding)r	   r   r   r   r
   r   ›   s    z_PKCS7UnpaddingContext.finalizeN)r   r   r   r2   r3   r   r4   r-   r(   r   r   r   r   r   r
   r+      s   
r+   c               @   s6   e Zd Zedœdd„Zedœdd„Zedœdd„Zd	S )
ÚANSIX923)r   c             C   s   t |ƒ || _d S )N)r   r   )r	   r   r   r   r
   r(   ¤   s    zANSIX923.__init__)r   c             C   s
   t | jƒS )N)Ú_ANSIX923PaddingContextr   )r	   r   r   r
   r*   ¨   s    zANSIX923.padderc             C   s
   t | jƒS )N)Ú_ANSIX923UnpaddingContextr   )r	   r   r   r
   r,   «   s    zANSIX923.unpadderN)r   r   r   r-   r(   r   r*   r,   r   r   r   r
   r5   £   s   r5   c               @   sX   e Zd ZU eje ed< edœdd„Zeedœdd„Z	eedœd	d
„Z
edœdd„ZdS )r6   r.   )r   c             C   s   || _ d| _d S )Nr/   )r   r.   )r	   r   r   r   r
   r(   ²   s    z _ANSIX923PaddingContext.__init__)r   r   c             C   s   t | j|| jƒ\| _}|S )N)r   r.   r   )r	   r   r   r   r   r
   r   ·   s    z_ANSIX923PaddingContext.update)r0   r   c             C   s   t dgƒ|d  t |gƒ S )Nr   r!   )r   )r	   r0   r   r   r
   r1   ½   s    z _ANSIX923PaddingContext._padding)r   c             C   s   t | j| j| jƒ}d | _|S )N)r    r.   r   r1   )r	   r   r   r   r
   r   À   s    z _ANSIX923PaddingContext.finalizeN)r   r   r   r2   r3   r   r4   r-   r(   r   r1   r   r   r   r   r
   r6   ¯   s
   
r6   c               @   sH   e Zd ZU eje ed< edœdd„Zeedœdd„Z	edœd	d
„Z
dS )r7   r.   )r   c             C   s   || _ d| _d S )Nr/   )r   r.   )r	   r   r   r   r
   r(   Ë   s    z"_ANSIX923UnpaddingContext.__init__)r   r   c             C   s   t | j|| jƒ\| _}|S )N)r#   r.   r   )r	   r   r   r   r   r
   r   Ð   s    z _ANSIX923UnpaddingContext.update)r   c             C   s   t | j| jtjƒ}d | _|S )N)r&   r.   r   r   Z#Cryptography_check_ansix923_padding)r	   r   r   r   r
   r   Ö   s    z"_ANSIX923UnpaddingContext.finalizeN)r   r   r   r2   r3   r   r4   r-   r(   r   r   r   r   r   r
   r7   È   s   
r7   )r   r2   Zcryptographyr   Zcryptography.exceptionsr   Z%cryptography.hazmat.bindings._paddingr   ÚABCMetar   r-   r   r3   r   ÚTupler   ÚCallabler    r#   r&   Úobjectr'   r)   r+   r5   r6   r7   r   r   r   r
   Ú<module>   s0   		