o
    ̳i08                     @   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%   h/home/ubuntu/.local/lib/python3.10/site-packages/Cryptodome/SelfTest/PublicKey/test_import_Curve25519.py	load_file4   s.   


r'   c                 C   s&   d | }tt|ddddS )N      :)r   r   r   replace)linesextr%   r%   r&   compactN   s   
r/   c                  C   s6   t d } t| dd }tjd|d}|| fS )Nzecc_x25519.txt      
Curve25519)curveseed)r'   
splitlinesr/   r
   	construct
public_key)	key_linesr4   keyr%   r%   r&   create_ref_keys_x25519S   s   r:   c                   C   s   t  djS )Ns   SEED)r	   newupdater   r%   r%   r%   r&   get_fixed_prngZ   s   r=   c                 C   s*   t  }||  t }||d  |jS )N   )r   decoder   value)dataseqbsr%   r%   r&   extract_bitstring_from_spki^   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_emptyh   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_mismatchk   s   zTestImport.test_mismatchN)__name__
__module____qualname__rK   rO   r%   r%   r%   r&   rE   f   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_Curve25519c                    (   t t| j|i | t \| _| _d S N)superrT   __init__r:   ref_private
ref_publicrJ   argskwargs	__class__r%   r&   rX   t      zTestImport_Curve25519.__init__c                 C   sV   t d}t|}| | j| t|d }| | j| t|}| | j| d S )Necc_x25519_public.der)r'   r
   _import_subjectPublicKeyInfoassertEqualrZ   _import_derrH   rJ   key_filer9   r%   r%   r&   test_import_public_derx   s   

z,TestImport_Curve25519.test_import_public_derc                 C   >   t d}t|d }| | j| t|}| | j| d S )Necc_x25519_private.derr'   r
   rd   rc   rY   rH   re   r%   r%   r&   test_import_pkcs8_der   
   
z+TestImport_Curve25519.test_import_pkcs8_derc                 C   @   t d}t|d}| | j| t|d}| | j| d S )Nzecc_x25519_private_p8.dersecretrj   re   r%   r%   r&   %test_import_private_pkcs8_encrypted_1   
   z;TestImport_Curve25519.test_import_private_pkcs8_encrypted_1c                 C   s&   t d}t|d}| | j| d S )Nzecc_x25519_private_p8.pemrn   r'   r
   rH   rc   rY   re   r%   r%   r&   %test_import_private_pkcs8_encrypted_2   s   z;TestImport_Curve25519.test_import_private_pkcs8_encrypted_2c                 C   rm   )Nzecc_x25519_private_p8_2.derrn   rj   re   r%   r%   r&   %test_import_private_pkcs8_encrypted_3   rp   z;TestImport_Curve25519.test_import_private_pkcs8_encrypted_3c                 C   rh   )Nzecc_x25519_x509.der)r'   r
   rd   rc   rZ   rH   re   r%   r%   r&   test_import_x509_der   rl   z*TestImport_Curve25519.test_import_x509_derc                 C   $   t d}t|}| | j| d S )Necc_x25519_public.pemr'   r
   rH   rc   rZ   re   r%   r%   r&   test_import_public_pem      
z,TestImport_Curve25519.test_import_public_pemc                 C   ru   )Necc_x25519_private.pemrq   re   r%   r%   r&   test_import_private_pem   ry   z-TestImport_Curve25519.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_x25519_private_enc_%s.pemrn      secret)r'   r
   rH   rc   rY   r   )rJ   algorf   r9   r%   r%   r&   !test_import_private_pem_encrypted   s   z7TestImport_Curve25519.test_import_private_pem_encryptedc                 C   ru   )Nzecc_x25519_x509.pemrw   re   r%   r%   r&   test_import_x509_pem   ry   z*TestImport_Curve25519.test_import_x509_pem)rP   rQ   rR   rX   rg   rk   ro   rr   rs   rt   rx   r{   r   r   __classcell__r%   r%   r^   r&   rT   r   s    				
rT   c                       rS   )TestExport_Curve25519c                    rU   rV   )rW   r   rX   r:   rY   rZ   r[   r^   r%   r&   rX      r`   zTestExport_Curve25519.__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_Curve25519.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   

z5TestExport_Curve25519.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&   z9TestExport_Curve25519.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_Curve25519.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   z3TestExport_Curve25519.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   z7TestExport_Curve25519.test_export_private_pem_encryptedc                 C   s2   | j jdd}| t|d | |td d S )Nrawr       s@   ff7561ef60c9c8a757f6d6372ec14142c9be208d0e719136d8d3c715dfcf7e15)rZ   r   rc   lenr   )rJ   r   r%   r%   r&   test_export_raw  s   z%TestExport_Curve25519.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_Curve25519.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   z4TestExport_Curve25519.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_params19  s.   
z(TestExport_Curve25519.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_Curve25519_Weakc                 C   s   dd d }dddd|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         r   r>   l   kxujaj\~|ObjZs	oP,E$ l   _+yBb$:6gw[8cph[DS7OW
curve25519)pointr3   r   r   )r
   	EccXPointEccKeyr   rF   rG   rH   )rJ   pweak_xxlow_order_pointweak_keyr   r%   r%   r&   test_weak_pemX  s.   

z(TestImport_Curve25519_Weak.test_weak_pemN)rP   rQ   rR   r   r%   r%   r%   r&   r   V  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_testsr  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   Cryptodome.SelfTest.st_commonr   Cryptodome.Util.py3compatr   r   Cryptodome.Util.asn1r   r   Cryptodome.Hashr	   Cryptodome.PublicKeyr
   r   r   ImportErrorr'   r/   r:   r=   rD   TestCaserE   rT   r   r   r   rP   r   mainr%   r%   r%   r&   <module>   s@   
Y 