a
    ‘db–-  ã                   @   s"  zd dl ZW n ey&   d dlZY n0 d dlZd dlZddlmZmZmZmZm	Z	 ddl
mZmZ ddlmZ ddlmZ G dd„ dejƒZejjd	ed
d„ eD ƒddd„ ƒZejjd	edd„ eD ƒddd„ ƒZejjd	edd„ eD ƒddd„ ƒZejjd	edd„ eD ƒddd„ ƒZdS )é    Né   )ÚCurveÚNIST256pÚcurvesÚUnknownCurveErrorÚPRIME_FIELD_OID)ÚCurveFpÚPointJacobi)Úder)Únumber_to_stringc                   @   sÈ   e Zd Ze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d)d*„ Zd+d,„ Zd-d.„ Zd/S )0ÚTestParameterEncodingc                 C   s
   d| _ d S )Na0  MIHgAgEBMCwGByqGSM49AQECIQD/////AAAAAQAAAAAAAAAAAAAAAP///////////////zBEBCD/////AAAAAQAAAAAAAAAAAAAAAP///////////////AQgWsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEsEQQRrF9Hy4SxCR/i85uVjpEDydwN9gS3rM6D0oTlF2JjClk/jQuL+Gn+bjufrSnwPnhYrzjNXazFezsu2QGg3v1H1AiEA/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVECAQE=)Úbase64_params)Úcls© r   úb/home/tom/ab/renpy-build/tmp/install.linux-x86_64/lib/python3.9/site-packages/ecdsa/test_curves.pyÚ
setUpClass   s    ÿz TestParameterEncoding.setUpClassc                 C   s   d}t  |¡}|  |t¡ d S )Náo  -----BEGIN EC PARAMETERS-----
MIHgAgEBMCwGByqGSM49AQECIQD/////AAAAAQAAAAAAAAAAAAAAAP/////////
//////zBEBCD/////AAAAAQAAAAAAAAAAAAAAAP///////////////AQgWsY12K
o6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEsEQQRrF9Hy4SxCR/i85uVjpEDyd
wN9gS3rM6D0oTlF2JjClk/jQuL+Gn+bjufrSnwPnhYrzjNXazFezsu2QGg3v1H1
AiEA/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVECAQE=
-----END EC PARAMETERS-----
)r   Úfrom_pemÚassertIsr   )ÚselfÚ
pem_paramsÚcurver   r   r   Útest_from_pem   s    ÿ	
z#TestParameterEncoding.test_from_pemc                 C   sT   d}|   tj¡}t |dg¡ W d   ƒ n1 s40    Y  |  dt|jƒ¡ d S )Nr   Únamed_curvezexplicit curve parameters not©ÚassertRaisesr
   ÚUnexpectedDERr   r   ÚassertInÚstrÚ	exception©r   r   Úer   r   r   Ú2test_from_pem_with_explicit_when_explicit_disabled)   s
    ÿ	,zHTestParameterEncoding.test_from_pem_with_explicit_when_explicit_disabledc                 C   sT   d}|   tj¡}t |dg¡ W d   ƒ n1 s40    Y  |  dt|jƒ¡ d S )NzK-----BEGIN EC PARAMETERS-----
BggqhkjOPQMBBw==
-----END EC PARAMETERS-----
Úexplicitz named_curve curve parameters notr   r    r   r   r   Ú8test_from_pem_with_named_curve_with_named_curve_disabled8   s
    ÿ,zNTestParameterEncoding.test_from_pem_with_named_curve_with_named_curve_disabledc                 C   sP   d}|   tj¡}t |¡ W d   ƒ n1 s00    Y  |  dt|jƒ¡ d S )Nai  -----BEGIN PARAMETERS-----
