o
    er                     @   s   d Z ddlZddlT ddlmZmZmZmZmZm	Z	m
Z
mZ G dd dejZG dd dejZG d	d
 d
ejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZi fddZedkr|dd Zejdd dS dS )z#Self-tests for Cryptodome.Util.asn1    N)*)	DerObjectDerSetOf
DerIntegerDerBitStringDerObjectIdDerNullDerOctetStringDerSequencec                   @   s|   e Z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 )DerObjectTestsc                 C   s$   |  tttd |  ttd d S )Nu       )assertRaises
ValueErrorr   b)self r   D/usr/lib/python3/dist-packages/Cryptodome/SelfTest/Util/test_asn1.pytestObjInit1.   s   zDerObjectTests.testObjInit1c                 C   s   t td}| | td td|_| | td | | td t d}td|_| | td t tddd	}| | td
 d S )N EzE   zET)constructed0 )r   r   assertEqualsencodepayloadr   derr   r   r   testObjEncode16   s   

zDerObjectTests.testObjEncode1c                 C   s&   t dtd}| | td d S )N   zz)r   r   r   r   r   r   r   r   testObjEncode2G   s   zDerObjectTests.testObjEncode2c                 C   s2   t td}tdd |_| | td d S )Nr   0   u   00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000r   r   r   r   r   r   r   r   r   testObjEncode3L   s   zDerObjectTests.testObjEncode3c                 C   s\   t dddd}td|_| | td t ddd	d}td|_| | td
 d S )N      T)implicitr   ppllu   ¡ppll      Fu   ppllr%   r   r   r   r   testObjEncode4R   s   

zDerObjectTests.testObjEncode4c                 C   s.   t ddd}td|_| | td d S )Nr'      explicitxxll	   ¥xxll)r   r   r   assertEqualr   r   r   r   r   testObjEncode5\   s   
zDerObjectTests.testObjEncode5c                 C   s:   t d}|td | |jtd | |jd d S )Nr+   r   decoder   r   r   
_tag_octetr   r   r   r   testObjDecode1d   s   zDerObjectTests.testObjDecode1c                 C   s>   t d}|td | |jtdd  | |jd d S )Nr+   u   111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111r$   r7   r   r   r   r   testObjDecode2k   s   zDerObjectTests.testObjDecode2c                 C   s<   t d}| t|jtd t d}| t|jtd d S )Nr+   u   ÿzr   r   r   r8   r   r   r   r   r   testObjDecode3r   s   zDerObjectTests.testObjDecode3c                 C   s   t dddd}| t|jtd |td | |jtd t dddd}| t|jtd |td	 | |jtd d S )
Nr+   F   )r   r)   r5   u     Tu   ¯ )r   r   r   r8   r   r   r   r   r   r   r   testObjDecode4z   s   zDerObjectTests.testObjDecode4c                 C   s    t d}| t|jtd d S )Nr+   zr=   r   r   r   r   testObjDecode5   s   zDerObjectTests.testObjDecode5c                 C   s8   t  }|td | |jd | |jtd d S )Nu   ee      )r   r8   r   r   r9   r   r   r   r   r   testObjDecode6   s   zDerObjectTests.testObjDecode6c                 C   sx   t ddd}|td | |jd | |jtd t ddd}|td | |jd | |jtd d S )Nr'   r.   r/   r2   r1   r   u	    xxll)r   r8   r   r   _inner_tag_octetr   r   r   r   r   testObjDecode7   s   zDerObjectTests.testObjDecode7c                 C   s"   t d}| ||td d S )Nr+   r5   )r   r3   r8   r   r   r   r   r   testObjDecode8   s   zDerObjectTests.testObjDecode8N)__name__
__module____qualname__r   r    r"   r&   r-   r4   r:   r<   r>   rA   rB   rE   rG   rH   r   r   r   r   r   ,   s    
r   c                   @   st   e Z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 )DerIntegerTestsc                 C       t d}| | td d S )Nr(   r   r   r   r   r   r   r   r   	testInit1      zDerIntegerTests.testInit1c                 C   X   t d}| | td t d}| | td t d}| | td d S )Nr    r(   rN      rO   r   r   r   r   testEncode1      zDerIntegerTests.testEncode1c                 C   s   t d}| | td t d}| | td t dd }| | tdtd td td td td td td td td td td td td td td td td td	  d S )
Nr$   u         r+                                	         rO   r   r   r   r   testEncode2   sX   
	
