a
    _Émg3  ã                   @   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	m
Z
 ddlmZmZmZ ddlmZ ddlmZ G dd„ dejƒ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Úcurve_by_name)ÚCurveFpÚPointJacobiÚ	CurveEdTw)Ú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/d0„ Zd1S )2ÚTestParameterEncodingc                 C   s
   d| _ d S )Na0  MIHgAgEBMCwGByqGSM49AQECIQD/////AAAAAQAAAAAAAAAAAAAAAP///////////////zBEBCD/////AAAAAQAAAAAAAAAAAAAAAP///////////////AQgWsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEsEQQRrF9Hy4SxCR/i85uVjpEDydwN9gS3rM6D0oTlF2JjClk/jQuL+Gn+bjufrSnwPnhYrzjNXazFezsu2QGg3v1H1AiEA/////wAAAAD//////////7zm+q2nF56E87nKwvxjJVECAQE=)Úbase64_params)Úcls© r   úH/var/www/html/idle/venv/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_disabled0   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_disabled?   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_headerJ   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_pemY   s    ÿz!TestParameterEncoding.test_to_pemc                 C   s   |   td¡ d S )Né   )ÚassertNotEqualr   )r   r   r   r   Ú"test_compare_with_different_objectc   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_derf   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_derl   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   r0   r   r   r   Ú test_encoding_to_explicit_paramsr   s    
z6TestParameterEncoding.test_encoding_to_explicit_paramsc                 C   sJ   |   t¡}t d¡ W d   ƒ n1 s*0    Y  |  dt|jƒ¡ d S )NÚunsupportedzOnly 'named_curve')r   Ú
ValueErrorr   r/   r   r    r!   ©r   r#   r   r   r   Ú!test_encoding_to_unsupported_typew   s    (z7TestParameterEncoding.test_encoding_to_unsupported_typec                 C   s*   t  dd¡}d}|  |tt |¡ƒ¡ d S )Nr%   Ú
compresseda  MIHAAgEBMCwGByqGSM49AQECIQD/////AAAAAQAAAAAAAAAAAAAAAP///////////////zBEBCD/////AAAAAQAAAAAAAAAAAAAAAP///////////////AQgWsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEsEIQNrF9Hy4SxCR/i85uVjpEDydwN9gS3rM6D0oTlF2JjClgIhAP////8AAAAA//////////+85vqtpxeehPO5ysL8YyVRAgEB)r   r/   r(   r6   r7   r8   )r   r1   Zcompressed_base_pointr   r   r   Ú+test_encoding_to_explicit_compressed_params}   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_derr6   r7   r8   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@   r6   r7   r8   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   r;   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 )NrG   r   rH   rI   rJ   rK   TrL   rO   z0MCECAQEwDAYHKoZIzj0BAQIBFzAGBAEBBAEHBAMEDQMCAQk=)	r	   r
   r   r/   r@   r(   r6   r7   r8   )r   rP   Ú
base_pointr   r1   rA   Ú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 )NrG   r   rH   rI   rJ   rK   TrL   rO   r   zCan't encode curve)	r	   r
   r   r   r   r/   r   r    r!   )r   rP   rR   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@   r7   r8   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)r6   r7   r8   r   r   rY   r   r   r   r@   r   r    r!   rZ   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_sequencerY   r   r   r   r@   r   r    r!   rZ   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   r^   rJ   ÚuncompressedzUnknown field type: (1, 2, 3))r   r   Úpr   r_   rY   rW   Úencode_octet_stringr   ÚaÚbrM   Úto_bytesÚorderr   r   r   r@   r   r    r!   ©r   Zcurve_pr[   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   ra   zPrime-p element)r   r   rb   r   r_   rY   rW   r   rc   r   rd   re   rM   rf   rg   r   r   r   r@   r   r    r!   rh   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-   r2   r4   r9   r=   r?   rB   rD   rF   rQ   rT   rU   rV   r\   r]   r`   ri   rj   r   r   r   r   r      s2   



r   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestCurveSearchingc                 C   s   t dƒ}|  |t¡ d S )Nr   ©r   r   r   ©r   Úcr   r   r   Útest_correct_name+  s    z$TestCurveSearching.test_correct_namec                 C   s   t dƒ}|  |t¡ d S )NZ
prime256v1rp   rq   r   r   r   Útest_openssl_name/  s    z$TestCurveSearching.test_openssl_namec                 C   sH   |   t¡}tdƒ W d   ƒ n1 s(0    Y  |  dt|jƒ¡ d S )Nzfoo barzFname 'foo bar' unknown, only curves supported: ['NIST192p', 'NIST224p'©r   r   r   r   r    r!   r<   r   r   r   Útest_unknown_curve3  s    &ýz%TestCurveSearching.test_unknown_curvec                 C   sH   |   t¡}td ƒ W d   ƒ n1 s(0    Y  |  dt|jƒ¡ d S )NzAname None unknown, only curves supported: ['NIST192p', 'NIST224p'ru   r<   r   r   r   Útest_with_None_as_parameter=  s    &ýz.TestCurveSearching.test_with_None_as_parameterN)rk   rl   rm   rs   rt   rv   rw   r   r   r   r   ro   *  s   
ro   r   c                 C   s   g | ]
}|j ‘qS r   ©Úname©Ú.0Úir   r   r   Ú
<listcomp>H  rE   r}   )Úidsc                 C   s    t  |  d¡¡}| |ksJ ‚d S r3   ©r   r@   r/   ©r   Úretr   r   r   Ú%test_curve_params_encode_decode_namedH  s    r‚   c                 C   s   g | ]
}|j ‘qS r   rx   rz   r   r   r   r}   O  rE   c                 C   sb   t | jtƒrBt t¡ |  d¡ W d   ƒ q^1 s60    Y  nt |  d¡¡}| |ks^J ‚d S r5   ©	Ú
isinstancer   r   ÚpytestZraisesr   r/   r   r@   r€   r   r   r   Ú(test_curve_params_encode_decode_explicitO  s
    *r†   c                 C   s   g | ]
}|j ‘qS r   rx   rz   r   r   r   r}   Z  rE   c                 C   s   t  |  ¡ ¡}| |ksJ ‚d S rC   r   r€   r   r   r   Ú'test_curve_params_encode_decode_defaultZ  s    r‡   c                 C   s   g | ]
}|j ‘qS r   rx   rz   r   r   r   r}   a  rE   c                 C   sf   t | jtƒrDt t¡ |  dd¡ W d   ƒ qb1 s80    Y  nt |  dd¡¡}| |ksbJ ‚d S )Nr%   r>   rƒ   r€   r   r   r   Ú3test_curve_params_encode_decode_explicit_compresseda  s
    ,rˆ   )Z	unittest2ZunittestÚImportErrorr7   r…   r   r   r   r   r   r   Zellipticcurver	   r
   r   Ú r   Úutilr   ZTestCaser   ro   ÚmarkZparametrizer‚   r†   r‡   rˆ   r   r   r   r   Ú<module>   s*      



