o
    Þý°jwª ã                   @   s^  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	m
Z
mZ d dlmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ zd dlZd
ZW n eyY   dZY nw G dd„ deƒZdJd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&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+G d-d.„ d.ej'ƒZ,G d/d0„ d0ej'ƒZ-G d1d2„ d2ej'ƒZ.G d3d4„ d4ej'ƒZ/G d5d6„ d6ej'ƒZ0G d7d8„ d8ej'ƒZ1G d9d:„ d:ej'ƒZ2G d;d<„ d<ej'ƒZ3G d=d>„ d>ej'ƒZ4G d?d@„ d@ej'ƒZ5G dAdB„ dBej'ƒZ6i fdCdD„Z7e8dEk�r-dFdG„ Z9ej:dHdI� dS dS )Ké    N)Ú	unhexlify)Úlist_test_cases)ÚbordÚtostrÚFileNotFoundError)ÚDerSequenceÚDerBitString)Úbytes_to_long)ÚSHAKE128)ÚECC)Ú_import_rfc5915_derTFc                   @   s   e Zd ZdS )ÚMissingTestVectorExceptionN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/Cryptodome/SelfTest/PublicKey/test_import_ECC.pyr   6   s    r   Ú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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_inr   r   r   Ú	load_file:   s.   
þ
ÿ€
þÿr-   c                 C   s&   d  | ¡}tt|ƒ dd¡ dd¡ƒS )Nó    ú Ú ú:)r    r   r   Úreplace)ÚlinesÚextr   r   r   ÚcompactT   s   
r5   c                  C   óŽ   d} t dƒ ¡ }tt|dd… ƒƒ}t|dd… ƒ}t|d ƒdks$J ‚t|d| d … ƒ}t|| d d … ƒ}tjd	|d
�tjd	||d�fS )Né   zecc_p192.txtr   é   é   é	   r   é   zP-192©ÚcurveÚd©r=   Úpoint_xÚpoint_y©r-   Ú
splitlinesr	   r5   r   r   Ú	construct©Úkey_lenÚ	key_linesÚprivate_key_dÚpublic_key_xyÚpublic_key_xÚpublic_key_yr   r   r   Úcreate_ref_keys_p192Y   ó   ÿrL   c                  C   r6   )Né   zecc_p224.txtr   r8   r9   r:   r   r;   zP-224r<   r?   rB   rE   r   r   r   Úcreate_ref_keys_p224f   rM   rO   c                  C   óŽ   d} t dƒ ¡ }tt|dd… ƒƒ}t|dd… ƒ}t|d ƒdks$J ‚t|d	| d	 … ƒ}t|| d	 d … ƒ}tjd
|d�tjd
||d�fS )Né    zecc_p256.txtr   r9   é   é   r   r8   r;   zP-256r<   r?   rB   rE   r   r   r   Úcreate_ref_keys_p256s   rM   rT   c                  C   rP   )Né0   zecc_p384.txtr   rR   é   é   r   r8   r;   zP-384r<   r?   rB   rE   r   r   r   Úcreate_ref_keys_p384€   rM   rX   c                  C   rP   )NéB   zecc_p521.txtr   rV   é   é   r   r8   r;   zP-521r<   r?   rB   rE   r   r   r   Úcreate_ref_keys_p521�   rM   r\   c                  C   ó6   t dƒ ¡ } t| dd… ƒ}tjd|d�}|| ¡ fS )Nzecc_ed25519.txtr9   rZ   ÚEd25519©r=   Úseed©r-   rC   r5   r   rD   Ú
public_key©rG   r`   Úkeyr   r   r   Úcreate_ref_keys_ed25519š   ó   re   c                  C   r]   )Nzecc_ed448.txtrR   é
   ÚEd448r_   ra   rc   r   r   r   Úcreate_ref_keys_ed448¡   rf   ri   c                   C   s   t  ¡  d¡jS )Ns   SEED)r
   ÚnewÚupdater"   r   r   r   r   Úget_fixed_prng«   s   rl   c                 C   s*   t ƒ }| | ¡ tƒ }| |d ¡ |jS )Nr;   )r   Údecoder   Úvalue)ÚdataÚseqÚbsr   r   r   Úextract_bitstring_from_spki¯   s
   
rr   c                   @   s4   e Zd Zdd„ Zdd„ Zd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_empty¹   s   zTestImport.test_emptyc                 C   s   d}|   ttj|¡ d S )Na1  -----BEGIN PRIVATE KEY-----
MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJChZANiAAQarFRaqflo
I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng
o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXk=
-----END PRIVATE KEY-----rt   )ry   Úmismatchr   r   r   Útest_mismatch¼   s   zTestImport.test_mismatchc                 C   ó&   d}t t|ƒd dƒ}|  |jd¡ d S )NÚN302502010104205c4e4320ef260f91ed9fc597aee98c8236b60e0ced692cc7a057d5e45798a052ú1.2.840.10045.3.1.7ì   R 1/‘W¾zL%-;[6S»^,~ÙòAÉ;�!N\©r   r   ÚassertEqualr>   ©ry   Údata_hexrd   r   r   r   Ú test_import_private_rfc5915_noneÆ   ó   z+TestImport.test_import_private_rfc5915_nonec                 C   s$   d}t t|ƒd ƒ}|  |jd¡ d S )NÚf303102010104205c4e4320ef260f91ed9fc597aee98c8236b60e0ced692cc7a057d5e45798a052a00a06082a8648ce3d030107r€   r�   rƒ   r   r   r   Ú"test_import_private_rfc5915_only_0Ì   s   z-TestImport.test_import_private_rfc5915_only_0c                 C   r}   )NÚÚ306b02010104205c4e4320ef260f91ed9fc597aee98c8236b60e0ced692cc7a057d5e45798a052a14403420004a40ad59a2050ebe92479bd5fb16bb2e45b6465eb3cb2b1effe423fabe6cb7424db8219ef0bab80acf26fd70595b61fe4760d33eed80dd03d2fd0dfb27b8ce75cr   r€   r�   rƒ   r   r   r   Ú"test_import_private_rfc5915_only_1Ò   r†   z-TestImport.test_import_private_rfc5915_only_1N)r   r   r   rz   r|   r…   rˆ   rŠ   r   r   r   r   rs   ·   s    
rs   c                       ó„   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dd„ Zdd„ Zdd„ Z‡  ZS )ÚTestImport_P192c                    ó(   t t| ƒj|i |¤Ž tƒ \| _| _d S ©N)ÚsuperrŒ   Ú__init__rL   Úref_privateÚ
ref_public©ry   ÚargsÚkwargs©Ú	__class__r   r   r�   Ú   ó   zTestImport_P192.__init__c                 C   óV   t dƒ}t |¡}|  | j|¡ t |d ¡}|  | j|¡ t |¡}|  | j|¡ d S )Núecc_p192_public.der©r-   r   Ú_import_subjectPublicKeyInfor‚   r’   Ú_import_derrw   ©ry   Úkey_filerd   r   r   r   Útest_import_public_derÞ   ó   

z&TestImport_P192.test_import_public_derc                 C   ó0   t dƒ}t|ƒ}tj|dd�}|  | j|¡ d S )Nrš   ÚP192©Ú
curve_name©r-   rr   r   rw   r‚   r’   ©ry   rŸ   rn   rd   r   r   r   Útest_import_sec1_uncompressedê   ó   z-TestImport_P192.test_import_sec1_uncompressedc                 C   r¢   )Núecc_p192_public_compressed.derr£   r¤   r¦   r§   r   r   r   Útest_import_sec1_compressedð   r©   z+TestImport_P192.test_import_sec1_compressedc                 C   óX   t dƒ}t |d ¡}|  | j|¡ t |d ¡}|  | j|¡ t |¡}|  | j|¡ d S )Núecc_p192_private.der©r-   r   r   r‚   r‘   r�   rw   rž   r   r   r   Útest_import_rfc5915_derö   ó   
z'TestImport_P192.test_import_rfc5915_derc                 C   ó>   t dƒ}t |d ¡}|  | j|¡ t |¡}|  | j|¡ d S )Núecc_p192_private_p8_clear.der©r-   r   r�   r‚   r‘   rw   rž   r   r   r   Útest_import_private_pkcs8_clear  ó
   
z/TestImport_P192.test_import_private_pkcs8_clearc                 C   ó$   t dƒ}t |¡}|  | j|¡ d S )Núecc_p192_private_p8_clear.pem©r-   r   rw   r‚   r‘   rž   r   r   r   Ú&test_import_private_pkcs8_in_pem_clear  ó   
z6TestImport_P192.test_import_private_pkcs8_in_pem_clearc                 C   ó@   t dƒ}t |d¡}|  | j|¡ t |d¡}|  | j|¡ d S )Nzecc_p192_private_p8.derÚsecretr³   rž   r   r   r   Ú%test_import_private_pkcs8_encrypted_1  ó
   z5TestImport_P192.test_import_private_pkcs8_encrypted_1c                 C   ó&   t dƒ}t |d¡}|  | j|¡ d S )Nzecc_p192_private_p8.pemr¼   r¸   rž   r   r   r   Ú%test_import_private_pkcs8_encrypted_2  ó   z5TestImport_P192.test_import_private_pkcs8_encrypted_2c                 C   r±   )Nzecc_p192_x509.der©r-   r   r�   r‚   r’   rw   rž   r   r   r   Útest_import_x509_der   rµ   z$TestImport_P192.test_import_x509_derc                 C   r¶   )Núecc_p192_public.pem©r-   r   rw   r‚   r’   rž   r   r   r   Útest_import_public_pem)  rº   z&TestImport_P192.test_import_public_pemc                 C   r¶   )Núecc_p192_private.pemr¸   rž   r   r   r   Útest_import_private_pem/  rº   z'TestImport_P192.test_import_private_pemc                 C   óR   dD ]$}t d| ƒ}t |d¡}|  | j|¡ t t|ƒd¡}|  | j|¡ qd S )N©Údes3Úaes128Úaes192Úaes256Ú
aes256_gcmzecc_p192_private_enc_%s.pemr¼   ó   secret©r-   r   rw   r‚   r‘   r   ©ry   ÚalgorŸ   rd   r   r   r   Ú!test_import_private_pem_encrypted5  ó   ùz1TestImport_P192.test_import_private_pem_encryptedc                 C   r¶   )Nzecc_p192_x509.pemrÅ   rž   r   r   r   Útest_import_x509_pem?  rº   z$TestImport_P192.test_import_x509_pem)r   r   r   r�   r    r¨   r«   r¯   r´   r¹   r½   rÀ   rÃ   rÆ   rÈ   rÔ   rÖ   Ú__classcell__r   r   r–   r   rŒ   Ø   s    			
rŒ   c                       sŒ   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dd„ Zdd„ Zdd„ Zdd„ Z‡  ZS )ÚTestImport_P224c                    r�   rŽ   )r�   rØ   r�   rO   r‘   r’   r“   r–   r   r   r�   H  r˜   zTestImport_P224.__init__c                 C   r™   )Núecc_p224_public.derr›   rž   r   r   r   r    L  r¡   z&TestImport_P224.test_import_public_derc                 C   r¢   )NrÙ   ÚP224r¤   r¦   r§   r   r   r   r¨   X  r©   z-TestImport_P224.test_import_sec1_uncompressedc                 C   r¢   )Núecc_p224_public_compressed.derrÚ   r¤   r¦   r§   r   r   r   r«   ^  r©   z+TestImport_P224.test_import_sec1_compressedc                 C   r¬   )Núecc_p224_private.derr®   rž   r   r   r   r¯   d  r°   z'TestImport_P224.test_import_rfc5915_derc                 C   r±   )Núecc_p224_private_p8_clear.derr³   rž   r   r   r   r´   p  rµ   z/TestImport_P224.test_import_private_pkcs8_clearc                 C   r¶   )Núecc_p224_private_p8_clear.pemr¸   rž   r   r   r   r¹   y  rº   z6TestImport_P224.test_import_private_pkcs8_in_pem_clearc                 C   r»   )Nzecc_p224_private_p8.derr¼   r³   rž   r   r   r   r½     r¾   z5TestImport_P224.test_import_private_pkcs8_encrypted_1c                 C   r¿   )Nzecc_p224_private_p8.pemr¼   r¸   rž   r   r   r   rÀ   ˆ  rÁ   z5TestImport_P224.test_import_private_pkcs8_encrypted_2c                 C   r»   )Nzecc_p224_private_p8_2.derr¼   r³   rž   r   r   r   Ú%test_import_private_pkcs8_encrypted_3Ž  r¾   z5TestImport_P224.test_import_private_pkcs8_encrypted_3c                 C   r±   )Nzecc_p224_x509.derrÂ   rž   r   r   r   rÃ   —  rµ   z$TestImport_P224.test_import_x509_derc                 C   r¶   )Núecc_p224_public.pemrÅ   rž   r   r   r   rÆ      rº   z&TestImport_P224.test_import_public_pemc                 C   r¶   )Núecc_p224_private.pemr¸   rž   r   r   r   rÈ   ¦  rº   z'TestImport_P224.test_import_private_pemc                 C   rÉ   )NrÊ   zecc_p224_private_enc_%s.pemr¼   rÐ   rÑ   rÒ   r   r   r   rÔ   ¬  rÕ   z1TestImport_P224.test_import_private_pem_encryptedc                 C   r¶   )Nzecc_p224_x509.pemrÅ   rž   r   r   r   rÖ   ¶  rº   z$TestImport_P224.test_import_x509_pem)r   r   r   r�   r    r¨   r«   r¯   r´   r¹   r½   rÀ   rß   rÃ   rÆ   rÈ   rÔ   rÖ   r×   r   r   r–   r   rØ   F  s     				
rØ   c                       s¬   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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_P256c                    r�   rŽ   )r�   râ   r�   rT   r‘   r’   r“   r–   r   r   r�   ¿  r˜   zTestImport_P256.__init__c                 C   r™   )Núecc_p256_public.derr›   rž   r   r   r   r    Ã  r¡   z&TestImport_P256.test_import_public_derc                 C   r¢   )Nrã   ÚP256r¤   r¦   r§   r   r   r   r¨   Ï  r©   z-TestImport_P256.test_import_sec1_uncompressedc                 C   r¢   )Núecc_p256_public_compressed.derrä   r¤   r¦   r§   r   r   r   r«   Õ  r©   z+TestImport_P256.test_import_sec1_compressedc                 C   r¬   )Núecc_p256_private.derr®   rž   r   r   r   r¯   Û  r°   z'TestImport_P256.test_import_rfc5915_derc                 C   r±   )Núecc_p256_private_p8_clear.derr³   rž   r   r   r   r´   ç  rµ   z/TestImport_P256.test_import_private_pkcs8_clearc                 C   r¶   )Núecc_p256_private_p8_clear.pemr¸   rž   r   r   r   r¹   ð  rº   z6TestImport_P256.test_import_private_pkcs8_in_pem_clearc                 C   r»   )Nzecc_p256_private_p8.derr¼   r³   rž   r   r   r   r½   ö  r¾   z5TestImport_P256.test_import_private_pkcs8_encrypted_1c                 C   r¿   )Nzecc_p256_private_p8.pemr¼   r¸   rž   r   r   r   rÀ   ÿ  rÁ   z5TestImport_P256.test_import_private_pkcs8_encrypted_2c                 C   r»   )Nzecc_p256_private_p8_2.derr¼   r³   rž   r   r   r   rß     r¾   z5TestImport_P256.test_import_private_pkcs8_encrypted_3c                 C   r±   )Nzecc_p256_x509.derrÂ   rž   r   r   r   rÃ     rµ   z$TestImport_P256.test_import_x509_derc                 C   r¶   )Núecc_p256_public.pemrÅ   rž   r   r   r   rÆ     rº   z&TestImport_P256.test_import_public_pemc                 C   r¶   )Núecc_p256_private.pemr¸   rž   r   r   r   rÈ     rº   z'TestImport_P256.test_import_private_pemc                 C   ó   t dƒ}t |¡}d S )Nzecc_p256_private_ecparams.pem©r-   r   rw   rž   r   r   r   Ú%test_import_private_pem_with_ecparams#  ó   z5TestImport_P256.test_import_private_pem_with_ecparamsc                 C   rÉ   )NrÊ   zecc_p256_private_enc_%s.pemr¼   rÐ   rÑ   rÒ   r   r   r   rÔ   (  rÕ   z1TestImport_P256.test_import_private_pem_encryptedc                 C   r¶   )Nzecc_p256_x509.pemrÅ   rž   r   r   r   rÖ   2  rº   z$TestImport_P256.test_import_x509_pemc                 C   ó<   t dƒ}t |¡}|  | j|¡ t |¡}|  | j|¡ d S )Núecc_p256_public_openssh.txt©r-   r   Ú_import_openssh_publicr‚   r’   rw   rž   r   r   r   Útest_import_openssh_public8  ó
   

z*TestImport_P256.test_import_openssh_publicc                 C   ó4   t dƒ}t dƒ}t |¡}t |¡}|  ||¡ d S )Nzecc_p256_private_openssh.pemz ecc_p256_private_openssh_old.pem©r-   r   rw   r‚   ©ry   rŸ   Úkey_file_oldrd   Úkey_oldr   r   r   Ú!test_import_openssh_private_clearA  ó
   

z1TestImport_P256.test_import_openssh_private_clearc                 C   ó6   t dƒ}t dƒ}t |d¡}t |¡}|  ||¡ d S )Nz ecc_p256_private_openssh_pwd.pemz$ecc_p256_private_openssh_pwd_old.pemó   passwordrö   r÷   r   r   r   Ú$test_import_openssh_private_passwordI  ó
   
z4TestImport_P256.test_import_openssh_private_password)r   r   r   r�   r    r¨   r«   r¯   r´   r¹   r½   rÀ   rß   rÃ   rÆ   rÈ   rí   rÔ   rÖ   ró   rú   rþ   r×   r   r   r–   r   râ   ½  s(    				
	râ   c                       ó¤   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dd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Z‡  ZS )%ÚTestImport_P384c                    r�   rŽ   )r�   r  r�   rX   r‘   r’   r“   r–   r   r   r�   T  r˜   zTestImport_P384.__init__c                 C   r™   )Núecc_p384_public.derr›   rž   r   r   r   r    X  r¡   z&TestImport_P384.test_import_public_derc                 C   r¢   )Nr  ÚP384r¤   r¦   r§   r   r   r   r¨   d  r©   z-TestImport_P384.test_import_sec1_uncompressedc                 C   r¢   )Núecc_p384_public_compressed.derr  r¤   r¦   r§   r   r   r   r«   j  r©   z+TestImport_P384.test_import_sec1_compressedc                 C   r¬   )Núecc_p384_private.derr®   rž   r   r   r   r¯   p  r°   z'TestImport_P384.test_import_rfc5915_derc                 C   r±   )Núecc_p384_private_p8_clear.derr³   rž   r   r   r   r´   |  rµ   z/TestImport_P384.test_import_private_pkcs8_clearc                 C   r¶   )Núecc_p384_private_p8_clear.pemr¸   rž   r   r   r   r¹   …  rº   z6TestImport_P384.test_import_private_pkcs8_in_pem_clearc                 C   r»   )Nzecc_p384_private_p8.derr¼   r³   rž   r   r   r   r½   ‹  r¾   z5TestImport_P384.test_import_private_pkcs8_encrypted_1c                 C   r¿   )Nzecc_p384_private_p8.pemr¼   r¸   rž   r   r   r   rÀ   ”  rÁ   z5TestImport_P384.test_import_private_pkcs8_encrypted_2c                 C   r»   )Nzecc_p384_private_p8_2.derr¼   r³   rž   r   r   r   rß   š  r¾   z5TestImport_P384.test_import_private_pkcs8_encrypted_3c                 C   r±   )Nzecc_p384_x509.derrÂ   rž   r   r   r   rÃ   £  rµ   z$TestImport_P384.test_import_x509_derc                 C   r¶   )Núecc_p384_public.pemrÅ   rž   r   r   r   rÆ   ¬  rº   z&TestImport_P384.test_import_public_pemc                 C   r¶   )Núecc_p384_private.pemr¸   rž   r   r   r   rÈ   ²  rº   z'TestImport_P384.test_import_private_pemc                 C   rÉ   )NrÊ   zecc_p384_private_enc_%s.pemr¼   rÐ   rÑ   rÒ   r   r   r   rÔ   ¸  rÕ   z1TestImport_P384.test_import_private_pem_encryptedc                 C   r¶   )Nzecc_p384_x509.pemrÅ   rž   r   r   r   rÖ   Â  rº   z$TestImport_P384.test_import_x509_pemc                 C   rï   )Núecc_p384_public_openssh.txtrñ   rž   r   r   r   ró   È  rô   z*TestImport_P384.test_import_openssh_publicc                 C   rõ   )Nzecc_p384_private_openssh.pemz ecc_p384_private_openssh_old.pemrö   r÷   r   r   r   rú   Ñ  rû   z1TestImport_P384.test_import_openssh_private_clearc                 C   rü   )Nz ecc_p384_private_openssh_pwd.pemz$ecc_p384_private_openssh_pwd_old.pemrý   rö   r÷   r   r   r   rþ   Ù  rÿ   z4TestImport_P384.test_import_openssh_private_password©r   r   r   r�   r    r¨   r«   r¯   r´   r¹   r½   rÀ   rß   rÃ   rÆ   rÈ   rÔ   rÖ   ró   rú   rþ   r×   r   r   r–   r   r  R  ó&    				
	r  c                       r   )%ÚTestImport_P521c                    r�   rŽ   )r�   r  r�   r\   r‘   r’   r“   r–   r   r   r�   ä  r˜   zTestImport_P521.__init__c                 C   r™   )Núecc_p521_public.derr›   rž   r   r   r   r    è  r¡   z&TestImport_P521.test_import_public_derc                 C   r¢   )Nr  ÚP521r¤   r¦   r§   r   r   r   r¨   ô  r©   z-TestImport_P521.test_import_sec1_uncompressedc                 C   r¢   )Núecc_p521_public_compressed.derr  r¤   r¦   r§   r   r   r   r«   ú  r©   z+TestImport_P521.test_import_sec1_compressedc                 C   r¬   )Núecc_p521_private.derr®   rž   r   r   r   r¯      r°   z'TestImport_P521.test_import_rfc5915_derc                 C   r±   )Núecc_p521_private_p8_clear.derr³   rž   r   r   r   r´     rµ   z/TestImport_P521.test_import_private_pkcs8_clearc                 C   r¶   )Núecc_p521_private_p8_clear.pemr¸   rž   r   r   r   r¹     rº   z6TestImport_P521.test_import_private_pkcs8_in_pem_clearc                 C   r»   )Nzecc_p521_private_p8.derr¼   r³   rž   r   r   r   r½     r¾   z5TestImport_P521.test_import_private_pkcs8_encrypted_1c                 C   r¿   )Nzecc_p521_private_p8.pemr¼   r¸   rž   r   r   r   rÀ   $  rÁ   z5TestImport_P521.test_import_private_pkcs8_encrypted_2c                 C   r»   )Nzecc_p521_private_p8_2.derr¼   r³   rž   r   r   r   rß   *  r¾   z5TestImport_P521.test_import_private_pkcs8_encrypted_3c                 C   r±   )Nzecc_p521_x509.derrÂ   rž   r   r   r   rÃ   3  rµ   z$TestImport_P521.test_import_x509_derc                 C   r¶   )Núecc_p521_public.pemrÅ   rž   r   r   r   rÆ   <  rº   z&TestImport_P521.test_import_public_pemc                 C   r¶   )Núecc_p521_private.pemr¸   rž   r   r   r   rÈ   B  rº   z'TestImport_P521.test_import_private_pemc                 C   rÉ   )NrÊ   zecc_p521_private_enc_%s.pemr¼   rÐ   rÑ   rÒ   r   r   r   rÔ   H  rÕ   z1TestImport_P521.test_import_private_pem_encryptedc                 C   r¶   )Nzecc_p521_x509.pemrÅ   rž   r   r   r   rÖ   R  rº   z$TestImport_P521.test_import_x509_pemc                 C   rï   )Núecc_p521_public_openssh.txtrñ   rž   r   r   r   ró   X  rô   z*TestImport_P521.test_import_openssh_publicc                 C   rõ   )Nzecc_p521_private_openssh.pemz ecc_p521_private_openssh_old.pemrö   r÷   r   r   r   rú   a  rû   z1TestImport_P521.test_import_openssh_private_clearc                 C   rü   )Nz ecc_p521_private_openssh_pwd.pemz$ecc_p521_private_openssh_pwd_old.pemrý   rö   r÷   r   r   r   rþ   i  rÿ   z4TestImport_P521.test_import_openssh_private_passwordr  r   r   r–   r   r  â  r  r  c                       r   )%ÚTestExport_P192c                    r�   rŽ   )r�   r  r�   rL   r‘   r’   r“   r–   r   r   r�   t  r˜   zTestExport_P192.__init__c                 C   óZ   t dƒ}| j d¡}|  ||¡ | jjdd�}|  ||¡ | jjddd�}|  ||¡ d S )Nrš   FÚDER©Úformat©r  Úcompress©r-   r’   Ú_export_subjectPublicKeyInfor‚   Ú
export_key©ry   rŸ   Úencodedr   r   r   Ú#test_export_public_der_uncompressedx  ó   z3TestExport_P192.test_export_public_der_uncompressedc                 C   ó8   t dƒ}t |¡}|jddd�}t dƒ}|  ||¡ d S )Nrš   r  Tr  rª   ©r-   r   rw   r   r‚   ©ry   rŸ   Úpub_keyÚkey_file_compressedÚkey_file_compressed_refr   r   r   Ú!test_export_public_der_compressed„  ó
   
z1TestExport_P192.test_export_public_der_compressedc                 C   ó.   t dƒ}t|ƒ}| jjdd�}|  ||¡ d S )Nrš   ÚSEC1r  ©r-   rr   r’   r   r‚   ©ry   rŸ   rn   r"  r   r   r   Ú$test_export_public_sec1_uncompressedŒ  ó   z4TestExport_P192.test_export_public_sec1_uncompressedc                 C   ó8   t dƒ}| jjddd�}t dƒ}t|ƒ}|  ||¡ d S )Nrš   r.  Tr  rª   ©r-   r’   r   rr   r‚   ©ry   rŸ   r"  r*  rn   r   r   r   Ú"test_export_public_sec1_compressed“  ó
   z2TestExport_P192.test_export_public_sec1_compressedc                 C   ó>   t dƒ}| j ¡ }|  ||¡ | jjddd�}|  ||¡ d S )Nr­   r  F©r  Ú	use_pkcs8©r-   r‘   Ú_export_rfc5915_private_derr‚   r   r!  r   r   r   Útest_export_rfc5915_private_der›  ó
   
z/TestExport_P192.test_export_rfc5915_private_derc                 C   ó<   t dƒ}| j ¡ }|  ||¡ | jjdd�}|  ||¡ d S )Nr²   r  r  ©r-   r‘   Ú_export_pkcs8r‚   r   r!  r   r   r   Útest_export_private_pkcs8_clear¦  ó
   
z/TestExport_P192.test_export_private_pkcs8_clearc                 C   óž   | 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 )
Nr¼   ú PBKDF2WithHMAC-SHA1AndAES128-CBC©Ú
passphraseÚ
protectionr  ©r  rG  rH  z"PBKDF2WithHMAC-SHA224AndAES192-CBCÚiteration_counté{   ©r  rG  rH  Úprot_params©	r‘   rA  ru   rv   r   Ú_import_pkcs8r‚   r   rw   ©ry   r"  Údecodedr   r   r   Ú#test_export_private_pkcs8_encrypted±  ó&   ÿþýz3TestExport_P192.test_export_private_pkcs8_encryptedc                 C   ó`   t ddƒ ¡ }| j d¡}|  ||¡ | jjdd�}|  ||¡ | jjddd�}|  ||¡ d S )NrÄ   ÚrtFÚPEMr  r  ©r-   Ústripr‘   Ú_export_public_pemr‚   r’   r   r!  r   r   r   Ú#test_export_public_pem_uncompressedÌ  ó   z3TestExport_P192.test_export_public_pem_uncompressedc                 C   óD   t ddƒ ¡ }t |¡}|jddd�}t ddƒ ¡ }|  ||¡ d S )NrÄ   rU  rV  Tr  zecc_p192_public_compressed.pem©r-   rX  r   rw   r   r‚   r'  r   r   r   Ú!test_export_public_pem_compressedÚ  ó
   
