o
    i0                     @   sF  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 d dlmZ d dl	m
Z
mZ d dlmZmZ d dlmZ d dlmZ zd dlZd	ZW n eyQ   d
ZY nw d%ddZdd Zdd Zdd Zdd ZG dd dejZG dd dejZG dd dejZG dd dejZi fddZ e!d krd!d" Z"ej#d#d$ dS dS )&    N)	unhexlify)SkipTest)list_test_cases)tostrFileNotFoundError)DerSequenceDerBitString)SHAKE128)ECCTFrbc                 C   s   d }z@t sttjttj| d}tjtj	}tj
tjj
|g|R  | }t||}| }W d    n1 s<w   Y  W n tyS   tjdtdd Y nw |d u r^td|  |S )N)	PublicKeyr
   z(Warning: skipping extended tests for ECC   )
stacklevelz
Missing %s)test_vectors_availabler   errnoENOENTosstrerrorpathdirnamepycryptodome_test_vectors__file__joinopenreadwarningswarnUserWarningr   )	file_namemoderesults	dir_compsinit_dirfull_file_namefile_in r%   b/home/ubuntu/.local/lib/python3.10/site-packages/Crypto/SelfTest/PublicKey/test_import_Curve448.py	load_file   s.   


r'   c                 C   s&   d | }tt|ddddS )N      :)r   r   r   replace)linesextr%   r%   r&   compact3   s   
r/   c                  C   s6   t d } t| dd }tjd|d}|| fS )Nzecc_x448.txt   
   Curve448)curveseed)r'   
splitlinesr/   r
   	construct
public_key)	key_linesr4   keyr%   r%   r&   create_ref_keys_x4488   s   r:   c                   C   s   t  djS )Ns   SEED)r	   newupdater   r%   r%   r%   r&   get_fixed_prng?   s   r=   c                 C   s*   t  }||  t }||d  |jS )N   )r   decoder   value)dataseqbsr%   r%   r&   extract_bitstring_from_spkiC   s
   
rD   c                   @   s   e Zd Zdd Zdd ZdS )
TestImportc                 C   s   |  ttjd d S )Nr(   )assertRaises
ValueErrorr
   
import_keyselfr%   r%   r&   
test_emptyM   s   zTestImport.test_emptyc                 C   s    d}t |}| ttj| d S )N`302e020100300506032b656f042204207009906b64ec727d5cb5c23007bf0425b3fd79014c6cd62ca3dddfcf0f278f79)r   rF   rG   r
   rH   )rJ   mismatch_hexmismatchr%   r%   r&   test_mismatchP   s   zTestImport.test_mismatchN)__name__
__module____qualname__rK   rO   r%   r%   r%   r&   rE   K   s    rE   c                       l   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Z  ZS )TestImport_Curve448c                    (   t t| j|i | t \| _| _d S N)superrT   __init__r:   ref_private
ref_publicrJ   argskwargs	__class__r%   r&   rX   Y      zTestImport_Curve448.__init__c                 C   sV   t d}t|}| | j| t|d }| | j| t|}| | j| d S )Necc_x448_public.der)r'   r
   _import_subjectPublicKeyInfoassertEqualrZ   _import_derrH   rJ   key_filer9   r%   r%   r&   test_import_public_der]   s   

z*TestImport_Curve448.test_import_public_derc                 C   >   t d}t|d }| | j| t|}| | j| d S )Necc_x448_private.derr'   r
   rd   rc   rY   rH   re   r%   r%   r&   test_import_pkcs8_deri   
   
z)TestImport_Curve448.test_import_pkcs8_derc                 C   @   t d}t|d}| | j| t|d}| | j| d S )Nzecc_x448_private_p8.dersecretrj   re   r%   r%   r&   %test_import_private_pkcs8_encrypted_1r   
   z9TestImport_Curve448.test_import_private_pkcs8_encrypted_1c                 C   s&   t d}t|d}| | j| d S )Nzecc_x448_private_p8.pemrn   r'   r
   rH   rc   rY   re   r%   r%   r&   %test_import_private_pkcs8_encrypted_2{   s   z9TestImport_Curve448.test_import_private_pkcs8_encrypted_2c                 C   rm   )Nzecc_x448_private_p8_2.derrn   rj   re   r%   r%   r&   %test_import_private_pkcs8_encrypted_3   rp   z9TestImport_Curve448.test_import_private_pkcs8_encrypted_3c                 C   rh   )Nzecc_x448_x509.der)r'   r
   rd   rc   rZ   rH   re   r%   r%   r&   test_import_x509_der   rl   z(TestImport_Curve448.test_import_x509_derc                 C   $   t d}t|}| | j| d S )Necc_x448_public.pemr'   r
   rH   rc   rZ   re   r%   r%   r&   test_import_public_pem      
z*TestImport_Curve448.test_import_public_pemc                 C   ru   )Necc_x448_private.pemrq   re   r%   r%   r&   test_import_private_pem   ry   z+TestImport_Curve448.test_import_private_pemc                 C   sR   dD ]$}t d| }t|d}| | j| tt|d}| | j| qd S )N)des3aes128aes192aes256zecc_x448_private_enc_%s.pemrn      secret)r'   r
   rH   rc   rY   r   )rJ   algorf   r9   r%   r%   r&   !test_import_private_pem_encrypted   s   z5TestImport_Curve448.test_import_private_pem_encryptedc                 C   ru   )Nzecc_x448_x509.pemrw   re   r%   r%   r&   test_import_x509_pem   ry   z(TestImport_Curve448.test_import_x509_pem)rP   rQ   rR   rX   rg   rk   ro   rr   rs   rt   rx   r{   r   r   __classcell__r%   r%   r^   r&   rT   W   s    				
rT   c                       rS   )TestExport_Curve448c                    rU   rV   )rW   r   rX   r:   rY   rZ   r[   r^   r%   r&   rX      r`   zTestExport_Curve448.__init__c                 C   sZ   t d}| jd}| || | jjdd}| || | jjddd}| || d S )Nra   TDERformatF)r   compress)r'   rZ   _export_subjectPublicKeyInforc   
export_keyrJ   rf   encodedr%   r%   r&   test_export_public_der   s   z*TestExport_Curve448.test_export_public_derc                 C   sR   t d}| j }| || | jjdd}| || | jt| jjddd d S )Nri   r   r   F)r   	use_pkcs8)r'   rY   _export_pkcs8rc   r   rF   rG   r   r%   r%   r&   test_export_private_pkcs8_clear   s   

