o
    Þý°j08  ã                   @   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r¡d!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%   ú§/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/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   àkõxíÂujaj\~|ObjZ®s”	ÛoP,�E¯$¸ l   _+yŽBb$:6gÁw[ˆ8câph[DS7èO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 ý