3 l�_o�@sddlmZmZmZddlZddlZddlmZddlm Z ddl m Z ej ej �Gdd�de��Zdd �Zd d �Zd d �Zdd�Zdd�ZGdd�de�Zeje�Gdd�de��Zeje�Gdd�de��ZGdd�de�Zeje�Gdd�de��Zeje�Gdd�de��ZdS)�)�absolute_import�division�print_functionN)�utils)�AlreadyFinalized)�libc@s(eZdZejdd��Zejdd��ZdS)�PaddingContextcCsdS)zR Pads the provided bytes and returns any available data as bytes. N�)�self�datar r �/usr/lib64/python3.6/padding.py�updateszPaddingContext.updatecCsdS)z6 Finalize the padding, returns bytes. Nr )r r r r �finalizeszPaddingContext.finalizeN)�__name__� __module__� __qualname__�abc�abstractmethodr rr r r r rsrcCs8d|kodkns td��|ddkr4td��dS)Nri�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_checks rcCsh|dkrtd��tjd|�|t|�7}t|�|d}|d||d�}|||dd�}||fS)NzContext was already finalized.r r)rr�_check_byteslike�bytes�len)�buffer_r r�finished_blocks�resultr r r �_byte_padding_update's  rcCs,|dkrtd��|dt|�}|||�S)NzContext was already finalized.r)rr)rrZ paddingfn�pad_sizer r r �_byte_padding_pad7sr cCsr|dkrtd��tjd|�|t|�7}tt|�|ddd�}|d||d�}|||dd�}||fS)NzContext was already finalized.r r�r)rrrr�maxr)rr rrrr r r �_byte_unpadding_update?s  r#cCs\|dkrtd��t|�|dkr(td��|||d�}|sBtd��tj|d�}|d| �S)NzContext was already finalized.rzInvalid padding bytes.r!�����)rrr�sixZ indexbytes)rrZcheckfnZvalidrr r r �_byte_unpadding_checkOs r&c@s$eZdZdd�Zdd�Zdd�ZdS)�PKCS7cCst|�||_dS)N)rr)r rr r r �__init__`szPKCS7.__init__cCs t|j�S)N)�_PKCS7PaddingContextr)r r r r �padderdsz PKCS7.paddercCs t|j�S)N)�_PKCS7UnpaddingContextr)r r r r �unpaddergszPKCS7.unpadderN)rrrr(r*r,r r r r r'_sr'c@s,eZdZdd�Zdd�Zdd�Zdd�Zd S) r)cCs||_d|_dS)N�)r�_buffer)r rr r r r(msz_PKCS7PaddingContext.__init__cCst|j||j�\|_}|S)N)rr.r)r r rr r r r rsz_PKCS7PaddingContext.updatecCstj|�|S)N)r%�int2byte)r �sizer r r �_paddingxsz_PKCS7PaddingContext._paddingcCst|j|j|j�}d|_|S)N)r r.rr1)r rr r r r{sz_PKCS7PaddingContext.finalizeN)rrrr(r r1rr r r r r)ksr)c@s$eZdZdd�Zdd�Zdd�ZdS)r+cCs||_d|_dS)Nr-)rr.)r rr r r r(�sz_PKCS7UnpaddingContext.__init__cCst|j||j�\|_}|S)N)r#r.r)r r rr r r r �sz_PKCS7UnpaddingContext.updatecCst|j|jtj�}d|_|S)N)r&r.rrZ Cryptography_check_pkcs7_padding)r rr r r r�sz_PKCS7UnpaddingContext.finalizeN)rrrr(r rr r r r r+�sr+c@s$eZdZdd�Zdd�Zdd�ZdS)�ANSIX923cCst|�||_dS)N)rr)r rr r r r(�szANSIX923.__init__cCs t|j�S)N)�_ANSIX923PaddingContextr)r r r r r*�szANSIX923.paddercCs t|j�S)N)�_ANSIX923UnpaddingContextr)r r r r r,�szANSIX923.unpadderN)rrrr(r*r,r r r r r2�sr2c@s,eZdZdd�Zdd�Zdd�Zdd�Zd S) r3cCs||_d|_dS)Nr-)rr.)r rr r r r(�sz _ANSIX923PaddingContext.__init__cCst|j||j�\|_}|S)N)rr.r)r r rr r r r �sz_ANSIX923PaddingContext.updatecCstjd�|dtj|�S)Nrr!)r%r/)r r0r r r r1�sz _ANSIX923PaddingContext._paddingcCst|j|j|j�}d|_|S)N)r r.rr1)r rr r r r�sz _ANSIX923PaddingContext.finalizeN)rrrr(r r1rr r r r r3�sr3c@s$eZdZdd�Zdd�Zdd�ZdS)r4cCs||_d|_dS)Nr-)rr.)r rr r r r(�sz"_ANSIX923UnpaddingContext.__init__cCst|j||j�\|_}|S)N)r#r.r)r r rr r r r �sz _ANSIX923UnpaddingContext.updatecCst|j|jtj�}d|_|S)N)r&r.rrZ#Cryptography_check_ansix923_padding)r rr r r r�s z"_ANSIX923UnpaddingContext.finalizeN)rrrr(r rr r r r r4�sr4)Z __future__rrrrr%Z cryptographyrZcryptography.exceptionsrZ%cryptography.hazmat.bindings._paddingrZ add_metaclass�ABCMeta�objectrrrr r#r&r'Zregister_interfacer)r+r2r3r4r r r r �s,