o
    Þý°jà0  ã                   @   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_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   Ú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 ý