
    iM                     >   d dl Z d dlmZ 	 d dlZn# e$ r d dlZY nw xY wd dlZd dlmZ	 d dl
mZmZ d dlZddlmZ ddlmZmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZ  G d d	ej                   Z! G d
 dej                   Z" G d dej                   Z# G d dej                   Z$ G d dej                   Z% G d dej                   Z& G d dej                   Z' G d dej                   Z( G d dej                   Z) G d dej                   Z* G d dej                   Z+ G d dej                   Z,e	j-        d d!z  d"fd#            Z.i Z/d$ej0        v rd e/d%<    ed*i e/ e e.                      d&                         Z1d' Z2d( Z3d) Z4dS )+    N)hexlify)givensettings   )str_idx_as_int)NIST256pNIST224p)remove_integerUnexpectedDERread_lengthencode_bitstringremove_bitstringremove_object
encode_oidremove_constructedremove_implicitremove_octet_stringremove_sequenceencode_implicitc                   P    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZdS )TestRemoveIntegerc                     |                      t                    5  t          d           d d d            d S # 1 swxY w Y   d S )Ns    assertRaisesr   r
   selfs    ^/var/www/html/crypto-mining-system/backend/venv/lib/python3.11/site-packages/ecdsa/test_der.pytest_non_minimal_encodingz+TestRemoveInteger.test_non_minimal_encoding#   s    }-- 	0 	0.///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0   8<<c                     |                      t                    5  t          d           d d d            d S # 1 swxY w Y   d S )Ns   r   r   s    r   test_negative_with_high_bit_setz1TestRemoveInteger.test_negative_with_high_bit_set'   s    }-- 	, 	,?+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,r   c                     t          d          \  }}|                     |d           |                     |d           d S Ns           r
   assertEqualr   valrems      r   test_minimal_with_high_bit_setz0TestRemoveInteger.test_minimal_with_high_bit_set+   sF    !"566Sd###c"""""r%   c                     |                      t                    5  t          d           d d d            d S # 1 swxY w Y   d S )Ns     r   r   s    r   %test_two_zero_bytes_with_high_bit_setz7TestRemoveInteger.test_two_zero_bytes_with_high_bit_set1   s    }-- 	4 	42333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4r   c                     |                      t                    5  t          d           d d d            d S # 1 swxY w Y   d S )Ns    r   r   s    r   test_zero_length_integerz*TestRemoveInteger.test_zero_length_integer5   s    }-- 	( 	(;'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(r   c                     |                      t                    5  t          d           d d d            d S # 1 swxY w Y   d S Nr%   r   r   s    r   test_empty_stringz#TestRemoveInteger.test_empty_string9   s    }-- 	  	 3	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 r   c                     t          d          \  }}|                     |d           |                     |d           d S )Ns    r   r%   r&   r(   s      r   test_encoding_of_zeroz'TestRemoveInteger.test_encoding_of_zero=   sE    !/22Sa   c"""""r%   c                     t          d          \  }}|                     |d           |                     |d           d S )Ns      r%   r&   r(   s      r   test_encoding_of_127z&TestRemoveInteger.test_encoding_of_127C   sE    !/22Sc"""c"""""r%   c                     t          d          \  }}|                     |d           |                     |d           d S r#   r&   r(   s      r   test_encoding_of_128z&TestRemoveInteger.test_encoding_of_128I   sF    !"566Sc"""c"""""r%   c                     |                      t                    5 }t          d           d d d            n# 1 swxY w Y   |                     dt	          |j                             d S )Ns    zwanted type 'integer'r   r   r
   assertInstr	exceptionr   es     r   test_wrong_tagz TestRemoveInteger.test_wrong_tagO   s    }-- 	0.///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	-s1;/?/?@@@@@   7;;c                     |                      t                    5 }t          d           d d d            n# 1 swxY w Y   |                     dt	          |j                             d S )Ns    Length longerr;   r?   s     r   test_wrong_lengthz#TestRemoveInteger.test_wrong_lengthU   s    }-- 	0.///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	os1;'7'788888rB   N)__name__