zDerIntegerTests.testEncode2c                 C   rR   )N   ÿiu   iu   þ¨¿rO   r   r   r   r   testEncode3   rW   zDerIntegerTests.testEncode3c                 C   s$   t ddd}| | td d S )N4   r!   r/      £4rO   r   numberr   r   r   testEncode4   s   zDerIntegerTests.testEncode4c                 C   ^   t  }|td | |jd |td | |jd |td | |jd d S )NrS   r   rN   r(   rU   rT   r   r8   r   r   valuer   r   r   r   testDecode1      zDerIntegerTests.testDecode1c                 C   s   t  }|td | |jd |tdtd td td td td td td td td td td td td td td td td td  | |jdd  d S )NrY   rX   r[   r\   r]   r+   rZ   rh   r   r   r   r   testDecode2   sV   	
zDerIntegerTests.testDecode2c                 C   sB   t  }|td | |jd |td | |jd d S )Nr`   r_   u    i rh   r   r   r   r   testDecode3  s
   zDerIntegerTests.testDecode3c                 C   rg   )Nz r(   u   ÿÿr_   r   r   rh   r   r   r   r   testDecode5  rk   zDerIntegerTests.testDecode5c                 C   s*   t dd}|td | |jd d S )Nr!   r/   rc   rb   rh   rd   r   r   r   testDecode6)  s   
zDerIntegerTests.testDecode6c                 C       t  }| ||td d S )NrU   )r   r   r8   r   r   r   r   r   testDecode7/     zDerIntegerTests.testDecode7c                 C   sF   t  }|d |d | jt|jddd | jt|jddd d S )Ns    s    T)strict)r   r8   r   r   rd   r   r   r   testStrict16  s
   

zDerIntegerTests.testStrict1c                 C      t  }| t|jtd d S )Nu   )r   r   r   r8   r   r   r   r   r   testErrDecode1@     zDerIntegerTests.testErrDecode1N)rI   rJ   rK   rP   rV   r^   ra   rf   rj   rl   rm   rn   ro   rq   rt   rv   r   r   r   r   rL      s    

rL   c                   @   s   e Z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 ),DerSequenceTestsc                 C   s.   t dtdtdg}| | td d S )Nr(   r+   r   z
00 )r
   r   r   r   r   r   r   r   r   rP   H  s   zDerSequenceTests.testInit1c                 C   s   t  }| | td | |  |d | | td | | d | |dd | |  | |d | | td d S )Nr   r   0 r(   F)	r
   r   r   r   failIfhasOnlyIntsappendhasInts
failUnlessr   r   r   r   rV   L  s   
zDerSequenceTests.testEncode1c                 C   s   t  }|d d|d< | t|d | |d d | |d d | | td dg|d d < | t|d | |d d | | td d S )Nr   r(   r_   z0)r
   r|   r   lenr   r   r   r   r   r   r^   [  s   
zDerSequenceTests.testEncode2c                 C   s(   t  }|d | | td d S )NrX   u   0r
   r|   r   r   r   r   r   r   r   ra   j     
zDerSequenceTests.testEncode3c                 C   s   t  }|dd  | | tdtd td td td td td td td td td td td td td td td td td td  d S )Nr+   rZ      0r[   r\   r]   r   r   r   r   r   rf   p  sR   	

zDerSequenceTests.testEncode4c                 C   s2   t  }|d7 }|td7 }| | td d S )Nr(   r   z00 )r
   r   r   r   r   r   r   r   testEncode5  s   zDerSequenceTests.testEncode5c                 C   s*  t  }|d |d | | td | |  | |d t  }|d |d | | td | | d | |dd | |  | |d |d d	d
g|dd < | t	|d | 
|dd  d	d
g | 
|dd d	g | | td d S )NrX         0 ÿFr+   u	   0þr(   	      r!   r_   z0		)r
   r|   r   r   r   r~   r{   r}   rz   r   r3   r   r   r   r   testEncode6  s(   




zDerSequenceTests.testEncode6c                 C   sD   t  }|d |td | | td | |  d S )NrX   z0   0	0)r
   r|   r   r   r   rz   r{   r   r   r   r   testEncode7  s
   
zDerSequenceTests.testEncode7c                 C   sF   t  }|d |t dg | | td | |  d S )NrX   r.   r   )r
   r|   r   r   r   rz   r{   r   r   r   r   testEncode8  s
   
zDerSequenceTests.testEncode8c                 C   s   t  }|td | t|d |td | t|d | |d d |td | t|d | |d d d S )Nr   r   ry   r(   r
   r8   r   r   r   r   r   r   r   rj     s   zDerSequenceTests.testDecode1c                 C   s8   t  }|td | t|d | |d d d S )Nz0r(   r   rT   r   r   r   r   r   rl     s   zDerSequenceTests.testDecode2c                 C   s   t  }|tdtd td td td td td td td td td td td td td td td td td td  | t|d | |d dd  d S )	Nr   r[   r\   r]   r(   r   r+   rZ   r   r   r   r   r   testDecode4  sT   
	
zDerSequenceTests.testDecode4c                 C   sH   t  }|td | t|d | |d d | |d d d S )Nr   r+   r   rX   r(   r   r   r   r   r   r   ro     s
   zDerSequenceTests.testDecode6c                 C   s`   t  }|td | t|d | |d d | |d td | |d td d S )	N   0