z1TestExport_P192.test_export_public_pem_compressedc                 C   óF   t ddƒ ¡ }| j d ¡}|  ||¡ | jjddd�}|  ||¡ d S )NrÇ   rU  rV  Fr9  ©r-   rX  r‘   Ú_export_private_pemr‚   r   r!  r   r   r   Útest_export_private_pem_clearã  ó
   z-TestExport_P192.test_export_private_pem_clearc                 C   ót   | j jdd�}|  ttj|¡ d|v sJ ‚t |d¡}|  | j |¡ | j jdddd�}t |d¡}|  | j |¡ d S ©NrÐ   )rG  zEC PRIVATE KEYr¼   rV  F©r  rG  r:  ©r‘   rb  ru   rv   r   rw   r‚   r   rP  r   r   r   Ú!test_export_private_pem_encryptedî  ó   þz1TestExport_P192.test_export_private_pem_encryptedc                 C   óB   t ddƒ ¡ }| j ¡ }|  ||¡ | jjdd�}|  ||¡ d S )Nr·   rU  rV  r  ©r-   rX  r‘   Ú(_export_private_clear_pkcs8_in_clear_pemr‚   r   r!  r   r   r   Ú#test_export_private_pkcs8_and_pem_1  ó
   
z3TestExport_P192.test_export_private_pkcs8_and_pem_1c                 C   óv   | j jddd�}|  ttj|¡ d|v sJ ‚t |d¡}|  | j |¡ | j jdddd�}t |d¡}|  | j |¡ d S ©Nr¼   rE  )rH  úENCRYPTED PRIVATE KEYrV  rI  ©r‘   Ú,_export_private_encrypted_pkcs8_in_clear_pemru   rv   r   rw   r‚   r   rP  r   r   r   Ú#test_export_private_pkcs8_and_pem_2  ó   ÿþz3TestExport_P192.test_export_private_pkcs8_and_pem_2c                 C   ót   | j jdddtƒ d�}| j jdddtƒ d�}|  ||¡ | j jdddtƒ d�}| j jdddtƒ d�}|  ||¡ d S ©NrV  r¼   rE  ©r  rG  rH  ÚrandfuncF©r  r:  rG  rz  ©r‘   r   rl   r‚   ©ry   Úencoded1Úencoded2r   r   r   Ú	test_prng"  ó,   ýýýýzTestExport_P192.test_prngc                 C   ó<   | j jdddtƒ d�}| j jdddtƒ d�}|  ||¡ d S ©NrV  Fr¼   r{  rÐ   r|  r}  r   r   r   Útest_byte_or_string_passphrase:  ó   ýýz.TestExport_P192.test_byte_or_string_passphrasec                 C   ó    | j t| jjdd� | jjdddd� | j t| jjddd� | j t| jjddd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� d S ©NÚXXXr  rV  r¼   Frg  ©r  rG  r  rE  ©r  rG  r:  rH  r9  r0   rI  ©ru   rv   r‘   r   r’   rx   r   r   r   Útest_error_params1E  ó,   
ÿÿýÿÿ
þz"TestExport_P192.test_error_params1c                 C   óX   d}d}t  |¡}t|jjd ƒ}|  |d¡ t  |¡}t|jjd ƒ}|  |d¡ d S )Nzâ-----BEGIN EC PRIVATE KEY-----
        MF8CAQEEGHvhXmIW95JxZYfd4AUPu9BwknjuvS36aqAKBggqhkjOPQMBAaE0AzIA
        BLJZCyTu35DQIlqvMlBynn3k1Ig+dWfg/brRhHecxptrbloqFSP8ITw0CwbGF+2X
        5g==
        -----END EC PRIVATE KEY-----zâ-----BEGIN EC PRIVATE KEY-----
        MF8CAQEEGA3rAotUaWl7d47eX6tz9JmLzOMJwl13XaAKBggqhkjOPQMBAaE0AzIA
        BG4tHlTBBBGokcWmGm2xubVB0NvPC/Ou5AYwivs+3iCxmEjsymVAj6iiuX2Lxr6g
        /Q==
        -----END EC PRIVATE KEY-----é   iæ—  iý   ©r   rw   ÚintÚpointQÚyr‚   ©ry   Úpem1Úpem2Úkey1Úlow16Úkey2r   r   r   Útest_compressed_curve`  ó   

z%TestExport_P192.test_compressed_curve©r   r   r   r�   r#  r+  r1  r6  r=  rB  rR  rZ  r^  rc  ri  rn  ru  r€  r„  rŒ  rš  r×   r   r   r–   r   r  r  s&    	r  c                       r   )%ÚTestExport_P224c                    r�   rŽ   )r�   r�  r�   rO   r‘   r’   r“   r–   r   r   r�   {  r˜   zTestExport_P224.__init__c                 C   r  )NrÙ   Fr  r  r  r  r!  r   r   r   r#    r$  z3TestExport_P224.test_export_public_der_uncompressedc                 C   r%  )NrÙ   r  Tr  rÛ   r&  r'  r   r   r   r+  ‹  r,  z1TestExport_P224.test_export_public_der_compressedc                 C   r-  )NrÙ   r.  r  r/  r0  r   r   r   r1  “  r2  z4TestExport_P224.test_export_public_sec1_uncompressedc                 C   r3  )NrÙ   r.  Tr  rÛ   r4  r5  r   r   r   r6  š  r7  z2TestExport_P224.test_export_public_sec1_compressedc                 C   r8  )NrÜ   r  Fr9  r;  r!  r   r   r   r=  ¢  r>  z/TestExport_P224.test_export_rfc5915_private_derc                 C   r?  )NrÝ   r  r  r@  r!  r   r   r   rB  ­  rC  z/TestExport_P224.test_export_private_pkcs8_clearc                 C   sr   | j jddd�}|  ttj|d ¡ t |d¡}|  | j |¡ | j jdddddid�}t |d¡}|  | j |¡ d S )	Nr¼   rE  rF  r  z&PBKDF2WithHMAC-SHA512-224AndAES128-CBCrJ  rK  rL  rN  rP  r   r   r   rR  ¸  s   ÿýz3TestExport_P224.test_export_private_pkcs8_encryptedc                 C   rT  )Nrà   rU  FrV  r  r  rW  r!  r   r   r   rZ  Ë  r[  z3TestExport_P224.test_export_public_pem_uncompressedc                 C   r\  )Nrà   rU  rV  Tr  zecc_p224_public_compressed.pemr]  r'  r   r   r   r^  Ù  r_  z1TestExport_P224.test_export_public_pem_compressedc                 C   r`  )Nrá   rU  rV  Fr9  ra  r!  r   r   r   rc  â  rd  z-TestExport_P224.test_export_private_pem_clearc                 C   re  rf  rh  rP  r   r   r   ri  í  rj  z1TestExport_P224.test_export_private_pem_encryptedc                 C   rk  )NrÞ   rU  rV  r  rl  r!  r   r   r   rn     ro  z3TestExport_P224.test_export_private_pkcs8_and_pem_1c                 C   rp  rq  rs  rP  r   r   r   ru    rv  z3TestExport_P224.test_export_private_pkcs8_and_pem_2c                 C   rw  rx  r|  r}  r   r   r   r€  !  r�  zTestExport_P224.test_prngc                 C   r‚  rƒ  r|  r}  r   r   r   r„  9  r…  z.TestExport_P224.test_byte_or_string_passphrasec                 C   r†  r‡  r‹  rx   r   r   r   rŒ  D  r�  z"TestExport_P224.test_error_params1c                 C   rŽ  )Nzî-----BEGIN EC PRIVATE KEY-----
        MGgCAQEEHPYicBNI9nd6wDKAX2l+f3A0Q+KWUQeMqSt5GoOgBwYFK4EEACGhPAM6
        AATCL6rUIDT14zXKoS5GQUMDP/tpc+1iI/FyEZikt2roKDkhU5q08srmqaysbfJN
        eUr7Xf1lnCVGag==
        -----END EC PRIVATE KEY-----zî-----BEGIN EC PRIVATE KEY-----
        MGgCAQEEHEFjbaVPLJ3ngZyCibCvT0RLUqSlHjC5Z3e0FtugBwYFK4EEACGhPAM6
        AAT5IvL2V6m48y1JLMGr6ZbnOqNKP9hMf9mxyVkk6/SaRoBoJVkXrNIpYL0P7DS7
        QF8E/OGeZRwvow==
        -----END EC PRIVATE KEY-----r�  ijF  i£/  r�  r”  r   r   r   rš  _  r›  z%TestExport_P224.test_compressed_curverœ  r   r   r–   r   r�  y  s&    	r�  c                       ó´   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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 ))ÚTestExport_P256c                    r�   rŽ   )r�   rŸ  r�   rT   r‘   r’   r“   r–   r   r   r�   z  r˜   zTestExport_P256.__init__c                 C   r  )Nrã   Fr  r  r  r  r!  r   r   r   r#  ~  r$  z3TestExport_P256.test_export_public_der_uncompressedc                 C   r%  )Nrã   r  Tr  rå   r&  r'  r   r   r   r+  Š  r,  z1TestExport_P256.test_export_public_der_compressedc                 C   r-  )Nrã   r.  r  r/  r0  r   r   r   r1  ’  r2  z4TestExport_P256.test_export_public_sec1_uncompressedc                 C   r3  )Nrã   r.  Tr  rå   r4  r5  r   r   r   r6  ™  r7  z2TestExport_P256.test_export_public_sec1_compressedc                 C   r8  )Nræ   r  Fr9  r;  r!  r   r   r   r=  ¡  r>  z/TestExport_P256.test_export_rfc5915_private_derc                 C   r?  )Nrç   r  r  r@  r!  r   r   r   rB  ¬  rC  z/TestExport_P256.test_export_private_pkcs8_clearc                 C   rD  )