__module____qualname__r   r!   r+   r-   r/   r2   r4   r7   r9   rA   rE    r%   r   r   r       s        0 0 0, , ,# # #4 4 4( ( (     # # ## # ## # #A A A9 9 9 9 9r%   r   c                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )TestReadLengthc                 L    |                      dt          d                     d S )N)r   r       r'   r   r   s    r   test_zero_lengthzTestReadLength.test_zero_length`   s&    W!5!566666r%   c                     |                      t                    5  t          d           d d d            d S # 1 swxY w Y   d S )Ns    r   r   r   r   s    r   test_two_byte_zero_lengthz(TestReadLength.test_two_byte_zero_lengthc       }-- 	% 	%$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%r   c                     |                      t                    5  t          d           d d d            d S # 1 swxY w Y   d S )Ns   rQ   r   s    r   test_two_byte_small_lengthz)TestReadLength.test_two_byte_small_lengthg   rS   r   c                     |                      t                    5  t          d           d d d            d S # 1 swxY w Y   d S )N   rQ   r   s    r   test_long_form_with_zero_lengthz.TestReadLength.test_long_form_with_zero_lengthk   s    }-- 	! 	!   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!r   c                 L    |                      dt          d                     d S )N)r$      s   rN   r   s    r   test_smallest_two_byte_lengthz,TestReadLength.test_smallest_two_byte_lengtho   s&    ;{#;#;<<<<<r%   c                     |                      t                    5  t          d           d d d            d S # 1 swxY w Y   d S )Ns    rQ   r   s    r   test_zero_padded_lengthz&TestReadLength.test_zero_padded_lengthr       }-- 	) 	)(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)r   c                 L    |                      dt          d                     d S )N)      s    rN   r   s    r   test_two_three_byte_lengthz)TestReadLength.test_two_three_byte_lengthv   s&    ;#?#?@@@@@r%   c                     |                      t                    5  t          d           d d d            d S # 1 swxY w Y   d S r1   rQ   r   s    r   r2   z TestReadLength.test_empty_stringy   s    }-- 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r   c                     |                      t                    5  t          d           d d d            d S # 1 swxY w Y   d S )Ns    rQ   r   s    r   test_length_overflowz#TestReadLength.test_length_overflow}   r^   r   N)rF   rG   rH   rO   rR   rU   rX   r[   r]   rb   r2   re   rI   r%   r   rK   rK   \   s        7 7 7% % %% % %! ! != = =) ) )A A A  ) ) ) ) )r%   rK   c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestEncodeBitstringc                 x   t          j        d           t          j        t                    5 }t          d          }ddd           n# 1 swxY w Y   |                     t          |          d           |                     d|d         j	        j
        d                    |                     |d           dS )z(This is the old way to use the function.always    Nr   zunused= needs to be specifiedr       )warningssimplefilterpytestwarnsDeprecationWarningr   r'   lenr<   messageargs)r   ro   ders      r   test_old_call_conventionz,TestEncodeBitstring.test_old_call_convention   s    h'''\,-- 	0";//C	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	UQ'''+U1X-=-B1-E	
 	
 	
 	122222s   A

