o
    fs                     @   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w 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 2/usr/lib/python3.10/test/support/hashlib_helper.pyr      s   z:requires_hashdigest.<locals>.decorator.<locals>.setUpClassz.setUpClassc                     s^   zrt d urt j d ntj d W n ty'   td  dw | i |S )N)usedforsecurityzhash digest 'z' is not available.)_hashlibnewhashlib
ValueErrorunittest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    