Nr¼   rE  rF  r  rI  z&PBKDF2WithHMAC-SHA512-256AndAES128-CBCrJ  rK  rL  rN  rP  r   r   r   rR  ·  rS  z3TestExport_P256.test_export_private_pkcs8_encryptedc                 C   rT  )Nré   rU  FrV  r  r  rW  r!  r   r   r   rZ  Ò  r[  z3TestExport_P256.test_export_public_pem_uncompressedc                 C   r\  )Nré   rU  rV  Tr  zecc_p256_public_compressed.pemr]  r'  r   r   r   r^  à  r_  z1TestExport_P256.test_export_public_pem_compressedc                 C   r`  )Nrê   rU  rV  Fr9  ra  r!  r   r   r   rc  é  rd  z-TestExport_P256.test_export_private_pem_clearc                 C   re  rf  rh  rP  r   r   r   ri  ô  rj  z1TestExport_P256.test_export_private_pem_encryptedc                 C   rk  )Nrè   rU  rV  r  rl  r!  r   r   r   rn    ro  z3TestExport_P256.test_export_private_pkcs8_and_pem_1c                 C   rp  rq  rs  rP  r   r   r   ru    rv  z3TestExport_P256.test_export_private_pkcs8_and_pem_2c                 C   ó\   t ddƒ}| j d¡}|  ||¡ | jjdd�}|  ||¡ | jjddd�}|  ||¡ d S )Nrð   rU  FÚOpenSSHr  r  ©r-   r’   Ú_export_opensshr‚   r   r!  r   r   r   Ú test_export_openssh_uncompressed(  ó   
z0TestExport_P256.test_export_openssh_uncompressedc                 C   óL   t ddƒ}t |¡}|jddd�}t|ƒt|ƒksJ ‚|  |t |¡¡ d S )Nrð   rU  r¡  Tr  ©r-   r   rw   r   Úlenr‚   ©ry   rŸ   r(  r)  r   r   r   Útest_export_openssh_compressed6  ó
   