z3TestExport_Curve448.test_export_private_pkcs8_clearc                 C   s   | j jddd}| ttj|d  t|d}| | j | | j jdddd}t|d}| | j | | j jdddddid	}t|d}| | j | d S )
Nrn    PBKDF2WithHMAC-SHA1AndAES128-CBC)
passphrase
protectionr   r   r   r   z"PBKDF2WithHMAC-SHA256AndAES128-CBCiteration_count{   )r   r   r   prot_params)	rY   r   rF   rG   r
   _import_pkcs8rc   r   rH   rJ   r   decodedr%   r%   r&   #test_export_private_pkcs8_encrypted   s&   z7TestExport_Curve448.test_export_private_pkcs8_encryptedc                 C   0   t dd }| jjdd }| || d S )Nrv   rtPEMr   )r'   striprZ   r   rc   )rJ   key_file_refrf   r%   r%   r&   test_export_public_pem      z*TestExport_Curve448.test_export_public_pemc                 C   r   )Nrz   r   r   r   )r'   r   rY   r   rc   r   r%   r%   r&   test_export_private_pem_clear   r   z1TestExport_Curve448.test_export_private_pem_clearc                 C   sL   | j jdddd}| ttj| d|v sJ t|d}| | j | d S )Nr   r   r   r   zENCRYPTED PRIVATE KEYrn   )rY   r   rF   rG   r
   rH   rc   r   r%   r%   r&   !test_export_private_pem_encrypted   s   z5TestExport_Curve448.test_export_private_pem_encryptedc                 C   s2   | j jdd}| t|d | |td d S )Nrawr   8   sp   e2abae24ab8f65b01969e61f84fee615b525f413a90e3d727f71d0ffe60fb1d0a1a0285f2a7fd88789206e0aa4f3e9fcb9e4ba5d644e691e)rZ   r   rc   lenr   )rJ   r   r%   r%   r&   test_export_raw  s   z#TestExport_Curve448.test_export_rawc                 C   s<   | j jdddt d}| j jdddt d}| || d S )Nr   rn   r   r   r   r   randfuncrY   r   r=   rc   rJ   encoded1encoded2r%   r%   r&   	test_prng  s   zTestExport_Curve448.test_prngc                 C   s<   | j jdddt d}| j jdddt d}| || d S )Nr   rn   r   r   r   r   r   r%   r%   r&   test_byte_or_string_passphrase  s   z2TestExport_Curve448.test_byte_or_string_passphrasec                 C   st   | j t| jjdd | j t| jjddd | j t| jjdddd | j t| jjddd	d
 | j t| jjddd d S )NXXXr   r   rn   )r   r   r*   F)r   r   r   r   r   OpenSSH)rF   rG   rY   r   rI   r%   r%   r&   test_error_params1  s.   
z&TestExport_Curve448.test_error_params1)rP   rQ   rR   rX   r   r   r   r   r   r   r   r   r   r   r   r%   r%   r^   r&   r      s    r   c                   @   s   e Zd Zdd ZdS )TestImport_Curve448_Weakc                 C   sn   dd dd  d }dd|d ||d f}|D ]}t |d}t j|dd}|jdd	}| tt j| qd S )
Nr   i     r>   r   curve448)pointr3   r   r   )r
   	EccXPointEccKeyr   rF   rG   rH   )rJ   pweak_xxlow_order_pointweak_keyr   r%   r%   r&   test_weak_pem=  s    z&TestImport_Curve448_Weak.test_weak_pemN)rP   rQ   rR   r   r%   r%   r%   r&   r   ;  s    r   c                 C   sP   g }z|t t7 }|t t7 }|t t7 }|t t7 }W |S  ty'   Y |S w rV   )r   rE   rT   r   r   r   )configtestsr%   r%   r&   	get_testsP  s   r   __main__c                   C   s   t t S rV   )unittest	TestSuiter   r%   r%   r%   r&   suit]  s   r   suite)defaultTest)r   )$r   r   r   r   binasciir   r   Crypto.SelfTest.st_commonr   Crypto.Util.py3compatr   r   Crypto.Util.asn1r   r   Crypto.Hashr	   Crypto.PublicKeyr
   r   r   ImportErrorr'   r/   r:   r=   rD   TestCaserE   rT   r   r   r   rP   r   mainr%   r%   r%   r&   <module>   s@   
Y 