AAc                     t          j                    5  t          j        d           t          dd          }ddd           n# 1 swxY w Y   |                     |d           dS )z$This is how it should be called now.error   r   Nrk   rl   catch_warningsrm   r   r'   r   rt   s     r   test_new_call_conventionz,TestEncodeBitstring.test_new_call_convention   s     $&& 	/ 	/!'***"7A..C	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	122222   %AA	A	c                     t          j                    5  t          j        d           t          dd          }ddd           n# 1 swxY w Y   |                     |d           dS )zU
        Writing bit string with already included the number of unused bits.
        rw   rj   Nrk   ry   r{   s     r   test_implicit_unused_bitsz-TestEncodeBitstring.test_implicit_unused_bits   s    
 $&& 	6 	6!'***";55C	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	122222r}   c                 R    t          dd          }|                     |d           d S )Ns      s   )r   r'   r{   s     r   test_explicit_unused_bitsz-TestEncodeBitstring.test_explicit_unused_bits   s.    {A..566666r%   c                 N    |                      t          dd          d           d S )Nr%   r   s    )r'   r   r   s    r   r2   z%TestEncodeBitstring.test_empty_string   s)    )#q11?CCCCCr%   c                     |                      t                    5  t          dd           d d d            d S # 1 swxY w Y   d S )Ns       r   
ValueErrorr   r   s    r   test_invalid_unused_countz-TestEncodeBitstring.test_invalid_unused_count   s    z** 	- 	-[!,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-   9= =c                     |                      t                    5  t          dd           d d d            d S # 1 swxY w Y   d S )Nr%   r   r   r   s    r   %test_invalid_unused_with_empty_stringz9TestEncodeBitstring.test_invalid_unused_with_empty_string   s    z** 	% 	%S!$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%r   c                     |                      t                    5  t          dd           d d d            d S # 1 swxY w Y   d S )Nrx   rZ   r   r   s    r   test_non_zero_padding_bitsz.TestEncodeBitstring.test_non_zero_padding_bits   s    z** 	) 	)Wa(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)r   N)rF   rG   rH   ru   r|   r   r   r2   r   r   r   rI   r%   r   rg   rg      s        3 3 33 3 3	3 	3 	37 7 7
D D D- - -% % %) ) ) ) )r%   rg   c                   V    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd ZdS )TestRemoveBitstringc                    t          j        d           t          j        t                    5 }t          d          \  }}ddd           n# 1 swxY w Y   |                     t          |          d           |                     d|d         j	        j
        d                    |                     |d           |                     |d           dS )	z)This is the old way to call the function.ri   rk   Nr   z$expect_unused= needs to be specifiedr   rj   r%   )rl   rm   rn   ro   rp   r   r'   rq   r<   rr   rs   )r   ro   bitsrests       r   ru   z,TestRemoveBitstring.test_old_call_convention   s   h'''\,-- 	?)*=>>JD$	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	UQ'''2E!H4D4I!4L	
 	
 	
 	{+++s#####s   AAAc                    t          j                    5  t          j        d           t          dd          \  }}d d d            n# 1 swxY w Y   |                     |d           |                     |d           d S )Nrw   rk   r   rx   r%   rl   rz   rm   r   r'   r   r   r   s      r   r|   z,TestRemoveBitstring.test_new_call_convention   s    $&& 	B 	B!'***)*=qAAJD$	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	w'''s#####   (AAAc                    t          j                    5  t          j        d           t          dd           \  }}d d d            n# 1 swxY w Y   |                     |d           |                     |d           d S )Nrw   rk   )rx   r   r%   r   r   s      r   test_implicit_unexpected_unusedz3TestRemoveBitstring.test_implicit_unexpected_unused   s    $&& 	E 	E!'***)*=tDDJD$	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	|,,,s#####r   c                     t          dd           \  }}|                     |d           |                     |d           d S )Ns   )   r   r%   )r   r'   )r   retr   s      r   test_with_paddingz%TestRemoveBitstring.test_with_padding   sH    $%8$??	Tl+++s#####r%   c                     |                      t                    5  t          dd            d d d            d S # 1 swxY w Y   d S )Ns    r   r   r   r   s    r   test_not_a_bitstringz(TestRemoveBitstring.test_not_a_bitstring       }-- 	8 	80$777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8r   c                     |                      t                    5  t          dd            d d d            d S # 1 swxY w Y   d S )Ns    r   r   s    r   test_empty_encodingz'TestRemoveBitstring.test_empty_encoding   s    }-- 	0 	0[$///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0r   c                     |                      t                    5  t          dd            d d d            d S # 1 swxY w Y   d S r1   r   r   s    r   r2   z%TestRemoveBitstring.test_empty_string   s    }-- 	( 	(S$'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(r   c                     |                      t                    5  t          dd            d d d            d S # 1 swxY w Y   d S )N   r   r   s    r   test_no_lengthz"TestRemoveBitstring.test_no_length   s    }-- 	, 	,Wd+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,r   c                     |                      t                    5  t          dd           d d d            d S # 1 swxY w Y   d S )Nrk   r   r   r   s    r   %test_unexpected_number_of_unused_bitsz9TestRemoveBitstring.test_unexpected_number_of_unused_bits   s    }-- 	5 	50!444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5r   c                     |                      t                    5  t          dd            d d d            d S # 1 swxY w Y   d S )Ns    r   r   s    r   $test_invalid_encoding_of_unused_bitsz8TestRemoveBitstring.test_invalid_encoding_of_unused_bits   s    }-- 	< 	<4d;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<r   c                     |                      t                    5  t          dd            d d d            d S # 1 swxY w Y   d S )Ns   r   r   s    r   %test_invalid_encoding_of_empty_stringz9TestRemoveBitstring.test_invalid_encoding_of_empty_string   s    }-- 	4 	4_d333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4r   c                     |                      t                    5  t          dd            d d d            d S # 1 swxY w Y   d S )Ns   r   r   s    r   test_invalid_padding_bitsz-TestRemoveBitstring.test_invalid_padding_bits   r   r   N)rF   rG   rH   ru   r|   r   r   r   r   r2   r   r   r   r   r   rI   r%   r   r   r      s        $ $ $$ $ $$ $ $$ $ $8 8 80 0 0( ( (, , ,5 5 5< < <4 4 48 8 8 8 8r%   r   c                        e Zd Zd Zd Zd ZdS )TestStrIdxAsIntc                 N    |                      dt          dd                     d S )Ns   r=   r   r'   r   r   s    r   test_strzTestStrIdxAsInt.test_str  s(    nUA6677777r%   c                 N    |                      dt          dd                     d S Nr   s   strr   r   r   s    r   
