o
    n~bW                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ zd dl	Z	dZ
W n ey7   dZ
Y nw dd Zdd	 Zi i i fd
dZdS )    N)	unhexlify)FileNotFoundErrorTFc                 C   s^  d}g }G dd dt }d}d}d}		 |d7 }| }
|
s)|dur&|| 	 |S |
 }
|
ds4|
s7d}	q|
drM|durE|| d}||
 q|	rg|d7 }d	}	|dur^|| |d
||f |}td|
}|sx| j|
g7  _n6|d	 }|d	 }|
|d}|du rt|d dkrd| }t||t| nt|||| q)zLoad and parse a test vector file

    Return a list of objects, one per group of adjacent
    KV lines or for a single line in the form "[.*]".

    For a group of lines, the object has one attribute per line.
    r   c                   @   s   e Zd Zdd ZdS )z_load_tests.<locals>.TestVectorc                 S   s   || _ || _g | _d S )N)desccountothers)selfdescriptionr    r	   E/usr/local/lib/python3.10/dist-packages/Cryptodome/SelfTest/loader.py__init__=   s   
z(_load_tests.<locals>.TestVector.__init__N)__name__
__module____qualname__r   r	   r	   r	   r
   
TestVector<   s    r   NT   #[Fz%s (#%d)z([A-Za-z0-9]+) = ?(.*)   0)objectreadlineappendstrip
startswithrematchr   grouplowergetlensetattrbinasciir   )	dir_compsfile_inr   conversionsline_numberresultsr   Ztest_vectorr   Z	new_grouplinerestokendata
conversionr	   r	   r
   _load_tests0   sT   	
&



r,   c                 C   s   d}zIt sttjttj|d||f }tjtj	}tj
tjj
|g| R  |}t|}t| |||}W d   W |S 1 sDw   Y  W |S  ty_   tjd| tdd Y |S w )zLoad and parse a test vector file

    This function returns a list of objects, one per group of adjacent
    KV lines or for a single line in the form "[.*]".

    For a group of lines, the object has one attribute per line.
    Nz%s test (%s)%Warning: skipping extended tests for r   
stacklevel)test_vectors_availabler   errnoENOENTosstrerrorpathdirnamepycryptodome_test_vectors__file__joinopenr,   warningswarnUserWarning)r"   	file_namer   r$   r&   init_dirfull_file_namer#   r	   r	   r
   load_test_vectorsu   s.   	


rA   c              	   C   s  g }z>t sttjttj|tjtj	}tj
tjj
|g| R  |}t|}	t|	}
W d    n1 s:w   Y  W n tyU   tjd| tdd | Y S w G dd dt}i }| D ]
\}}||
||< qd|
d D ]}i }| D ]
\}}||||< q{|d D ]g}| }| D ]
\}}t||| q| D ]
\}}t||| q|d |_|d	 |_d
D ]}||v rt||t||  q||_| D ]\}}t|||| q|d dk|_|d dk|_|| qqs|S )Nr-   r   r.   c                   @   s   e Zd ZdS )z0load_test_vectors_wycheproof.<locals>.TestVectorN)r   r   r   r	   r	   r	   r
   r      s    r   Z
testGroupstestsZtcIdcomment)keyZivZaadmsgcttaglabelZikmsaltinfoZokmsigresultinvalidZ
acceptable)r0   r   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   jsonloadr;   r<   r=   r   itemsr    idrC   r   filenamevalidwarningr   )r"   r>   r   Zroot_tagZ	group_tagZunit_tagrL   r?   r@   r#   Ztv_treer   Zcommon_rootkvr   Zcommon_grouptesttvattrr	   r	   r
   load_test_vectors_wycheproof   s`   




rZ   )r3   r   rN   r1   r!   r;   r   ZCryptodome.Util.py3compatr   r7   r0   ImportErrorr,   rA   rZ   r	   r	   r	   r
   <module>   s$   E!