
    uh8                        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 	 d dlZd	ZddZd Zd Zd Zd Z G d dej6                        Z G d dej6                        Z G d dej6                        Z G d dej6                        Zi fdZ e!dk(  rd Z" ejF                  d       yy# e$ r d
ZY w xY w)    N)	unhexlify)SkipTest)list_test_cases)tostrFileNotFoundError)DerSequenceDerBitString)SHAKE128)ECCTFc                 B   d }	 t         s<t        t        j                  t	        j
                  t        j                        |       d}t        j                  j                  t        j                        }t        j                  j                  t	        j                  j                  |g| |       }t        ||      5 }|j                         }d d d        |t!        d| z        |S # 1 sw Y   xY w# t        $ r t        j                  dt        d       Y Ew xY w)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_ins          f/home/hoppernj/.local/lib/python3.12/site-packages/Crypto/SelfTest/PublicKey/test_import_Curve25519.py	load_filer'   4   s    G$%#ELL$&KK$=$-/ / )	77??#<#E#EFbggll8&Hi&H)T.$' 	%7llnG	% |i/00N	% 	%  $@!!"	$$s*   B;C6 ?C*C6 *C3/C6 6%DDc                     dj                  |       }t        t        |      j                  dd      j                  dd            S )N      :)r   r   r   replace)linesexts     r&   compactr0   N   s8    
((5/CU3Z''R088bABBr)   c                      t        d      j                         } t        | dd       }t        j                  d|      }||j                         fS )Nzecc_x25519.txt      
Curve25519)curveseed)r'   
splitlinesr0   r   	construct
public_key)	key_linesr6   keys      r&   create_ref_keys_x25519r<   S   sH    *+668I9Qq>"D
--l
6C!""r)   c                  \    t        j                         j                  d      j                  S )Ns   SEED)r
   newupdater    r)   r&   get_fixed_prngrA   Z   s    <<>  )...r)   c                     t               }|j                  |        t               }|j                  |d          |j                  S )N   )r   decoder	   value)dataseqbss      r&   extract_bitstring_from_spkirI   ^   s5    
-CJJt	BIIc!f88Or)   c                       e Zd Zd Zd Zy)
TestImportc                 N    | j                  t        t        j                  d       y )Nr)   )assertRaises
ValueErrorr   
import_keyselfs    r&   
test_emptyzTestImport.test_emptyh   s    *cnnc:r)   c                 h    d}t        |      }| j                  t        t        j                  |       y )N`302e020100300506032b656f042204207009906b64ec727d5cb5c23007bf0425b3fd79014c6cd62ca3dddfcf0f278f79)r   rM   rN   r   rO   )rQ   mismatch_hexmismatchs      r&   test_mismatchzTestImport.test_mismatchk   s'    y\**cnnh?r)   N)__name__
__module____qualname__rR   rW   r@   r)   r&   rK   rK   f   s    ;@r)   rK   c                   Z     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Z xZS )TestImport_Curve25519c                 Z    t        t        | 
  |i | t               \  | _        | _        y N)superr\   __init__r<   ref_private
ref_publicrQ   argskwargs	__class__s      r&   r`   zTestImport_Curve25519.__init__t   *    #T3TDVD,B,D)$/r)   c                 B   t        d      }t        j                  |      }| j                  | j                  |       t        j
                  |d       }| j                  | j                  |       t        j                  |      }| j                  | j                  |       y )Necc_x25519_public.der)r'   r   _import_subjectPublicKeyInfoassertEqualrb   _import_derrO   rQ   key_filer;   s      r&   test_import_public_derz,TestImport_Curve25519.test_import_public_derx   sw    45..x8#.ooh-#.nnX&#.r)   c                     t        d      }t        j                  |d       }| j                  | j                  |       t        j
                  |      }| j                  | j                  |       y )Necc_x25519_private.derr'   r   rl   rk   ra   rO   rm   s      r&   test_import_pkcs8_derz+TestImport_Curve25519.test_import_pkcs8_der   sW    56ooh-))3/nnX&))3/r)   c                     t        d      }t        j                  |d      }| j                  | j                  |       t        j
                  |d      }| j                  | j                  |       y )Nzecc_x25519_private_p8.dersecretrr   rm   s      r&   %test_import_private_pkcs8_encrypted_1z;TestImport_Curve25519.test_import_private_pkcs8_encrypted_1   sY    89ooh1))3/nnXx0))3/r)   c                 ~    t        d      }t        j                  |d      }| j                  | j                  |       y )Nzecc_x25519_private_p8.pemru   r'   r   rO   rk   ra   rm   s      r&   %test_import_private_pkcs8_encrypted_2z;TestImport_Curve25519.test_import_private_pkcs8_encrypted_2   s3    89nnXx0))3/r)   c                     t        d      }t        j                  |d      }| j                  | j                  |       t        j
                  |d      }| j                  | j                  |       y )Nzecc_x25519_private_p8_2.derru   rr   rm   s      r&   %test_import_private_pkcs8_encrypted_3z;TestImport_Curve25519.test_import_private_pkcs8_encrypted_3   sY    :;ooh1))3/nnXx0))3/r)   c                     t        d      }t        j                  |d       }| j                  | j                  |       t        j
                  |      }| j                  | j                  |       y )Nzecc_x25519_x509.der)r'   r   rl   rk   rb   rO   rm   s      r&   test_import_x509_derz*TestImport_Curve25519.test_import_x509_der   sS    23ooh-#.nnX&#.r)   c                 |    t        d      }t        j                  |      }| j                  | j                  |       y )Necc_x25519_public.pemr'   r   rO   rk   rb   rm   s      r&   test_import_public_pemz,TestImport_Curve25519.test_import_public_pem   s/    45nnX&#.r)   c                 |    t        d      }t        j                  |      }| j                  | j                  |       y )Necc_x25519_private.pemrx   rm   s      r&   test_import_private_pemz-TestImport_Curve25519.test_import_private_pem   s1    56nnX&))3/r)   c                    dD ]}  }t        d|z        }t        j                  |d      }| j                  | j                  |       t        j                  t        |      d      }| j                  | j                  |        y )N)des3aes128aes192aes256zecc_x25519_private_enc_%s.pemru      secret)r'   r   rO   rk   ra   r   )rQ   algorn   r;   s       r&   !test_import_private_pem_encryptedz7TestImport_Curve25519.test_import_private_pem_encrypted   sq    8 	4D !@4!GHH..84CT--s3..x)<CT--s3	4r)   c                 |    t        d      }t        j                  |      }| j                  | j                  |       y )Nzecc_x25519_x509.pemr   rm   s      r&   test_import_x509_pemz*TestImport_Curve25519.test_import_x509_pem   s/    23nnX&#.r)   )rX   rY   rZ   r`   ro   rs   rv   ry   r{   r}   r   r   r   r   __classcell__rf   s   @r&   r\   r\   r   s;    E