test_byteszTestStrIdxAsInt.test_bytes  s(    nVQ7788888r%   c                 h    |                      dt          t          d          d                     d S r   )r'   r   	bytearrayr   s    r   test_bytearrayzTestStrIdxAsInt.test_bytearray  s0    nYv->->BBCCCCCr%   N)rF   rG   rH   r   r   r   rI   r%   r   r   r     sF        8 8 89 9 9D D D D Dr%   r   c                   J    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )TestEncodeOidc                 t    t          dddddd          }|                     t          |          d           d S )Nr   rZ   H  ='  s   06072a8648ce3d0201)r   r'   r   )r   oid_ecPublicKeys     r   test_pub_key_oidzTestEncodeOid.test_pub_key_oid  s>    $Q3q!<<113HIIIIIr%   c                 `    |                      t          t          j                  d           d S )Ns   06052b81040021)r'   r   r	   encoded_oidr   s    r   test_nist224p_oidzTestEncodeOid.test_nist224p_oid  s*    !5668IJJJJJr%   c                 `    |                      t          t          j                  d           d S )Ns   06082a8648ce3d030107)r'   r   r   r   r   s    r   test_nist256p_oidzTestEncodeOid.test_nist256p_oid  s5    H())+B	
 	
 	
 	
 	
r%   c                 T    t          ddd          }|                     |d           d S )NrZ     ra      7r   r'   r   oids     r   test_large_second_subidz%TestEncodeOid.test_large_second_subid  s0    C##566666r%   c                 R    t          dd          }|                     |d           d S )NrZ   r      7r   r   s     r   test_with_two_subidsz"TestEncodeOid.test_with_two_subids!  s.    C  122222r%   c                 R    t          dd          }|                     |d           d S )Nr       r   r   s     r   test_zero_zerozTestEncodeOid.test_zero_zero%  s-    Ao.....r%   c                     |                      t          t          f          5  t          dd            d d d            d S # 1 swxY w Y   d S )Nr   )r   	TypeErrorAssertionErrorr   r   s    r   test_with_wrong_typesz#TestEncodeOid.test_with_wrong_types)  s    	>:;; 	  	 q$	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   A  AAc                     |                      t                    5  t          dd           d d d            d S # 1 swxY w Y   d S )Nr   (   r   r   r   r   s    r   "test_with_small_first_large_secondz0TestEncodeOid.test_with_small_first_large_second-      ~.. 	 	q"	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r   c                 R    t          dd          }|                     |d           d S )Nr   '   s   Or   r   s     r   test_small_first_max_secondz)TestEncodeOid.test_small_first_max_second1  s-    Bo.....r%   c                     |                      t                    5  t          dd           d d d            d S # 1 swxY w Y   d S )Nra   r   r   r   s    r   test_with_invalid_firstz%TestEncodeOid.test_with_invalid_first5  r   r   N)rF   rG   rH   r   r   r   r   r   r   r   r   r   r   rI   r%   r   r   r     s        J J JK K K
 
 

7 7 7
3 3 3/ / /       / / /    r%   r   c                   x    e Zd Zed             Zd Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd ZdS )TestRemoveObjectc                 8    t          dddddd          | _        d S )Nr   rZ   r   r   )r   r   clss    r   
setUpClasszTestRemoveObject.setUpClass;  s"    (AsE1a@@r%   c                     t          | j                  \  }}|                     |d           |                     |d           d S )Nr%   r   rZ   r   r   rZ   r   r   r   r'   r   r   r   s      r   r   z!TestRemoveObject.test_pub_key_oid?  sI    !$"677	Ts###677777r%   c                     t          | j        dz             \  }}|                     |d           |                     |d           d S )Ns   morer   r   r   s      r   test_with_extra_bytesz&TestRemoveObject.test_with_extra_bytesD  sN    !$"6"@AA	Tw'''677777r%   c                     t          d          \  }}|                     |d           |                     |d           d S )Nr   r%   )rZ   r   ra   r   r'   r   s      r   test_with_large_second_subidz-TestRemoveObject.test_with_large_second_subidI  sF    !"9::	Ts###k*****r%   c                     |                      t                    5  t          d           d d d            d S # 1 swxY w Y   d S )Ns    r   r   r   r   s    r   test_with_padded_first_subidz-TestRemoveObject.test_with_padded_first_subidO      }-- 	/ 	/-...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/r   c                     |                      t                    5  t          d           d d d            d S # 1 swxY w Y   d S )Ns   7r   r   s    r   test_with_padded_second_subidz.TestRemoveObject.test_with_padded_second_subidS  s    }-- 	7 	75666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7r   c                     |                      t                    5  t          d           d d d            d S # 1 swxY w Y   d S )Ns   7r   r   s    r   )test_with_missing_last_byte_of_multi_bytez:TestRemoveObject.test_with_missing_last_byte_of_multi_byteW  s    }-- 	3 	31222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3r   c                     t          d          \  }}|                     |d           |                     |d           d S )Nr   r%   )rZ   r   r   r   s      r   r   z%TestRemoveObject.test_with_two_subids[  sF    !"566	Ts###h'''''r%   c                     t          d          \  }}|                     |d           |                     |d           d S )Nr   r%   )r   r   r   r   s      r   r   zTestRemoveObject.test_zero_zero`  sE    !/22	Ts###f%%%%%r%   c                     |                      t                    5  t          d           d d d            d S # 1 swxY w Y   d S r1   r   r   s    r   r2   z"TestRemoveObject.test_empty_stringe  s    }-- 	 	#	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r   c                     |                      t                    5  t          d           d d d            d S # 1 swxY w Y   d S )N   r   r   s    r   test_missing_lengthz$TestRemoveObject.test_missing_lengthi  s    }-- 	# 	#'"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#r   c                     |                      t                    5  t          d           d d d            d S # 1 swxY w Y   d S )Ns    r   r   s    r   test_empty_oidzTestRemoveObject.test_empty_oidm      }-- 	' 	'+&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'r   c                     |                      t                    5  t          d           d d d            d S # 1 swxY w Y   d S )Ns   r   r   s    r   test_empty_oid_overflowz(TestRemoveObject.test_empty_oid_overflowq  r  r   c                     |                      t                    5  t          d           d d d            d S # 1 swxY w Y   d S )Ns   7r   r   s    r   test_with_wrong_typez%TestRemoveObject.test_with_wrong_typeu  r   r   c                     |                      t                    5  t          d           d d d            d S # 1 swxY w Y   d S )Ns   7r   r   s    r   test_with_too_long_lengthz*TestRemoveObject.test_with_too_long_lengthy  r   r   N)rF   rG   rH   classmethodr   r   r   r   r   r   r   r   r   r2   r   r   r  r  r  rI   r%   r   r   r   :  s       A A [A8 8 8
8 8 8
+ + +/ / /7 7 73 3 3( ( (
& & &
  # # #' ' '' ' '/ / // / / / /r%   r   c                       e Zd Zd Zd ZdS )TestRemoveConstructedc                     d}t          |          \  }}}|                     |d           |                     |d           |                     |d           d S )Ns   r      r%   )r   r'   r   datatagbodyr   s        r   test_simplez!TestRemoveConstructed.test_simple  sb    ",T22T4d###{+++s#####r%   c                     d}|                      t                    5 }t          |           d d d            n# 1 swxY w Y   |                     dt	          |j                             d S )Ns   zconstructed tag)r   r   r   r<   r=   r>   r   r  r@   s      r   test_with_malformed_tagz-TestRemoveConstructed.test_with_malformed_tag  s    "}-- 	%t$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	'Q[)9)9:::::   9= =NrF   rG   rH   r  r  rI   r%   r   r
  r
  ~  s2        $ $ $; ; ; ; ;r%   r
  c                   T    e Zd Zed             Zd Zd Zd Zd Zd Z	d Z
d Zd	 Zd
S )TestRemoveImplicitc                 L    d| _         d| _        d| _        d| _        d| _        d S )N      
   F
   
   
)exp_tagexp_datadata_applicationdata_context_specificdata_privater   s    r   r   zTestRemoveImplicit.setUpClass  s.    "2$7!.r%   c                     t          | j                  \  }}}|                     || j                   |                     || j                   |                     |d           d S r1   r   r"  r'   r  r   r   r  r  r   s       r   r  zTestRemoveImplicit.test_simple  sd    )$*DEET4dl+++t}---s#####r%   c                     |                      t                    5 }t          | j        d           d d d            n# 1 swxY w Y   |                     dt          |j                             d S )Nfoobarzinvalid `exp_class` value)r   r   r   r"  r<   r=   r>   r?   s     r   test_wrong_expected_classz,TestRemoveImplicit.test_wrong_expected_class  s    z** 	BaD6AAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	13q{3C3CDDDDD   =AAc                     |                      t                    5 }t          | j                   d d d            n# 1 swxY w Y   |                     dt          |j                             d S )Nz+wanted class context-specific, got 0x46 tag)r   r   r   r!  r<   r=   r>   r?   s     r   test_with_wrong_classz(TestRemoveImplicit.test_with_wrong_class  s    }-- 	3D1222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	93q{;K;K	
 	
 	
 	
 	
s   <A A c                     t          | j        d          \  }}}|                     || j                   |                     || j                   |                     |d           d S )Napplicationr%   )r   r!  r'   r  r   r&  s       r   test_with_application_classz.TestRemoveImplicit.test_with_application_class  sf    )$*?OOT4dl+++t}---s#####r%   c                     t          | j        d          \  }}}|                     || j                   |                     || j                   |                     |d           d S )Nprivater%   )r   r#  r'   r  r   r&  s       r   test_with_private_classz*TestRemoveImplicit.test_with_private_class  sf    )$*;YGGT4dl+++t}---s#####r%   c                     d}t          | j        |z             \  }}}|                     || j                   |                     || j                   |                     ||           d S )Ns    r%  )r   
extra_datar  r  r   s        r   test_with_data_followingz+TestRemoveImplicit.test_with_data_following  su     
)&3
 