MIHgAgEBMCwGByqGSM49AQECIQD/////AAAAAQAAAAAAAAAAAAAAAP/////////
//////zBEBCD/////AAAAAQAAAAAAAAAAAAAAAP///////////////AQgWsY12K
o6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEsEQQRrF9Hy4SxCR/i85uVjpEDyd
wN9gS3rM6D0oTlF2JjClk/jQuL+Gn+bjufrSnwPnhYrzjNXazFezsu2QGg3v1H1
AiEA/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVECAQE=
-----END PARAMETERS-----
zPARAMETERS PEM headerr   r    r   r   r   Útest_from_pem_with_wrong_headerC   s
    ÿ	(z5TestParameterEncoding.test_from_pem_with_wrong_headerc                 C   s   d}t  ¡ }|  ||¡ d S )NsK   -----BEGIN EC PARAMETERS-----
BggqhkjOPQMBBw==
-----END EC PARAMETERS-----
)r   Zto_pemÚassertEqual)r   r   Úencodingr   r   r   Útest_to_pemR   s    ÿz!TestParameterEncoding.test_to_pemc                 C   s   |   td¡ d S )Né   )ÚassertNotEqualr   )r   r   r   r   Ú"test_compare_with_different_object\   s    z8TestParameterEncoding.test_compare_with_different_objectc                 C   s   t  ¡ }|  d|¡ d S )Ns
   *†HÎ=©r   Úto_derr&   ©r   Úencodedr   r   r   Útest_named_curve_params_der_   s    z1TestParameterEncoding.test_named_curve_params_derc                 C   s"   t  ¡ }t  d¡}|  ||¡ d S ©Nr   r,   )r   Zencoded_defaultZencoded_namedr   r   r   Ú+test_verify_that_default_is_named_curve_dere   s    
