3 l_o @ s d dl mZmZmZ d dlZd dlZd dlmZ d dlm Z d dl mZ ejej G dd deZdd Zd d Zdd Zdd Zdd ZG dd deZejeG dd deZejeG dd deZG dd deZejeG dd deZejeG dd deZdS ) )absolute_importdivisionprint_functionN)utils)AlreadyFinalized)libc @ s( e Zd Zejdd Zejdd ZdS )PaddingContextc C s dS )zR Pads the provided bytes and returns any available data as bytes. N )selfdatar r /usr/lib64/python3.6/padding.pyupdate s zPaddingContext.updatec C s dS )z6 Finalize the padding, returns bytes. Nr )r r r r finalize s zPaddingContext.finalizeN)__name__ __module____qualname__abcabstractmethodr r r r r r r s r c C s8 d| kodkn s t d| d dkr4t dd 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 sh | d krt dtjd| | t|7 } t| |d }| d ||d }| ||d d } | |fS )NzContext was already finalized.r r )r r _check_byteslikebyteslen)buffer_r r finished_blocksresultr r r _byte_padding_update' s r c C s, | d krt d|d t| }| || S )NzContext was already finalized.r )r r )r r Z paddingfnpad_sizer r r _byte_padding_pad7 s r c C sr | d krt dtjd| | t|7 } tt| |d d d}| d ||d }| ||d d } | |fS )NzContext was already finalized.r r r )r r r r maxr )r r r r r r r r _byte_unpadding_update? s r# c C s\ | d krt dt| |d kr(td|| |d }|sBtdtj| d}| d | S )NzContext was already finalized.r zInvalid padding bytes.r! )r r r sixZ indexbytes)r r ZcheckfnZvalidr r r r _byte_unpadding_checkO s r&