z.TestExport_P256.test_export_openssh_compressedc                 C   rw  rx  r|  r}  r   r   r   r€  >  r�  zTestExport_P256.test_prngc                 C   r‚  rƒ  r|  r}  r   r   r   r„  V  r…  z.TestExport_P256.test_byte_or_string_passphrasec                 C   ó¶   | j t| jjdd� | jjdddd� | j t| jjddd� | j t| jjddd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 ©Nrˆ  r  rV  r¼   Frg  r‰  r  rE  rŠ  r9  r0   rI  r¡  r‹  rx   r   r   r   rŒ  a  ó2   
ÿÿýÿÿþ
ÿz"TestExport_P256.test_error_params1c                 C   rŽ  )NzÍ-----BEGIN EC PRIVATE KEY-----
        MFcCAQEEIHTuc09jC51xXomV6MVCDN+DpAAvSmaJWZPTEHM6D5H1oAoGCCqGSM49
        AwEHoSQDIgACWFuGbHe8yJ43rir7PMTE9w8vHz0BSpXHq90Xi7/s+a0=
        -----END EC PRIVATE KEY-----zÍ-----BEGIN EC PRIVATE KEY-----
        MFcCAQEEIFggiPN9SQP+FAPTCPp08fRUz7rHp2qNBRcBJ1DXhb3ZoAoGCCqGSM49
        AwEHoSQDIgADLpph1trTIlVfa8NJvlMUPyWvL+wP+pW3BJITUL/wj9A=
        -----END EC PRIVATE KEY-----r�  iü¦  iWn  r�  r”  r   r   r   rš  �  s   