/0000//04/r)   r\   c                   Z     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Z xZS )TestExport_Curve25519c                 Z    t        t        | 
  |i | t               \  | _        | _        y r^   )r_   r   r`   r<   ra   rb   rc   s      r&   r`   zTestExport_Curve25519.__init__   rg   r)   c                 .   t        d      }| j                  j                  d      }| j                  ||       | j                  j	                  d      }| j                  ||       | j                  j	                  dd      }| j                  ||       y )Nri   TDERformatF)r   compress)r'   rb   _export_subjectPublicKeyInfork   
export_keyrQ   rn   encodeds      r&   test_export_public_derz,TestExport_Curve25519.test_export_public_der   s    45//>>tD7+//,,E,:7+//,,EE,J7+r)   c                 (   t        d      }| j                  j                         }| j                  ||       | j                  j	                  d      }| j                  ||       | j                  t        | j                  j                  dd       y )Nrq   r   r   F)r   	use_pkcs8)r'   ra   _export_pkcs8rk   r   rM   rN   r   s      r&   test_export_private_pkcs8_clearz5TestExport_Curve25519.test_export_private_pkcs8_clear   s    56""0027+ ""--U-;7+*d&6&6&A&A!&% 	 	9r)   c                 4   | j                   j                  dd      }| j                  t        t        j
                  |d        t	        j
                  |d      }| j                  | j                   |       | j                   j                  ddd      }t	        j                  |d      }| j                  | j                   |       | j                   j                  dddddi	      }t	        j                  |d      }| j                  | j                   |       y )