$¶c r!   r   rX   r(      $¶cr+    r   r   r   r   r   rq     s   zDerSequenceTests.testDecode7c                 C   s   t  }|td | t|d | |d td | |d td | | d | |dd | |  | |d d S )N	   0$¶c r+   r   r   r(   r   F)r
   r8   r   r   r   r}   rz   r{   r   r   r   r   testDecode8  s   zDerSequenceTests.testDecode8c                 C   rp   )Nr   )r
   r3   r8   r   r   r   r   r   testDecode9  rr   zDerSequenceTests.testDecode9c                 C   F   t  }| t|jtd | t|jtd | t|jtd d S )N r@   r#   r
   r   r   r8   r   r   r   r   r   rv     s   zDerSequenceTests.testErrDecode1c                 C   ru   )Nz0  r   r   r   r   r   testErrDecode2  s   zDerSequenceTests.testErrDecode2c                 C   r   )Nz0 u   0u   0r   r   r   r   r   testErrDecode3  s   zDerSequenceTests.testErrDecode3c                 C   s`   t g d }t  j|dd t  j|dd | jtt  j|dd | jtt  j|dd d S )Nr(   r+   r!   r!   )nr_elements)r+   r!   r(   )r   r.   r
   r   r8   r   r   )r   der_binr   r   r   test_expected_nr_elements"  s
   z*DerSequenceTests.test_expected_nr_elementsc                 C   st   t g d }t ddt ddgg }t  j|dd t  j|dd t  j|dd | jtt  j|dd d S )	Nr   r(   r+   r!   r   T)only_ints_expectedFr   )r   der_bin1der_bin2r   r   r   test_expected_only_integers*  s   z,DerSequenceTests.test_expected_only_integersN)rI   rJ   rK   rP   rV   r^   ra   rf   r   r   r   r   rj   rl   r   ro   rq   r   r   rv   r   r   r   r   r   r   r   r   rx   F  s,    
		rx   c                   @   4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )DerOctetStringTestsc                 C   $   t td}| | td d S )N   ÿu   ÿ)r	   r   r   r   r   r   r   r   rP   7     zDerOctetStringTests.testInit1c                 C   s<   t  }| | td td|_| | td d S )N r6   )r	   r   r   r   r   r   r   r   r   rV   ;  s   
zDerOctetStringTests.testEncode1c                 C   J   t  }|td | |jtd |td | |jtd d S )Nr   r   r   r6   )r	   r8   r   r   r   r   r   r   r   rj   E  
   zDerOctetStringTests.testDecode1c                 C   rp   )Nr   )r	   r3   r8   r   r   r   r   r   rl   N  rr   zDerOctetStringTests.testDecode2c                 C   ru   )Nu   ÿ)r	   r   r   r8   r   r   r   r   r   rv   S  rw   z"DerOctetStringTests.testErrDecode1N)rI   rJ   rK   rP   rV   rj   rl   rv   r   r   r   r   r   5  s    
	r   c                   @   s   e Zd Zdd Zdd ZdS )DerNullTestsc                 C   s   t  }| | td d S Nz )r   r   r   r   r   r   r   r   rV   Z  s   zDerNullTests.testEncode1c                 C   rp   r   )r   r   r8   r   r   r   r   r   rj   `  rr   zDerNullTests.testDecode1N)rI   rJ   rK   rV   rj   r   r   r   r   r   X  s    r   c                   @   r   )DerObjectIdTestsc                 C   rM   )Nz1.1z))r   r   r   r   r   r   r   r   rP   g  rQ   zDerObjectIdTests.testInit1c                 C   s@   t d}| | td t  }d|_| | td d S )N1.2.840.113549.1.1.1   	*H÷)r   r   r   r   ri   r   r   r   r   rV   k  s
   zDerObjectIdTests.testEncode1c                 C   &   t  }|td | |jd d S )Nr   r   r   r8   r   r   ri   r   r   r   r   rj   u  s   zDerObjectIdTests.testDecode1c                 C   rp   )Nr   )r   r   r8   r   r   r   r   r   rl   {     zDerObjectIdTests.testDecode2c                 C   r   )Nu   	*H÷ z1.2.840.113549.1.0.1r   r   r   r   r   rm     s   zDerObjectIdTests.testDecode3N)rI   rJ   rK   rP   rV   rj   rl   rm   r   r   r   r   r   e  s    
