U
    Ÿ#°i3  ã                   @   s>  zd dl ZW n ek
r(   d dlZY nX 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   úY/var/www/html/me.goteku.com/backend/venv/lib/python3.8/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   s@   d}|   tj¡}t |dg¡ W 5 Q R X |  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   s@   d}|   tj¡}t |dg¡ W 5 Q R X |  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   s<   d}|   tj¡}t |¡ W 5 Q R X |  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   s6   |   t¡}t d¡ W 5 Q R X |  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   s:   |   t¡}t ddg¡ W 5 Q R X |  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   sd   t dddƒ}t|dddddd}td	||d ƒ}|  t¡}| d
¡ W 5 Q R X |  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   s@   d}|   t¡}t t |¡¡ W 5 Q R X |  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   sN   t jtjŽ t  d¡ }|  t j¡}t |¡ W 5 Q R X |  	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   sR   t t | j¡ƒt d¡ }|  tj¡}t 	|¡ W 5 Q R X |  
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   sH   t  t  d¡¡}|  t j¡}t |¡ W 5 Q R X |  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 5 Q R X |  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 5 Q R X |  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   s4   |   t¡}tdƒ W 5 Q R X |  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   s4   |   t¡}td ƒ W 5 Q R X |  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  s     r}   )Zidsc                 C   s    t  |  d¡¡}| |kst‚d S r3   ©r   r@   r/   ÚAssertionError©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  s     c              	   C   sN   t | jtƒr.t t¡ |  d¡ W 5 Q R X nt |  d¡¡}| |ksJt	‚d S r5   ©
Ú
isinstancer   r   ÚpytestZraisesr   r/   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  s     c                 C   s   t  |  ¡ ¡}| |kst‚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  s     c              	   C   sR   t | jtƒr0t t¡ |  dd¡ W 5 Q R X nt |  dd¡¡}| |ksNt	‚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*      