z%TestExport_P256.test_compressed_curve©r   r   r   r�   r#  r+  r1  r6  r=  rB  rR  rZ  r^  rc  ri  rn  ru  r¤  rª  r€  r„  rŒ  rš  r×   r   r   r–   r   rŸ  x  s*    	 rŸ  c                       rž  ))ÚTestExport_P384c                    r�   rŽ   )r�   r°  r�   rX   r‘   r’   r“   r–   r   r   r�   š  r˜   zTestExport_P384.__init__c                 C   r  )Nr  Fr  r  r  r  r!  r   r   r   r#  ž  r$  z3TestExport_P384.test_export_public_der_uncompressedc                 C   r%  )Nr  r  Tr  r  r&  r'  r   r   r   r+  ª  r,  z1TestExport_P384.test_export_public_der_compressedc                 C   r-  )Nr  r.  r  r/  r0  r   r   r   r1  ²  r2  z4TestExport_P384.test_export_public_sec1_uncompressedc                 C   r3  )Nr  r.  Tr  r  r4  r5  r   r   r   r6  ¹  r7  z2TestExport_P384.test_export_public_sec1_compressedc                 C   r8  )Nr  r  Fr9  r;  r!  r   r   r   r=  Á  r>  z/TestExport_P384.test_export_rfc5915_private_derc                 C   r?  )Nr  r  r  r@  r!  r   r   r   rB  Ì  rC  z/TestExport_P384.test_export_private_pkcs8_clearc                 C   rD  ©
Nr¼   rE  rF  r  rI  z"PBKDF2WithHMAC-SHA384AndAES128-CBCrJ  rK  rL  rN  rP  r   r   r   rR  ×  rS  z3TestExport_P384.test_export_private_pkcs8_encryptedc                 C   rT  )Nr  rU  FrV  r  r  rW  r!  r   r   r   rZ  ò  r[  z3TestExport_P384.test_export_public_pem_uncompressedc                 C   r\  )Nr  rU  rV  Tr  zecc_p384_public_compressed.pemr]  r'  r   r   r   r^     r_  z1TestExport_P384.test_export_public_pem_compressedc                 C   r`  )Nr	  rU  rV  Fr9  ra  r!  r   r   r   rc  	  rd  z-TestExport_P384.test_export_private_pem_clearc                 C   re  rf  rh  rP  r   r   r   ri    rj  z1TestExport_P384.test_export_private_pem_encryptedc                 C   rk  )Nr  rU  rV  r  rl  r!  r   r   r   rn  '  ro  z3TestExport_P384.test_export_private_pkcs8_and_pem_1c                 C   rp  rq  rs  rP  r   r   r   ru  3  rv  z3TestExport_P384.test_export_private_pkcs8_and_pem_2c                 C   r   )Nr
  rU  Fr¡  r  r  r¢  r!  r   r   r   r¤  H  r¥  z0TestExport_P384.test_export_openssh_uncompressedc                 C   r¦  )Nr
  rU  r¡  Tr  r§  r©  r   r   r   rª  V  r«  z.TestExport_P384.test_export_openssh_compressedc                 C   rw  rx  r|  r}  r   r   r   r€  ^  r�  zTestExport_P384.test_prngc                 C   r‚  rƒ  r|  r}  r   r   r   r„  v  r…  z.TestExport_P384.test_byte_or_string_passphrasec                 C   r¬  r­  r‹  rx   r   r   r   rŒ  �  r®  z"TestExport_P384.test_error_params1c                 C   rŽ  )Na  -----BEGIN EC PRIVATE KEY-----
