관리-도구
편집 파일: hashes.cpython-39.opt-1.pyc
a �a � @ s2 d dl mZmZ d dlmZ G dd� dej�ZdS )� )�UnsupportedAlgorithm�_Reasons)�hashesc @ sl e Zd Zdejd�dd�Zeejd�dd��Zd d�dd �Ze dd �dd�Z e d�d d�Ze d�dd�ZdS )�_HashContextN)� algorithmc C s� || _ || _|d u r�| jj�� }| jj�|| jjj�}| j�|�}|| jjjkrdt d� |j�tj ��| jj�||| jjj�}| j�|dk� || _d S )Nz+{} is not a supported hash on this backend.r )� _algorithm�_backend�_lib�EVP_MD_CTX_new�_ffi�gc�EVP_MD_CTX_freeZ_evp_md_from_algorithmZNULLr �format�namer ZUNSUPPORTED_HASHZEVP_DigestInit_ex�openssl_assert�_ctx)�selfZbackendr �ctxZevp_md�res� r �Q/usr/lib64/python3.9/site-packages/cryptography/hazmat/backends/openssl/hashes.py�__init__ s( ����z_HashContext.__init__)�returnc C s | j S )N)r )r r r r r $ s z_HashContext.algorithmc C sV | j j�� }| j j�|| j jj�}| j j�|| j�}| j �|dk� t | j | j |d�S )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.copy)�datar c C s: | j j�|�}| j j�| j|t|��}| j �|dk� d S )Nr )r r Zfrom_bufferr ZEVP_DigestUpdater �lenr )r r Zdata_ptrr r r r �update1 s �z_HashContext.updatec C s� t | jtj�r| �� S | jj�d| jjj �}| jj�d�}| jj� | j||�}| j�|dk� | j�|d | jj k� | jj�|�d |d � S d S )N�unsigned char[]zunsigned int *r )� isinstancer r ZExtendableOutputFunction� _finalize_xofr r �newr ZEVP_MAX_MD_SIZEZEVP_DigestFinal_exr r �digest_size�buffer)r �bufZoutlenr r r r �finalize8 s ��z_HashContext.finalizec C sV | j j�d| jj�}| j j�| j|| jj�}| j �|dk� | j j� |�d | jj� S )Nr r ) r r r r r! r ZEVP_DigestFinalXOFr r r"