T4 	dl+++t}---z*****r%   c                     d}|                      t                    5 }t          |           d d d            n# 1 swxY w Y   |                     dt	          |j                             d S )Ns   
z#wanted type primitive, got 0xa6 tag)r   r   r   r<   r=   r>   r  s      r   test_with_constructedz(TestRemoveImplicit.test_with_constructed  s    "}-- 	"D!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	;S=M=MNNNNNr  c                     d}t          t          d|d          d          \  }}}|                     |d           |                     ||           |                     |d           d S )Ns   some longish stringr  r.  r%   )r   r   r'   r  s        r   test_encode_decodez%TestRemoveImplicit.test_encode_decode  sw    %)At]33]
 
T4 	a   t$$$s#####r%   N)rF   rG   rH   r  r   r  r)  r,  r/  r2  r5  r7  r9  rI   r%   r   r  r    s        / / [/$ $ $E E E
 
 
$ $ $$ $ $	+ 	+ 	+O O O	$ 	$ 	$ 	$ 	$r%   r  c                   H    e Zd Zed             Zd Zd Zd Zd Zd Z	d Z
dS )	TestEncodeImplicitc                 >    d| _         d| _        d| _        d| _        d S )Nr  r  r  r  )r  r!  r"  r#  r   s    r   r   zTestEncodeImplicit.setUpClass  s'    2$7!.r%   c                 f    t          d| j                  }|                     || j                   d S )Nr  r   r  r'   r"  r   r   s     r   test_encode_with_default_classz1TestEncodeImplicit.test_encode_with_default_class  s2    a++d899999r%   c                 h    t          d| j        d          }|                     || j                   d S )Nr  r.  )r   r  r'   r!  r?  s     r   "test_encode_with_application_classz5TestEncodeImplicit.test_encode_with_application_class  s4    aM::d344444r%   c                 h    t          d| j        d          }|                     || j                   d S )Nr  zcontext-specificr>  r?  s     r   'test_encode_with_context_specific_classz:TestEncodeImplicit.test_encode_with_context_specific_class  s5    a,>??d899999r%   c                 h    t          d| j        d          }|                     || j                   d S )Nr  r1  )r   r  r'   r#  r?  s     r   test_encode_with_private_classz1TestEncodeImplicit.test_encode_with_private_class  s4    aI66d/00000r%   c                     |                      t                    5 }t          d| j        d           d d d            n# 1 swxY w Y   |                     dt          |j                             d S )Nr  r(  zinvalid tag classr   r   r   r  r<   r=   r>   r?   s     r   test_encode_with_invalid_classz1TestEncodeImplicit.test_encode_with_invalid_class  s    z** 	4aAty(333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	)3q{+;+;<<<<<s   >AAc                     |                      t                    5 }t          d| j                   d d d            n# 1 swxY w Y   |                     dt          |j                             d S )N    zLong tags not supportedrH  r?   s     r   test_encode_with_too_large_tagz1TestEncodeImplicit.test_encode_with_too_large_tag  s    z** 	+aB	***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	/Q[1A1ABBBBBr*  N)rF   rG   rH   r  r   r@  rB  rD  rF  rI  rL  rI   r%   r   r;  r;    s        / / [/: : :
5 5 5
: : :
1 1 1
= = =C C C C Cr%   r;  c                       e Zd Zd Zd ZdS )TestRemoveOctetStringc                     d}t          |          \  }}|                     |d           |                     |d           d S )Ns   s   r%   )r   r'   r   r  r  r   s       r   r  z!TestRemoveOctetString.test_simple  sJ    &(..
d///s#####r%   c                     d}|                      t                    5 }t          |           d d d            n# 1 swxY w Y   |                     dt	          |j                             d S )Ns   octetstring)r   r   r   r<   r=   r>   r  s      r   r  z-TestRemoveOctetString.test_with_malformed_tag  s    &}-- 	&%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	mS%5%566666r  Nr  rI   r%   r   rN  rN    s2        $ $ $7 7 7 7 7r%   rN  c                   &    e Zd Zd Zd Zd Zd ZdS )TestRemoveSequencec                     d}t          |          \  }}|                     |d           |                     |d           d S )Ns   0r  r%   )r   r'   rP  s       r   r  zTestRemoveSequence.test_simple  sJ    "$T**
d{+++s#####r%   c                     |                      t                    5 }t          d           d d d            n# 1 swxY w Y   |                     dt	          |j                             d S )Nr%   zEmpty stringr   r   r   r<   r=   r>   r?   s     r   test_with_empty_stringz)TestRemoveSequence.test_with_empty_string!  s    }-- 	!C   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	nc!+&6&677777rB   c                     d}|                      t                    5 }t          |           d d d            n# 1 swxY w Y   |                     dt	          |j                             d S )Ns    zwanted type 'sequence'rW  r  s      r   test_with_wrong_tagz&TestRemoveSequence.test_with_wrong_tag'  s    "}-- 	"D!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	.AK0@0@AAAAAr  c                     d}|                      t                    5 }t          |           d d d            n# 1 swxY w Y   |                     dt	          |j                             d S )Ns   0rD   rW  r  s      r   test_with_wrong_lengthz)TestRemoveSequence.test_with_wrong_length/  s    "}-- 	"D!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	os1;'7'788888r  N)rF   rG   rH   r  rX  rZ  r\  rI   r%   r   rT  rT    sS        $ $ $8 8 8B B B9 9 9 9 9r%   rT  rZ   i   2   c                 X    | t          j        dd                    }|dk     r  | t          j        dd                    }n | t          j        d|                    } | t          j        t          j        d|          |                    }||ft          |          z   S )z
    Hypothesis strategy that returns valid OBJECT IDENTIFIERs as tuples

    :param max_value: maximum value of any single sub-identifier
    :param max_size: maximum length of the generated OID
    r   rZ   )	min_value	max_valuer   )max_size)stintegersliststuple)drawr`  ra  firstsecondr   s         r   st_oidri  8  s     DqA66677EqyybkA<<<==bkACCCDD4
K!y999H	
 	
 	
 D
 6?U4[[((r%   z--fastmax_examplesc                 \    t          |  }t          |          \  }}|dk    sJ || k    sJ d S r1   )r   r   )idsr   decoded_oidr   s       r   	test_oidsrn  T  sD     c"K%k22K3;;;;#r%   c                      d} t          j        t          d          5  t          |            d d d            d S # 1 swxY w Y   d S )Ns    ABC&Length longer than the provided buffermatch)rn   raisesr   r   bads    r   1test_remove_octet_string_rejects_truncated_lengthrv  \  s    
&C	},T	U	U	U ! !C   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !   ;??c                      d} t          j        t          d          5  t          |            d d d            d S # 1 swxY w Y   d S )Ns    ABCrp  rq  )rn   rs  r   r   rt  s    r   0test_remove_constructed_rejects_truncated_lengthry  b  s     'C	},T	U	U	U    3                                   rw  c                      d} t          j        t          d          5  t          |            d d d            d S # 1 swxY w Y   d S )Ns    ABCrp  rq  )rn   rs  r   r   rt  s    r   -test_remove_implicit_rejects_truncated_lengthr{  i  s     'C	},T	U	U	U                   rw  rI   )5rl   binasciir   	unittest2unittestImportErrorsyshypothesis.strategies
strategiesrb  
hypothesisr   r   rn   _compatr   curvesr   r	   rt   r
   r   r   r   r   r   r   r   r   r   r   r   TestCaser   rK   rg   r   r   r   r   r
  r  r;  rN  rT  	compositeri  HYP_SETTINGSargvrn  rv  ry  r{  rI   r%   r   <module>r     sb                 OOOOO 



 " " " " " " & & & & & & & &  # # # # # # & & & & & & & &                            99 99 99 99 99) 99 99 99x#) #) #) #) #)X& #) #) #)L7) 7) 7) 7) 7)(+ 7) 7) 7)tE8 E8 E8 E8 E8(+ E8 E8 E8PD D D D Dh' D D D( ( ( ( (H% ( ( (VA/ A/ A/ A/ A/x( A/ A/ A/H; ; ; ; ;H- ; ; ;&K$ K$ K$ K$ K$* K$ K$ K$\)C )C )C )C )C* )C )C )CX7 7 7 7 7H- 7 7 79 9 9 9 9* 9 9 9< c6B ) ) ) )(  sx#$L  
Lvvxx   ! ! !         s    	