MIGkAgEBBDAM0lEIhvXuekK2SWtdbgOcZtBaxa9TxfpO/GcDFZLCJ3JVXaTgwken
QT+C+XLtD6WgBwYFK4EEACKhZANiAATs0kZMhFDu8DoBC21jrSDPyAUn4aXZ/DM4
ylhDfWmb4LEbeszXceIzfhIUaaGs5y1xXaqf5KXTiAAYx2pKUzAAM9lcGUHCGKJG
k4AgUmVJON29XoUilcFrzjDmuye3B6Q=
-----END EC PRIVATE KEY-----a  -----BEGIN EC PRIVATE KEY-----
MIGkAgEBBDDHPFTslYLltE16fHdSDTtE/2HTmd3M8mqy5MttAm4wZ833KXiGS9oe
kFdx9sNV0KygBwYFK4EEACKhZANiAASLIE5RqVMtNhtBH/u/p/ifqOAlKnK/+RrQ
YC46ZRsnKNayw3wATdPjgja7L/DSII3nZK0G6KOOVwJBznT/e+zudUJYhZKaBLRx
/bgXyxUtYClOXxb1Y/5N7txLstYRyP0=
-----END EC PRIVATE KEY-----r�  i¤  iýÈ  r�  r”  r   r   r   rš     s   

