3 y_a @ s\ d dl mZmZmZ d dlmZ d dlmZmZ d dl m Z eje jG dd de ZdS ) )absolute_importdivisionprint_function)utils)UnsupportedAlgorithm_Reasons)hashesc @ s@ e Zd Zd ddZejdZdd Zdd Zd d Z dd Z dS )_HashContextNc C s || _ || _|d kr| jjj }| jjj|| jjj}| jj|}|| jjjkrdt dj |jtj | jjj||| jjj}| jj|dk || _d S )Nz+{} is not a supported hash on this backend.r ) _algorithm_backend_libCryptography_EVP_MD_CTX_new_ffigcCryptography_EVP_MD_CTX_freeZ_evp_md_from_algorithmZNULLr formatnamer ZUNSUPPORTED_HASHZEVP_DigestInit_exopenssl_assert_ctx)selfZbackend algorithmctxZevp_mdres r /usr/lib64/python3.6/hashes.py__init__ s z_HashContext.__init__r c C sV | j jj }| j jj|| j jj}| j jj|| j}| j j|dk t | j | j |dS )Nr )r )r r r r r r ZEVP_MD_CTX_copy_exr r r r )r Z copied_ctxr r r r copy* s z_HashContext.copyc C s: | j jj|}| j jj| j|t|}| j j|dk d S )Nr )r r Zfrom_bufferr ZEVP_DigestUpdater lenr )r dataZdata_ptrr r r r update3 s z_HashContext.updatec C s t | jtjr| j S | jjjd| jjj }| jjjd}| jjj | j||}| jj|dk | jj|d | jj k | jjj|d |d S d S )Nzunsigned char[]zunsigned int *r ) isinstancer r ZExtendableOutputFunction _finalize_xofr r newr ZEVP_MAX_MD_SIZEZEVP_DigestFinal_exr r digest_sizebuffer)r bufZoutlenr r r r finalize: s z_HashContext.finalizec C sV | j jjd| jj}| j jj| j|| jj}| j j|dk | j jj |d | jj S )Nzunsigned char[]r ) r r r" r r# r ZEVP_DigestFinalXOFr r r$ )r r% r r r r r! J s z_HashContext._finalize_xof)N)__name__ __module____qualname__r r Zread_only_propertyr r r r&