B
    \                 @   s  d dl mZmZ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 eejG dd deZdd	 Zd
d Zdd Zdd Zdd ZG dd deZeeG dd deZeeG dd deZG dd deZeeG dd deZeeG dd deZdS )    )absolute_importdivisionprint_functionN)utils)AlreadyFinalized)libc               @   s(   e Zd Zejdd Zejdd ZdS )PaddingContextc             C   s   dS )zR
        Pads the provided bytes and returns any available data as bytes.
        N )selfdatar	   r	   Elib/python3.7/site-packages/cryptography/hazmat/primitives/padding.pyupdate   s    zPaddingContext.updatec             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   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)
block_sizer	   r	   r   _byte_padding_check   s    r   c             C   sd   | d krt dtd| | |7 } t| |d  }| d ||d   }| ||d  d  } | |fS )NzContext was already finalized.r   r   )r   r   _check_byteslen)buffer_r   r   finished_blocksresultr	   r	   r   _byte_padding_update'   s    r   c             C   s,   | d krt d|d t|  }| || S )NzContext was already finalized.r   )r   r   )r   r   Z	paddingfnpad_sizer	   r	   r   _byte_padding_pad7   s    r   c             C   sn   | d krt dtd| | |7 } tt| |d  d d}| d ||d   }| ||d  d  } | |fS )NzContext was already finalized.r   r      r   )r   r   r   maxr   )r   r   r   r   r   r	   r	   r   _byte_unpadding_update?   s    r"   c             C   s\   | d krt dt| |d kr(td|| |d }|sBtdt| d}| d |  S )NzContext was already finalized.r   zInvalid padding bytes.)r   r   r   sixZ
indexbytes)r   r   ZcheckfnZvalidr   r	   r	   r   _byte_unpadding_checkO   s    r%   c               @   s$   e Zd Zdd Zdd Zdd ZdS )PKCS7c             C   s   t | || _d S )N)r   r   )r
   r   r	   r	   r   __init__`   s    zPKCS7.__init__c             C   s
   t | jS )N)_PKCS7PaddingContextr   )r
   r	   r	   r   padderd   s    zPKCS7.padderc             C   s
   t | jS )N)_PKCS7UnpaddingContextr   )r
   r	   r	   r   unpadderg   s    zPKCS7.unpadderN)r   r   r   r'   r)   r+   r	   r	   r	   r   r&   _   s   r&   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r(   c             C   s   || _ d| _d S )N    )r   _buffer)r
   r   r	   r	   r   r'   m   s    z_PKCS7PaddingContext.__init__c             C   s   t | j|| j\| _}|S )N)r   r-   r   )r
   r   r   r	   r	   r   r   r   s    z_PKCS7PaddingContext.updatec             C   s   t || S )N)r$   int2byte)r
   sizer	   r	   r   _paddingw   s    z_PKCS7PaddingContext._paddingc             C   s   t | j| j| j}d | _|S )N)r   r-   r   r0   )r
   r   r	   r	   r   r   z   s    z_PKCS7PaddingContext.finalizeN)r   r   r   r'   r   r0   r   r	   r	   r	   r   r(   k   s   r(   c               @   s$   e Zd Zdd Zdd Zdd ZdS )r*   c             C   s   || _ d| _d S )Nr,   )r   r-   )r
   r   r	   r	   r   r'      s    z_PKCS7UnpaddingContext.__init__c             C   s   t | j|| j\| _}|S )N)r"   r-   r   )r
   r   r   r	   r	   r   r      s    z_PKCS7UnpaddingContext.updatec             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   r'   r   r   r	   r	   r	   r   r*      s   r*   c               @   s$   e Zd Zdd Zdd Zdd ZdS )ANSIX923c             C   s   t | || _d S )N)r   r   )r
   r   r	   r	   r   r'      s    zANSIX923.__init__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   r1      s   r1   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r2   c             C   s   || _ d| _d S )Nr,   )r   r-   )r
   r   r	   r	   r   r'      s    z _ANSIX923PaddingContext.__init__c             C   s   t | j|| j\| _}|S )N)r   r-   r   )r
   r   r   r	   r	   r   r      s    z_ANSIX923PaddingContext.updatec             C   s   t d|d  t | S )Nr   r    )r$   r.   )r
   r/   r	   r	   r   r0      s    z _ANSIX923PaddingContext._paddingc             C   s   t | j| j| j}d | _|S )N)r   r-   r   r0   )r
   r   r	   r	   r   r      s    z _ANSIX923PaddingContext.finalizeN)r   r   r   r'   r   r0   r   r	   r	   r	   r   r2      s   r2   c               @   s$   e Zd Zdd Zdd Zdd ZdS )r3   c             C   s   || _ d| _d S )Nr,   )r   r-   )r
   r   r	   r	   r   r'      s    z"_ANSIX923UnpaddingContext.__init__c             C   s   t | j|| j\| _}|S )N)r"   r-   r   )r
   r   r   r	   r	   r   r      s    z _ANSIX923UnpaddingContext.updatec             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   r'   r   r   r	   r	   r	   r   r3      s   r3   )Z
__future__r   r   r   r   r$   Zcryptographyr   Zcryptography.exceptionsr   Z%cryptography.hazmat.bindings._paddingr   Zadd_metaclassABCMetaobjectr   r   r   r   r"   r%   r&   Zregister_interfacer(   r*   r1   r2   r3   r	   r	   r	   r   <module>   s,   