r   c                   @   r   )DerBitStringTestsc                 C   r   )Nr   u    ÿ)r   r   r   r   r   r   r   r   rP     r   zDerBitStringTests.testInit1c                 C   s$   t td}| | td d S )Nr(   z )r   r   r   r   r   r   r   r   r   	testInit2  r   zDerBitStringTests.testInit2c                 C   sb   t  }| | td t td}| | td t  }td|_| | td d S )Nz r6    )r   r   r   r   ri   r   r   r   r   rV     s   
zDerBitStringTests.testEncode1c                 C   r   )N r   r   r6   )r   r8   r   r   ri   r   r   r   r   rj     r   zDerBitStringTests.testDecode1c                 C   rp   )Nr   )r   r   r8   r   r   r   r   r   rl     rr   zDerBitStringTests.testDecode2N)rI   rJ   rK   rP   r   rV   rj   rl   r   r   r   r   r     s    	r   c                   @   s\   e Z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 )DerSetOfTestsc                 C   s,   t tdtdg}| | td d S )Nr(   r+   z1)r   r   r   r   r   r   r   r   r   rP     s   zDerSetOfTests.testInit1c                 C   sP   t  }| | td |d | | td | | td d S )N1 r   1 )r   r   r   r   addr   r   r   r   rV     s
   
zDerSetOfTests.testEncode1c                 C   sR   t  }|d |d | | td t ddg}| | td d S )NrX   r   u   1 ÿ)r   r   r   r   r   r   r   r   r   r^     s   

zDerSetOfTests.testEncode2c                 C   s(   t  }|d | t|jtd d S )NrX   z   )r   r   r   r   r   r   r   r   r   ra     r   zDerSetOfTests.testEncode3c                 C   s:   t  }|td |td | | td d S )Nz zz1 )r   r   r   r   r   r   r   r   r   rf     s   zDerSetOfTests.testEncode4c                 C   sX   t  }|td | t|d |td | t|d | t|dg d S )Nr   r   r   r(   )r   r8   r   r   r   listr   r   r   r   rj     s   zDerSetOfTests.testDecode1c                 C   sL   t  }|td | t|d t|}| d|v  | d|v  d S )N   1 ÿr+   rX   r   )r   r8   r   r   r   r   r~   )r   r   lr   r   r   rl     s   zDerSetOfTests.testDecode2c                 C   ru   )Nr   r   r   r   r8   r   r   r   r   r   rm     s   
zDerSetOfTests.testDecode3c                 C   rp   )Nr   )r   r   r8   r   r   r   r   r   r     r   zDerSetOfTests.testDecode4c                 C   ru   )Nu   1 ÿªr   r   r   r   r   rv     s   
zDerSetOfTests.testErrDecode1N)rI   rJ   rK   rP   rV   r^   ra   rf   rj   rl   rm   r   rv   r   r   r   r   r     s    

	
	r   c                 C   st   ddl m} g }||t7 }||t7 }||t7 }||t7 }||t7 }||t7 }||t7 }||t	7 }|S )Nr   )list_test_cases)
Cryptodome.SelfTest.st_commonr   r   rL   rx   r   r   r   r   r   )configr   	listTestsr   r   r   	get_tests  s   r   __main__c                   C   s   t t S )N)unittest	TestSuiter   r   r   r   r   <lambda>  s    r   suite)defaultTest)__doc__r   Cryptodome.Util.py3compatCryptodome.Util.asn1r   r   r   r   r   r   r	   r
   TestCaser   rL   rx   r   r   r   r   r   r   rI   r   mainr   r   r   r   <module>   s&   !(x # p#"'Q