zATestParameterEncoding.test_verify_that_default_is_named_curve_derc                 C   s&   t  d¡}|  |tt | j¡ƒ¡ d S ©Nr#   )r   r-   r&   ÚbytesÚbase64Ú	b64decoder   r.   r   r   r   Ú test_encoding_to_explicit_paramsk   s    
z6TestParameterEncoding.test_encoding_to_explicit_paramsc                 C   s*   t  dd¡}d}|  |tt |¡ƒ¡ d S )Nr#   Ú
compresseda  MIHAAgEBMCwGByqGSM49AQECIQD/////AAAAAQAAAAAAAAAAAAAAAP///////////////zBEBCD/////AAAAAQAAAAAAAAAAAAAAAP///////////////AQgWsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEsEIQNrF9Hy4SxCR/i85uVjpEDydwN9gS3rM6D0oTlF2JjClgIhAP////8AAAAA//////////+85vqtpxeehPO5ysL8YyVRAgEB)r   r-   r&   r4   r5   r6   )r   r/   Zcompressed_base_pointr   r   r   Ú+test_encoding_to_explicit_compressed_paramsp   s    ÿÿzATestParameterEncoding.test_encoding_to_explicit_compressed_paramsc                 C   s(   d}t  tt |¡ƒ¡}|  t|¡ d S )NaP  MIH3AgEBMCwGByqGSM49AQECIQD/////AAAAAQAAAAAAAAAAAAAAAP///////////////zBbBCD/////AAAAAQAAAAAAAAAAAAAAAP///////////////AQgWsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEsDFQDEnTYIhucEk2pmeOETnSa3gZ9+kARBBGsX0fLhLEJH+Lzm5WOkQPJ3A32BLeszoPShOUXYmMKWT+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfUCIQD/////AAAAAP//////////vOb6racXnoTzucrC/GMlUQIBAQ==)r   Úfrom_derr4   r5   r6   r&   r   )r   Zp256_explicitÚdecodedr   r   r   Ú#test_decoding_explicit_from_openssl   s    ÿ	z9TestParameterEncoding.test_decoding_explicit_from_opensslc                 C   s&   t  tt | j¡ƒ¡}|  |t¡ d S ©N)r   r:   r4   r5   r6   r   r   r   )r   r   r   r   r   Ú-test_decoding_well_known_from_explicit_params   s    zCTestParameterEncoding.test_decoding_well_known_from_explicit_paramsc                 C   sN   |   t¡}t ddg¡ W d   ƒ n1 s.0    Y  |  dt|jƒ¡ d S )Nó    Z
explicitCAzOnly named_curve)r   Ú
ValueErrorr   r:   r   r   r   )r   r!   r   r   r   Ú,test_decoding_with_incorrect_valid_encodings”   s    ,zBTestParameterEncoding.test_decoding_with_incorrect_valid_encodingsc                 C   s`   t dddƒ}t|dddddd}t|dd	dddd}td
||d ƒ}td
||d ƒ}|  ||¡ d S )Né   r   é   é   é   é	   T©Ú	generatoré   Úunknown)r   r	   r   r*   )r   Úcurve_fpZbase_aZbase_bZcurve_aZcurve_br   r   r   Ú-test_compare_curves_with_different_generatorsš   s    zCTestParameterEncoding.test_compare_curves_with_different_generatorsc                 C   sj   t dddƒ}t|dddddd}td	||d ƒ}| ¡ }t |¡}|  ||¡ d
}|  |tt |¡ƒ¡ d S )NrB   r   rC   rD   rE   rF   TrG   rJ   z0MCECAQEwDAYHKoZIzj0BAQIBFzAGBAEBBAEHBAMEDQMCAQk=)	r   r	   r   r-   r:   r&   r4   r5   r6   )r   rK   Ú
base_pointr   r/   r;   Úexpectedr   r   r   Ú$test_default_encode_for_custom_curve¤   s    
z:TestParameterEncoding.test_default_encode_for_custom_curvec                 C   sx   t dddƒ}t|dddddd}td	||d ƒ}|  t¡}| d
¡ W d   ƒ n1 sX0    Y  |  dt|jƒ¡ d S )NrB   r   rC   rD   rE   rF   TrG   rJ   r   zCan't encode curve)	r   r	   r   r   r   r-   r   r   r   )r   rK   rM   r   r!   r   r   r   Ú(test_named_curve_encode_for_custom_curve´   s    (z>TestParameterEncoding.test_named_curve_encode_for_custom_curvec                 C   sT   d}|   t¡ }t t |¡¡ W d   ƒ n1 s40    Y  |  dt|jƒ¡ d S )NzÈMIGRAgEBMBwGByqGSM49AQIwEQIBcQYJKoZIzj0BAgMCAgEJMDkEDwAwiCUMpufH/mSc6Fgg9wQPAOi+5NPiJgdEGIvg6ccjAxUAEOcjqxTWluZ2h1YVF1b+v4/LSakEHwQAnXNhbzX0qxQH1zViwQ8ApSgwJ3lY7oTRMV7TGIYCDwEAAAAAAAAA2czsijnlbwIBAg==z#Characteristic 2 curves unsupported)	r   r   r   r:   r5   r6   r   r   r   )r   Zsect113r1_explicitr!   r   r   r   Ú!test_try_decoding_binary_explicit¿   s
    ÿ.z7TestParameterEncoding.test_try_decoding_binary_explicitc                 C   sb   t jtjŽ t  d¡ }|  t j¡}t |¡ W d   ƒ n1 sB0    Y  |  	dt
|jƒ¡ d S )Nr   zUnexpected data after OID)r
   Ú
encode_oidr   ÚoidÚencode_integerr   r   r   r:   r   r   r   ©r   Úbad_derr!   r   r   r   Ú!test_decode_malformed_named_curveÌ   s    (z7TestParameterEncoding.test_decode_malformed_named_curvec                 C   sf   t t | j¡ƒt d¡ }|  tj¡}t 	|¡ W d   ƒ n1 sF0    Y  |  
dt|jƒ¡ d S )Nr   z"Unexpected data after ECParameters)r4   r5   r6   r   r
   rT   r   r   r   r:   r   r   r   rU   r   r   r   Ú4test_decode_malformed_explicit_garbage_after_ECParamÔ   s    
ÿþ(zJTestParameterEncoding.test_decode_malformed_explicit_garbage_after_ECParamc                 C   s\   t  t  d¡¡}|  t j¡}t |¡ W d   ƒ n1 s<0    Y  |  dt|j	ƒ¡ d S )Né   z!Unknown parameter encoding format)
r
   Úencode_sequencerT   r   r   r   r:   r   r   r   rU   r   r   r   Ú,test_decode_malformed_unknown_version_numberÞ   s    (zBTestParameterEncoding.test_decode_malformed_unknown_version_numberc                 C   sÎ   t j ¡ }t t d¡t t ddd¡t |¡¡t t tt j 	¡ | |ƒ¡t tt j 
¡ |ƒ¡¡t t j d¡¡t t j ¡ ¡¡}|  t¡}t |¡ W d   ƒ n1 s®0    Y  |  dt|jƒ¡ d S )Nr   rY   rE   ÚuncompressedzUnknown field type: (1, 2, 3))r   r   Úpr
   rZ   rT   rR   Úencode_octet_stringr   ÚaÚbrH   Úto_bytesÚorderr   r   r   r:   r   r   r   ©r   Zcurve_prV   r!   r   r   r   Ú(test_decode_malformed_unknown_field_typeæ   s,    
ÿÿÿü
ÿð(z>TestParameterEncoding.test_decode_malformed_unknown_field_typec                 C   sÔ   t j ¡ }t t d¡t tjtŽ t |¡t d¡¡t t t	t j 
¡ | |ƒ¡t t	t j ¡ |ƒ¡¡t t j d¡¡t t j ¡ ¡¡}|  tj¡}t |¡ W d   ƒ n1 s´0    Y  |  dt|jƒ¡ d S )Nr   r\   zPrime-p element)r   r   r]   r
   rZ   rT   rR   r   r^   r   r_   r`   rH   ra   rb   r   r   r   r:   r   r   r   rc   r   r   r   Ú)test_decode_malformed_garbage_after_prime   s0    