z%TestExport_P384.test_compressed_curver¯  r   r   r–   r   r°  ˜  s*    	r°  c                       rž  ))ÚTestExport_P521c                    r�   rŽ   )r�   r²  r�   r\   r‘   r’   r“   r–   r   r   r�   ¿  r˜   zTestExport_P521.__init__c                 C   r  )Nr  Fr  r  r  r  r!  r   r   r   r#  Ã  r$  z3TestExport_P521.test_export_public_der_uncompressedc                 C   r%  )Nr  r  Tr  r  r&  r'  r   r   r   r+  Ï  r,  z1TestExport_P521.test_export_public_der_compressedc                 C   sH   t dƒ}t|ƒ}| jjdd�}|  ||¡ | jjdd�}|  ||¡ d S )Nr  r.  r  Úrawr/  r0  r   r   r   r1  ×  s   z4TestExport_P521.test_export_public_sec1_uncompressedc                 C   sT   t dƒ}| jjddd�}t dƒ}t|ƒ}|  ||¡ | jjddd�}|  ||¡ d S )Nr  r.  Tr  r  r³  r4  r5  r   r   r   r6  á  s   z2TestExport_P521.test_export_public_sec1_compressedc                 C   r8  )Nr  r  Fr9  r;  r!  r   r   r   r=  ì  r>  z/TestExport_P521.test_export_rfc5915_private_derc                 C   r?  )Nr  r  r  r@  r!  r   r   r   rB  ÷  rC  z/TestExport_P521.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 )	Nr¼   rE  rF  r  rI  rJ  rK  rL  rN  rP  r   r   r   rR    rS  z3TestExport_P521.test_export_private_pkcs8_encryptedc                 C   rT  )Nr  rU  FrV  r  r  rW  r!  r   r   r   rZ    r[  z3TestExport_P521.test_export_public_pem_uncompressedc                 C   r\  )Nr  rU  rV  Tr  zecc_p521_public_compressed.pemr]  r'  r   r   r   r^  +  r_  z1TestExport_P521.test_export_public_pem_compressedc                 C   r`  )Nr  rU  rV  Fr9  ra  r!  r   r   r   rc  4  rd  z-TestExport_P521.test_export_private_pem_clearc                 C   re  rf  rh  rP  r   r   r   ri  ?  rj  z1TestExport_P521.test_export_private_pem_encryptedc                 C   rk  )Nr  rU  rV  r  rl  r!  r   r   r   rn  R  ro  z3TestExport_P521.test_export_private_pkcs8_and_pem_1c                 C   rp  rq  rs  rP  r   r   r   ru  ^  rv  z3TestExport_P521.test_export_private_pkcs8_and_pem_2c                 C   r   )Nr  rU  Fr¡  r  r  r¢  r!  r   r   r   r¤  s  r¥  z0TestExport_P521.test_export_openssh_uncompressedc                 C   r¦  )Nr  rU  r¡  Tr  r§  r©  r   r   r   rª  �  r«  z.TestExport_P521.test_export_openssh_compressedc                 C   rw  rx  r|  r}  r   r   r   r€  ‰  r�  zTestExport_P521.test_prngc                 C   r‚  rƒ  r|  r}  r   r   r   r„  ¡  r…  z.TestExport_P521.test_byte_or_string_passphrasec                 C   r¬  r­  r‹  rx   r   r   r   rŒ  ¬  r®  z"TestExport_P521.test_error_params1c                 C   rŽ  )Nal  -----BEGIN EC PRIVATE KEY-----
MIHcAgEBBEIAnm1CEjVjvNfXEN730p+D6su5l+mOztdc5XmTEoti+s2R4GQ4mAv3
0zYLvyklvOHw0+yy8d0cyGEJGb8T3ZVKmg2gBwYFK4EEACOhgYkDgYYABAHzjTI1
ckxQ3Togi0LAxiG0PucdBBBs5oIy3df95xv6SInp70z+4qQ2EltEmdNMssH8eOrl
M5CYdZ6nbcHMVaJUvQEzTrYxvFjOgJiOd+E9eBWbLkbMNqsh1UKVO6HbMbW0ohCI
uGxO8tM6r3w89/qzpG2SvFM/fvv3mIR30wSZDD84qA==
-----END EC PRIVATE KEY-----al  -----BEGIN EC PRIVATE KEY-----
MIHcAgEBBEIB84OfhJluLBRLn3+cC/RQ37C2SfQVP/t0gQK2tCsTf5avRcWYRrOJ
PmX9lNnkC0Hobd75QFRmdxrB0Wd1/M4jZOWgBwYFK4EEACOhgYkDgYYABAAMZcdJ
1YLCGHt3bHCEzdidVy6+brlJIbv1aQ9fPQLF7WKNv4c8w3H8d5a2+SDZilBOsk5c
6cNJDMz2ExWQvxl4CwDJtJGt1+LHVKFGy73NANqVxMbRu+2F8lOxkNp/ziFTbVyV
vv6oYkMIIi7r5oQWAiQDrR2mlrrFDL9V7GH/r8SWQw==
-----END EC PRIVATE KEY-----r�  i¨8  iC–  r�  r”  r   r   r   rš  Ë  s   	

z%TestExport_P521.test_compressed_curver¯  r   r   r–   r   r²  ½  s*    
	r²  c                       r‹   )ÚTestImport_Ed25519c                    r�   rŽ   )r�   r´  r�   re   r‘   r’   r“   r–   r   r   r�   ì  r˜   zTestImport_Ed25519.__init__c                 C   r™   )Núecc_ed25519_public.derr›   rž   r   r   r   r    ð  r¡   z)TestImport_Ed25519.test_import_public_derc                 C   r±   )Núecc_ed25519_private.derr³   rž   r   r   r   Útest_import_pkcs8_derü  rµ   z(TestImport_Ed25519.test_import_pkcs8_derc                 C   r»   )Nzecc_ed25519_private_p8.derr¼   r³   rž   r   r   r   r½   	  r¾   z8TestImport_Ed25519.test_import_private_pkcs8_encrypted_1c                 C   r¿   )Nzecc_ed25519_private_p8.pemr¼   r¸   rž   r   r   r   rÀ   	  rÁ   z8TestImport_Ed25519.test_import_private_pkcs8_encrypted_2c                 C   r»   )Nzecc_ed25519_private_p8_2.derr¼   r³   rž   r   r   r   rß   	  r¾   z8TestImport_Ed25519.test_import_private_pkcs8_encrypted_3c                 C   r±   )Nzecc_ed25519_x509.derrÂ   rž   r   r   r   rÃ   	  rµ   z'TestImport_Ed25519.test_import_x509_derc                 C   r¶   )Núecc_ed25519_public.pemrÅ   rž   r   r   r   rÆ   &	  rº   z)TestImport_Ed25519.test_import_public_pemc                 C   r¶   )Núecc_ed25519_private.pemr¸   rž   r   r   r   rÈ   ,	  rº   z*TestImport_Ed25519.test_import_private_pemc                 C   rÉ   )N©rË   rÌ   rÍ   rÎ   zecc_ed25519_private_enc_%s.pemr¼   rÐ   rÑ   rÒ   r   r   r   rÔ   2	  rÕ   z4TestImport_Ed25519.test_import_private_pem_encryptedc                 C   r¶   )Nzecc_ed25519_x509.pemrÅ   rž   r   r   r   rÖ   <	  rº   z'TestImport_Ed25519.test_import_x509_pemc                 C   s<   t dƒ}t |¡}|  | ¡ ¡ t |¡}|  | ¡ ¡ d S )Núecc_ed25519_public_openssh.txt)r-   r   rò   ÚassertFalseÚhas_privaterw   rž   r   r   r   ró   B	  s
   

z-TestImport_Ed25519.test_import_openssh_publicc                 C   rë   )Nzecc_ed25519_private_openssh.pemrì   rž   r   r   r   rú   I	  rî   z4TestImport_Ed25519.test_import_openssh_private_clearc                 C   s   t dƒ}t |d¡}d S )Nz#ecc_ed25519_private_openssh_pwd.pemrý   rì   rž   r   r   r   rþ   M	  s   z7TestImport_Ed25519.test_import_openssh_private_password)r   r   r   r�   r    r·  r½   rÀ   rß   rÃ   rÆ   rÈ   rÔ   rÖ   ró   rú   rþ   r×   r   r   r–   r   r´  ê  s    				
r´  c                       ó|   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dd„ Zdd„ Z‡  ZS )ÚTestExport_Ed25519c                    r�   rŽ   )r�   r¿  r�   re   r‘   r’   r“   r–   r   r   r�   T	  r˜   zTestExport_Ed25519.__init__c                 C   óZ   t dƒ}| j d¡}|  ||¡ | jjdd�}|  ||¡ | jjddd�}|  ||¡ d S )Nrµ  Tr  r  Fr  r  r!  r   r   r   Útest_export_public_derX	  r$  z)TestExport_Ed25519.test_export_public_derc                 C   ó   | j t| jjdd� d S ©Nr.  r  ©ru   rv   r’   r   rx   r   r   r   Útest_export_public_sec1d	  ó   z*TestExport_Ed25519.test_export_public_sec1c                 C   óR   t dƒ}| j ¡ }|  ||¡ | jjdd�}|  ||¡ | jt| jjddd� d S )Nr¶  r  r  Fr9  ©r-   r‘   rA  r‚   r   ru   rv   r!  r   r   r   rB  g	  ó   

ÿz2TestExport_Ed25519.test_export_private_pkcs8_clearc                 C   rD  )
Nr¼   rE  rF  r  rI  z"PBKDF2WithHMAC-SHA256AndAES128-CBCrJ  rK  rL  rN  rP  r   r   r   rR  u	  rS  z6TestExport_Ed25519.test_export_private_pkcs8_encryptedc                 C   ó0   t ddƒ ¡ }| jjdd� ¡ }|  ||¡ d S )Nr¸  rU  rV  r  ©r-   rX  r’   r   r‚   ©ry   Úkey_file_refrŸ   r   r   r   Útest_export_public_pem�	  ó   z)TestExport_Ed25519.test_export_public_pemc                 C   rÊ  )Nr¹  rU  rV  r  ©r-   rX  r‘   r   r‚   r!  r   r   r   rc  •	  rÏ  z0TestExport_Ed25519.test_export_private_pem_clearc                 C   óL   | j jdddd�}|  ttj|¡ d|v sJ ‚t |d¡}|  | j |¡ d S ©NrV  rÐ   rE  rI  rr  r¼   ©r‘   r   ru   rv   r   rw   r‚   rP  r   r   r   ri  š	  ó   þz4TestExport_Ed25519.test_export_private_pem_encryptedc                 C   sf   t ddƒ}t |¡}d | d¡d d… ¡}| d¡}|  || ¡ ¡ |jdd�}|  || ¡ ¡ d S )Nr»  rU  r/   r   Fr¡  r  )	r-   r   rw   r    Úsplitr£  r‚   rX  r   )ry   rŸ   rb   r"  r   r   r   Útest_export_openssh§	  s   


