o
    eW                     @   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	   </usr/lib/python3/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   test_vectorr   	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.   	


rC   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   r0   c                   @   s   e Zd ZdS )z0load_test_vectors_wycheproof.<locals>.TestVectorN)r   r   r   r	   r	   r	   r
   r      s    r   
testGroupsteststcIdcomment)keyivaadmsgcttaglabelikmsaltinfookmsigresultinvalid
acceptable)r2   r   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   jsonloadr=   r>   r?   r   itemsr    idrG   r   filenamevalidwarningr   )r"   r@   r   root_tag	group_tagunit_tagrT   rA   rB   r#   tv_treer   common_rootkvr   common_grouptesttvattrr	   r	   r
   load_test_vectors_wycheproof   s`   




ri   )r5   r   rW   r3   r!   r=   r   Cryptodome.Util.py3compatr   r9   r2   ImportErrorr.   rC   ri   r	   r	   r	   r
   <module>   s$   E!