ýÿÿü
ÿî(z?TestParameterEncoding.test_decode_malformed_garbage_after_primeN)Ú__name__Ú
__module__Ú__qualname__Úclassmethodr   r   r"   r$   r%   r(   r+   r0   r2   r7   r9   r<   r>   rA   rL   rO   rP   rQ   rW   rX   r[   rd   re   r   r   r   r   r      s0   



r   r   c                 C   s   g | ]
}|j ‘qS r   ©Úname©Ú.0Úir   r   r   Ú
<listcomp>  r?   ro   )Úidsc                 C   s    t  |  d¡¡}| |ksJ ‚d S r1   ©r   r:   r-   ©r   Úretr   r   r   Ú%test_curve_params_encode_decode_named  s    rt   c                 C   s   g | ]
}|j ‘qS r   rj   rl   r   r   r   ro   $  r?   c                 C   s    t  |  d¡¡}| |ksJ ‚d S r3   rq   rr   r   r   r   Ú(test_curve_params_encode_decode_explicit$  s    ru   c                 C   s   g | ]
}|j ‘qS r   rj   rl   r   r   r   ro   +  r?   c                 C   s   t  |  ¡ ¡}| |ksJ ‚d S r=   rq   rr   r   r   r   Ú'test_curve_params_encode_decode_default+  s    rv   c                 C   s   g | ]
}|j ‘qS r   rj   rl   r   r   r   ro   2  r?   c                 C   s"   t  |  dd¡¡}| |ksJ ‚d S )Nr#   r8   rq   rr   r   r   r   Ú3test_curve_params_encode_decode_explicit_compressed2  s    rw   )Z	unittest2ZunittestÚImportErrorr5   Zpytestr   r   r   r   r   Zellipticcurver   r	   Ú r
   Úutilr   ZTestCaser   ÚmarkZparametrizert   ru   rv   rw   r   r   r   r   Ú<module>   s(     