Nru    PBKDF2WithHMAC-SHA1AndAES128-CBC)
passphrase
protectionr   r   r   r   z"PBKDF2WithHMAC-SHA256AndAES128-CBCiteration_count{   )r   r   r   prot_params)	ra   r   rM   rN   r   _import_pkcs8rk   r   rO   rQ   r   decodeds      r&   #test_export_private_pkcs8_encryptedz9TestExport_Curve25519.test_export_private_pkcs8_encrypted   s   ""00H<^ 1 ` 	*c&7&7$G##GX6))73 ""--U9A9[ . ] ..(3))73 ""--U9A9];Lc:R . T ..(3))73r)   c                     t        dd      j                         }| j                  j                  d      j                         }| j	                  ||       y )Nr   rtPEMr   )r'   striprb   r   rk   )rQ   key_file_refrn   s      r&   test_export_public_pemz,TestExport_Curve25519.test_export_public_pem  sH     !8$?EEG??--U-;AACx0r)   c                     t        dd      j                         }| j                  j                  d      j                         }| j	                  ||       y )Nr   r   r   r   )r'   r   ra   r   rk   r   s      r&   test_export_private_pem_clearz3TestExport_Curve25519.test_export_private_pem_clear  sJ    5t<BBD""--U-;AAC7+r)   c                     | j                   j                  ddd      }| j                  t        t        j
                  |       d|v sJ t	        j
                  |d      }| j                  | j                   |       y )Nr   r   r   r   zENCRYPTED PRIVATE KEYru   )ra   r   rM   rN   r   rO   rk   r   s      r&   !test_export_private_pem_encryptedz7TestExport_Curve25519.test_export_private_pem_encrypted  sr    ""--U9B9[ . ]
 	*cnng>&'111..(3))73r)   c                     | j                   j                  d      }| j                  t        |      d       | j                  |t	        d             y )Nrawr       s@   ff7561ef60c9c8a757f6d6372ec14142c9be208d0e719136d8d3c715dfcf7e15)rb   r   rk   lenr   )rQ   r   s     r&   test_export_rawz%TestExport_Curve25519.test_export_raw  sC    //,,E,:Wr*),o"pqr)   c                     | j                   j                  dddt                     }| j                   j                  dddt                     }| j                  ||       y )Nr   ru   r   r   r   r   randfuncra   r   rA   rk   rQ   encoded1encoded2s      r&   	test_prngzTestExport_Curve25519.test_prng"  sj    ##..e:B:\8F8H / J ##..e:B:\8F8H / J 	8,r)   c                     | j                   j                  dddt                     }| j                   j                  dddt                     }| j                  ||       y )Nr   ru   r   r   r   r   r   s      r&   test_byte_or_string_passphrasez4TestExport_Curve25519.test_byte_or_string_passphrase.  sj    ##..e:B:\8F8H / J ##..e:C:\8F8H / J 	8,r)   c                    | j                  t        | j                  j                  d       | j                  t        | j                  j                  dd       | j                  t        | j                  j                  ddd       | j                  t        | j                  j                  ddd	
       | j                  t        | j                  j                  dd       y )NXXXr   r   ru   )r   r   r+   F)r   r   r   r   r   OpenSSH)rM   rN   ra   r   rP   s    r&   test_error_params1z(TestExport_Curve25519.test_error_params19  s    *d&6&6&A&A%P 	***55!&%- 	 	/ 	***55!&%'$)	 	 	+
 	***55!&%'%G	 	 	I 	***55!*%- 	 	/r)   )rX   rY   rZ   r`   r   r   r   r   r   r   r   r   r   r   r   r   s   @r&   r   r      s<    E
,9461
,
4r

-	-/r)   r   c                       e Zd Zd Zy)TestImport_Curve25519_Weakc                 <   ddz  dz
  }dddd|dz
  ||dz   |dz   |dz   |dz  dz
  |dz  |dz  dz   f}|D ]f  }t        j                  |d      }t        j                  |d	      }|j                  d
      }| j	                  t
        t         j                  |       h y )Nr         r   rC   l   kxujaj\~|ObjZs	oP,E$ l   _+yBb$:6gw[8cph[DS7OW
curve25519)pointr5   r   r   )r   	EccXPointEccKeyr   rM   rN   rO   )rQ   pweak_xxlow_order_pointweak_keyr   s          r&   test_weak_pemz(TestImport_Curve25519_Weak.test_weak_pemX  s    sFRK]_a%a%aacca%!)a%a%!)  	'A!mmA|<Ozz|LH)))7Gj!nn%'	'r)   N)rX   rY   rZ   r   r@   r)   r&   r   r   V  s    'r)   r   c                     g }	 |t        t              z  }|t        t              z  }|t        t              z  }|t        t              z  }|S # t
        $ r Y |S w xY wr^   )r   rK   r\   r   r   r   )configtestss     r&   	get_testsr   r  sk    E,,!677!677!;<< L  Ls   AA 	AA__main__c                  <    t        j                  t                     S r^   )unittest	TestSuiter   r@   r)   r&   suitr     s    !!)+..r)   suite)defaultTest)rb)$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'   r0   r<   rA   rI   TestCaserK   r\   r   r   r   rX   r   mainr@   r)   r&   <module>r      s   > 
      5 : 6    #$!
4C
#/	@"" 	@V/H-- V/rH/H-- H/V'!2!2 '8  	 z/HMMg& ]
  #"#s    C CC