z&TestExport_Ed25519.test_export_opensshc                 C   ó"   | j jdd�}|  |tdƒ¡ d S )Nr³  r  s@   bc85b8cf585d20a4de47e84d1cb6183f63d9ba96223fcbc886e363ffdea20cff©r’   r   r‚   r   ©ry   r"  r   r   r   Útest_export_raw²	  ó   z"TestExport_Ed25519.test_export_rawc                 C   ó<   | j jdddtƒ d�}| j jdddtƒ d�}|  ||¡ d S ©NrV  r¼   rE  ry  r|  r}  r   r   r   r€  ¶	  ó   ýýzTestExport_Ed25519.test_prngc                 C   ó<   | j jdddtƒ d�}| j jdddtƒ d�}|  ||¡ d S ©NrV  r¼   rE  ry  rÐ   r|  r}  r   r   r   r„  Â	  r…  z1TestExport_Ed25519.test_byte_or_string_passphrasec                 C   ót   | 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 ©Nrˆ  r  rV  r¼   r‰  r0   Frg  rE  rI  r¡  ©ru   rv   r‘   r   rx   r   r   r   rŒ  Í	  ó   ÿÿþ
ÿz%TestExport_Ed25519.test_error_params1©r   r   r   r�   rÁ  rÅ  rB  rR  rÎ  rc  ri  rÖ  rÚ  r€  r„  rŒ  r×   r   r   r–   r   r¿  R	  s    r¿  c                       sl   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_Ed448c                    r�   rŽ   )r�   ræ  r�   ri   r‘   r’   r“   r–   r   r   r�   ã	  r˜   zTestImport_Ed448.__init__c                 C   r™   )Núecc_ed448_public.derr›   rž   r   r   r   r    ç	  r¡   z'TestImport_Ed448.test_import_public_derc                 C   r±   )Núecc_ed448_private.derr³   rž   r   r   r   r·  ó	  rµ   z&TestImport_Ed448.test_import_pkcs8_derc                 C   r»   )Nzecc_ed448_private_p8.derr¼   r³   rž   r   r   r   r½   ü	  r¾   z6TestImport_Ed448.test_import_private_pkcs8_encrypted_1c                 C   r¿   )Nzecc_ed448_private_p8.pemr¼   r¸   rž   r   r   r   rÀ   
  rÁ   z6TestImport_Ed448.test_import_private_pkcs8_encrypted_2c                 C   r»   )Nzecc_ed448_private_p8_2.derr¼   r³   rž   r   r   r   rß   
  r¾   z6TestImport_Ed448.test_import_private_pkcs8_encrypted_3c                 C   r±   )Nzecc_ed448_x509.derrÂ   rž   r   r   r   rÃ   
  rµ   z%TestImport_Ed448.test_import_x509_derc                 C   r¶   )Núecc_ed448_public.pemrÅ   rž   r   r   r   rÆ   
  rº   z'TestImport_Ed448.test_import_public_pemc                 C   r¶   )Núecc_ed448_private.pemr¸   rž   r   r   r   rÈ   #
  rº   z(TestImport_Ed448.test_import_private_pemc                 C   rÉ   )Nrº  zecc_ed448_private_enc_%s.pemr¼   rÐ   rÑ   rÒ   r   r   r   rÔ   )
  rÕ   z2TestImport_Ed448.test_import_private_pem_encryptedc                 C   r¶   )Nzecc_ed448_x509.pemrÅ   rž   r   r   r   rÖ   3
  rº   z%TestImport_Ed448.test_import_x509_pem)r   r   r   r�   r    r·  r½   rÀ   rß   rÃ   rÆ   rÈ   rÔ   rÖ   r×   r   r   r–   r   ræ  á	  s    				
ræ  c                       r¾  )ÚTestExport_Ed448c                    r�   rŽ   )r�   rë  r�   ri   r‘   r’   r“   r–   r   r   r�   <
  r˜   zTestExport_Ed448.__init__c                 C   rÀ  )Nrç  Tr  r  Fr  r  r!  r   r   r   rÁ  @
  r$  z'TestExport_Ed448.test_export_public_derc                 C   rÂ  rÃ  rÄ  rx   r   r   r   rÅ  L
  rÆ  z(TestExport_Ed448.test_export_public_sec1c                 C   rÇ  )Nrè  r  r  Fr9  rÈ  r!  r   r   r   rB  O
  rÉ  z0TestExport_Ed448.test_export_private_pkcs8_clearc                 C   rD  r±  rN  rP  r   r   r   rR  ]
  rS  z4TestExport_Ed448.test_export_private_pkcs8_encryptedc                 C   rÊ  )Nré  rU  rV  r  rË  rÌ  r   r   r   rÎ  y
  rÏ  z'TestExport_Ed448.test_export_public_pemc                 C   rÊ  )Nrê  rU  rV  r  rÐ  r!  r   r   r   rc  ~
  rÏ  z.TestExport_Ed448.test_export_private_pem_clearc                 C   rÑ  rÒ  rÓ  rP  r   r   r   ri  ƒ
  rÔ  z2TestExport_Ed448.test_export_private_pem_encryptedc                 C   rÂ  )Nr¡  r  rÄ  rx   r   r   r   rÖ  �
  s   z$TestExport_Ed448.test_export_opensshc                 C   r×  )Nr³  r  sr   899014ddc0a0e1260cfc1085afdf952019e9fd63372e3e366e26dad32b176624884330a14617237e3081febd9d1a15069e7499433d2f55dd80rØ  rÙ  r   r   r   rÚ  ”
  rÛ  z TestExport_Ed448.test_export_rawc                 C   rÜ  rÝ  r|  r}  r   r   r   r€  ˜
  rÞ  zTestExport_Ed448.test_prngc                 C   rß  rà  r|  r}  r   r   r   r„  ¤
  r…  z/TestExport_Ed448.test_byte_or_string_passphrasec                 C   rá  râ  rã  rx   r   r   r   rŒ  ¯
  rä  z#TestExport_Ed448.test_error_params1rå  r   r   r–   r   rë  :
  s    rë  c                 C   sÔ   g }|t tƒ7 }zW|t tƒ7 }|t tƒ7 }|t tƒ7 }|t tƒ7 }|t tƒ7 }|t tƒ7 }|t tƒ7 }|t t	ƒ7 }|t t
ƒ7 }|t tƒ7 }|t tƒ7 }|t tƒ7 }|t tƒ7 }|t tƒ7 }W |S  tyi   Y |S w rŽ   )r   rs   rŒ   rØ   râ   r  r  r´  ræ  r  r�  rŸ  r°  r²  r¿  rë  r   )ÚconfigÚtestsr   r   r   Ú	get_testsÃ
  s,   þþrî  Ú__main__c                   C   s   t  tƒ ¡S rŽ   )ÚunittestÚ	TestSuiterî  r   r   r   r   Ú<lambda>Ý
  s    rò  Úsuite)ÚdefaultTest)r   );r   r   r#   rð  Úbinasciir   ÚCryptodome.SelfTest.st_commonr   ÚCryptodome.Util.py3compatr   r   r   ÚCryptodome.Util.asn1r   r   ÚCryptodome.Util.numberr	   ÚCryptodome.Hashr
   ÚCryptodome.PublicKeyr   ÚCryptodome.PublicKey.ECCr   r   r   ÚImportErrorrv   r   r-   r5   rL   rO   rT   rX   r\   re   ri   rl   rr   ÚTestCasers   rŒ   rØ   râ   r  r  r  r�  rŸ  r°  r²  r´  r¿  ræ  rë  rî  r   ró  Úmainr   r   r   r   Ú<module>   s‚   ÿ

!nw     	    "  '  /h Y 

þ