a
     `                     @   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	   H/usr/lib/python3/dist-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   sv   | d u rt dtd| | t|tr,|nt|7 } t| |d  }| d ||d   }| ||d  d  } | |fS )NContext was already finalized.r   r   )r   r   _check_byteslike
isinstancebyteslenbuffer_r   r   Zfinished_blocksresultr	   r	   r   _byte_padding_update'   s    r!   c                 C   s,   | d u rt d|d t|  }| || S )Nr   r   )r   r   )r   r   Z	paddingfnpad_sizer	   r	   r   _byte_padding_pad:   s    r#   c                 C   s   | d u rt dtd| | t|tr,|nt|7 } tt| |d  d d}| d ||d   }| ||d  d  } | |fS )Nr   r   r      r   )r   r   r   r   r   maxr   r   r	   r	   r   _byte_unpadding_updateB   s    r&   c                 C   s\   | d u rt dt| |d kr(td|| |d }|sBtdt| d}| d |  S )Nr   r   zInvalid padding bytes.)r   r   r   sixZ
indexbytes)r   r   ZcheckfnZvalidr"   r	   r	   r   _byte_unpadding_checkU   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__f   s    zPKCS7.__init__c                 C   s
   t | jS r+   )_PKCS7PaddingContextr   r   r	   r	   r   padderj   s    zPKCS7.padderc                 C   s
   t | jS r+   )_PKCS7UnpaddingContextr   r   r	   r	   r   unpadderm   s    zPKCS7.unpadderNr   r   r   r.   r0   r2   r	   r	   r	   r   r*   e   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   _bufferr-   r	   r	   r   r.   s   s    z_PKCS7PaddingContext.__init__c                 C   s   t | j|| j\| _}|S r+   r!   r7   r   r
   r   r    r	   r	   r   r   x   s    

z_PKCS7PaddingContext.updatec                 C   s   t || S r+   r(   Zint2byter
   sizer	   r	   r   _padding~   s    z_PKCS7PaddingContext._paddingc                 C   s   t | j| j| j}d | _|S r+   r#   r7   r   r=   r
   r    r	   r	   r   r      s
    z_PKCS7PaddingContext.finalizeNr   r   r   r.   r   r=   r   r	   r	   r	   r   r/   q   s   r/   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )r1   c                 C   s   || _ d| _d S r4   r6   r-   r	   r	   r   r.      s    z_PKCS7UnpaddingContext.__init__c                 C   s   t | j|| j\| _}|S r+   r&   r7   r   r9   r	   r	   r   r      s    

z_PKCS7UnpaddingContext.updatec                 C   s   t | j| jtj}d | _|S r+   )r)   r7   r   r   Z Cryptography_check_pkcs7_paddingr?   r	   r	   r   r      s
    z_PKCS7UnpaddingContext.finalizeN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S )ANSIX923c                 C   s   t | || _d S r+   r,   r-   r	   r	   r   r.      s    zANSIX923.__init__c                 C   s
   t | jS r+   )_ANSIX923PaddingContextr   r   r	   r	   r   r0      s    zANSIX923.padderc                 C   s
   t | jS r+   )_ANSIX923UnpaddingContextr   r   r	   r	   r   r2      s    zANSIX923.unpadderNr3   r	   r	   r	   r   rC      s   rC   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
rD   c                 C   s   || _ d| _d S r4   r6   r-   r	   r	   r   r.      s    z _ANSIX923PaddingContext.__init__c                 C   s   t | j|| j\| _}|S r+   r8   r9   r	   r	   r   r      s    

z_ANSIX923PaddingContext.updatec                 C   s   t d|d  t | S )Nr   r$   r:   r;   r	   r	   r   r=      s    z _ANSIX923PaddingContext._paddingc                 C   s   t | j| j| j}d | _|S r+   r>   r?   r	   r	   r   r      s
    z _ANSIX923PaddingContext.finalizeNr@   r	   r	   r	   r   rD      s   rD   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )rE   c                 C   s   || _ d| _d S r4   r6   r-   r	   r	   r   r.      s    z"_ANSIX923UnpaddingContext.__init__c                 C   s   t | j|| j\| _}|S r+   rA   r9   r	   r	   r   r      s    

z _ANSIX923UnpaddingContext.updatec                 C   s   t | j| jtj}d | _|S r+   )r)   r7   r   r   Z#Cryptography_check_ansix923_paddingr?   r	   r	   r   r      s    z"_ANSIX923UnpaddingContext.finalizeNrB   r	   r	   r	   r   rE      s   rE   )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/   r1   rC   rD   rE   r	   r	   r	   r   <module>   s,   
