U
    ʹh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   7./venv/lib/python3.8/site-packages/ecdsa/test_curves.py
setUpClass   s    z TestParameterEncoding.setUpClassc                 C   s   d}t |}| |t d S )No  -----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 )NZ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 )NrF   r   rG   rH   rI   rJ   TrK   rN   z0MCECAQEwDAYHKoZIzj0BAQIBFzAGBAEBBAEHBAMEDQMCAQk=)	r	   r
   r   r/   r?   r(   r6   r7   r8   )r   rO   
base_pointr   r1   r@   Z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 )NrF   r   rG   rH   rI   rJ   TrK   rN   r   zCan't encode curve)	r	   r
   r   r   r   r/   r   r    r!   )r   rO   rQ   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 )NzMIGRAgEBMBwGByqGSM49AQIwEQIBcQYJKoZIzj0BAgMCAgEJMDkEDwAwiCUMpufH/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   Z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   rV   r   r   r   r?   r   r    r!   rW   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_sequencerV   r   r   r   r?   r   r    r!   rW   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[   rI   uncompressedzUnknown field type: (1, 2, 3))r   r   pr   r\   rV   rU   encode_octet_stringr   abrL   to_bytesorderr   r   r   r?   r   r    r!   r   Zcurve_prX   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   r^   zPrime-p element)r   r   r_   r   r\   rV   rU   r   r`   r   ra   rb   rL   rc   rd   r   r   r   r?   r   r    r!   re   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>   rA   rC   rE   rP   rR   rS   rT   rY   rZ   r]   rf   rg   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
prime256v1rm   rn   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'rr   r;   r   r   r   test_with_None_as_parameter=  s    z.TestCurveSearching.test_with_None_as_parameterN)rh   ri   rj   rp   rq   rs   rt   r   r   r   r   rl   *  s   
rl   r   c                 C   s   g | ]
}|j qS r   name.0ir   r   r   
<listcomp>H  s     rz   )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   ru   rw   r   r   r   rz   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   ru   rw   r   r   r   rz   Z  s     c                 C   s   t |  }| |kstd S rB   r{   r}   r   r   r   'test_curve_params_encode_decode_defaultZ  s    r   c                 C   s   g | ]
}|j qS r   ru   rw   r   r   r   rz   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   rl   ZmarkZparametrizer   r   r   r   r   r   r   r   <module>   s*      



