a
    "Rhs                     @   sJ   d dl Z d dlZd dlZzd dlZW n ey:   dZY n0 dddZdS )    NTc                    s    fdd  S )a  Decorator raising SkipTest if a hashing algorithm is not available

    The hashing algorithm could be missing or blocked by a strict crypto
    policy.

    If 'openssl' is True, then the decorator checks that OpenSSL provides
    the algorithm. Otherwise the check falls back to built-in
    implementations. The usedforsecurity flag is passed to the constructor.

    ValueError: [digital envelope routines: EVP_DigestInit_ex] disabled for FIPS
    ValueError: unsupported hash type md4
    c                    s|   t  tr\ jd}|d u r@ fdd} jd |_ j|_n|j}t|}| _ S t	
  fdd}|S )N
setUpClassc                    s   t  |   d S )N)superr   )clsfunc_or_class C/opt/python-3.9.24/usr/lib/python3.9/test/support/hashlib_helper.pyr      s    z:requires_hashdigest.<locals>.decorator.<locals>.setUpClassz.setUpClassc                     sb   z.rt d urt j d ntj d W n$ tyR   td  dY n0 | i |S )N)usedforsecurityzhash digest 'z' is not available.)_hashlibnewhashlib
ValueErrorunittestZSkipTest)argskwargs)
digestnamer   opensslr	   r   r   wrapper&   s    

z7requires_hashdigest.<locals>.decorator.<locals>.wrapper)
isinstancetype__dict__get__qualname__
__module____func__classmethodr   	functoolswraps)r   r   r   	decoratorr   r   r	   r   r   r      s    

z&requires_hashdigest.<locals>.decoratorr   )r   r   r	   r   r   r   requires_hashdigest   s    r    )NT)r   r   r   r
   ImportErrorr    r   r   r   r   <module>   s   
