U
    g,z                     @   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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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 )z#Self-tests for Cryptodome.Util.asn1    N)*)		DerObjectDerSetOf
DerIntegerDerBitStringDerObjectIdDerNullDerOctetStringDerSequence
DerBooleanc                   @   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   F/tmp/pip-unpacked-wheel-_q8s9isk/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   assertEqual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   Z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	   ¥xxllr&   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%   r6   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   r7   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*   r4   u     Tu   ¯ )r   r   r   r7   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   r7   r   r   r8   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   r7   r   r   Z_inner_tag_octetr   r   r   r   r   testObjDecode7   s    zDerObjectTests.testObjDecode7c                 C   s"   t d}| ||td d S )Nr+   r4   )r   r   r7   r   r   r   r   r   testObjDecode8   s    zDerObjectTests.testObjDecode8N)__name__
__module____qualname__r   r!   r#   r'   r-   r3   r9   r;   r=   r@   rA   rD   rE   rF   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   s    t d}| | td d S )Nr)   r   r   r   r   r   r   r   r   	testInit1   s    zDerIntegerTests.testInit1c                 C   sX   t d}| | td t d}| | td t d}| | td d S )Nr    r)   rK      rL   r   r   r   r   testEncode1   s    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+                                	         rL   r   r   r   r   testEncode2   sX    
	
zDerIntegerTests.testEncode2c                 C   sX   t d}| | td t d}| | td t d}| | td d S )N   ÿiu   iu   þ¨¿rL   r   r   r   r   testEncode3   s    zDerIntegerTests.testEncode3c                 C   s$   t ddd}| | td d S )N4   r"   r/      £4rL   r   numberr   r   r   testEncode4   s    zDerIntegerTests.testEncode4c                 C   s^   t  }|td | |jd |td | |jd |td | |jd d S )NrN   r   rK   r)   rP   rO   r   r7   r   r   valuer   r   r   r   testDecode1   s    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 )NrS   rR   rU   rV   rW   r+   rT   ra   r   r   r   r   testDecode2   sV    	
zDerIntegerTests.testDecode2c                 C   sB   t  }|td | |jd |td | |jd d S )NrZ   rY   u    i ra   r   r   r   r   testDecode3  s
    zDerIntegerTests.testDecode3c                 C   s^   t  }|td | |jd |td | |jd |td | |jd d S )Nz r)   u   ÿÿrY   r   r   ra   r   r   r   r   testDecode5  s    zDerIntegerTests.testDecode5c                 C   s*   t dd}|td | |jd d S )Nr"   r/   r]   r\   ra   r^   r   r   r   testDecode6)  s    
zDerIntegerTests.testDecode6c                 C   s    t  }| ||td d S )NrP   )r   r   r7   r   r   r   r   r   testDecode7/  s    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   r7   r   r   r^   r   r   r   testStrict16  s
    

zDerIntegerTests.testStrict1c                 C   s   t  }| t|jtd d S )Nu   )r   r   r   r7   r   r   r   r   r   testErrDecode1@  s    zDerIntegerTests.testErrDecode1N)rG   rH   rI   rM   rQ   rX   r[   r`   rc   rd   re   rf   rg   rh   rj   rk   r   r   r   r   rJ      s   

rJ   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   rM   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   assertFalsehasOnlyIntsappendhasInts
assertTruer   r   r   r   rQ   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)   rY   z0)r
   rp   r   lenr   r   r   r   r   r   rX   [  s    
zDerSequenceTests.testEncode2c                 C   s(   t  }|d | | td d S )NrR   u   0r
   rp   r   r   r   r   r   r   r   r[   j  s    
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+   rT      0rU   rV   rW   rt   r   r   r   r   r`   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 )NrR         0 ÿFr+   u	   0þr)   	      r"   rY   z0		)
r
   rp   r   r   r   rr   ro   rq   rn   rs   r   r   r   r   testEncode6  s(    




zDerSequenceTests.testEncode6c                 C   sD   t  }|d |td | | td | |  d S )NrR   z0   0	0)r
   rp   r   r   r   rn   ro   r   r   r   r   testEncode7  s
    
zDerSequenceTests.testEncode7c                 C   sF   t  }|d |t dg | | td | |  d S )NrR   r.   r}   )r
   rp   r   r   r   rn   ro   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   rm   r)   r
   r7   r   r   rs   r   r   r   r   rc     s    zDerSequenceTests.testDecode1c                 C   s8   t  }|td | t|d | |d d d S )Nz0r)   r   rO   r   r   r   r   r   rd     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 )	Nru   rU   rV   rW   r)   r   r+   rT   r   r   r   r   r   testDecode4  sT    
	
zDerSequenceTests.testDecode4c                 C   sH   t  }|td | t|d | |d d | |d d d S )Nrx   r+   r   rR   r)   rw   r   r   r   r   r   rg     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   rR   r)      $¶cr+    r   r   r   r   r   rh     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
   r7   r   r   rs   rq   rn   ro   r   r   r   r   testDecode8  s    zDerSequenceTests.testDecode8c                 C   s    t  }| ||td d S )Nr   )r
   r   r7   r   r   r   r   r   testDecode9  s    zDerSequenceTests.testDecode9c                 C   sF   t  }| t|jtd | t|jtd | t|jtd d S )N r?   r$   r
   r   r   r7   r   r   r   r   r   rk     s    zDerSequenceTests.testErrDecode1c                 C   s   t  }| t|jtd d S )Nz0  r   r   r   r   r   testErrDecode2  s    zDerSequenceTests.testErrDecode2c                 C   sF   t  }| t|jtd | t|jtd | t|jtd d S )Nz0 u   0u   0r   r   r   r   r   testErrDecode3  s    zDerSequenceTests.testErrDecode3c                 C   sb   t dddg }t  j|dd t  j|dd | jtt  j|dd | jtt  j|dd d S )Nr)   r+   r"   )Znr_elements)r+   r"   )r   r.   r
   r   r7   r   r   )r   Zder_binr   r   r   test_expected_nr_elements"  s
    z*DerSequenceTests.test_expected_nr_elementsc                 C   sv   t dddg }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   T)Zonly_ints_expectedFr   )r   Zder_bin1Zder_bin2r   r   r   test_expected_only_integers*  s    z,DerSequenceTests.test_expected_only_integersN)rG   rH   rI   rM   rQ   rX   r[   r`   rv   r|   r~   r   rc   rd   r   rg   rh   r   r   rk   r   r   r   r   r   r   r   r   rl   F  s*   
		rl   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )DerOctetStringTestsc                 C   s$   t td}| | td d S )N   ÿu   ÿ)r	   r   r   r   r   r   r   r   rM   7  s    zDerOctetStringTests.testInit1c                 C   s<   t  }| | td td|_| | td d S )N r5   )r	   r   r   r   r   r   r   r   r   rQ   ;  s    
zDerOctetStringTests.testEncode1c                 C   sJ   t  }|td | |jtd |td | |jtd d S )Nr   r   r   r5   )r	   r7   r   r   r   r   r   r   r   rc   E  s
    zDerOctetStringTests.testDecode1c                 C   s    t  }| ||td d S )Nr   )r	   r   r7   r   r   r   r   r   rd   N  s    zDerOctetStringTests.testDecode2c                 C   s   t  }| t|jtd d S )Nu   ÿ)r	   r   r   r7   r   r   r   r   r   rk   S  s    z"DerOctetStringTests.testErrDecode1N)rG   rH   rI   rM   rQ   rc   rd   rk   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   rQ   Z  s    zDerNullTests.testEncode1c                 C   s    t  }| ||td d S r   )r   r   r7   r   r   r   r   r   rc   `  s    zDerNullTests.testDecode1N)rG   rH   rI   rQ   rc   r   r   r   r   r   X  s   r   c                   @   sD   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S )DerObjectIdTestsc                 C   s   t d}| | d d S )Nz1.1s   ))r   r   r   r   r   r   r   rM   g  s    zDerObjectIdTests.testInit1c                 C   sP   t d}| | d t  }d|_| | d t d}| | d d S )N1.2.840.113549.1.1.1   	*H
2.999.1234   7R)r   r   r   rb   r   r   r   r   rQ   k  s    zDerObjectIdTests.testEncode1c                 C   s0   t d}| t|j t d}| t|j d S )Nz3.4z1.40)r   r   r   r   r   r   r   r   rX   v  s    zDerObjectIdTests.testEncode2c                 C   s"   t  }|d | |jd d S )Nr   r   r   r7   r   rb   r   r   r   r   rc     s    
zDerObjectIdTests.testDecode1c                 C   s   t  }| ||d d S )Nr   )r   r   r7   r   r   r   r   rd     s    zDerObjectIdTests.testDecode2c                 C   s"   t  }|d | |jd d S )Ns   	*H z1.2.840.113549.1.0.1r   r   r   r   r   re     s    
zDerObjectIdTests.testDecode3c                 C   s"   t  }|d | |jd d S )Nr   r   r   r   r   r   r   r     s    
zDerObjectIdTests.testDecode4N)
rG   rH   rI   rM   rQ   rX   rc   rd   re   r   r   r   r   r   r   e  s   	r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )DerBitStringTestsc                 C   s$   t td}| | td d S )Nr   u    ÿ)r   r   r   r   r   r   r   r   rM     s    zDerBitStringTests.testInit1c                 C   s$   t td}| | td d S )Nr)   z )r   r   r   r   r   r   r   r   r   	testInit2  s    zDerBitStringTests.testInit2c                 C   sb   t  }| | td t td}| | td t  }td|_| | td d S )Nz r5    )r   r   r   r   rb   r   r   r   r   rQ     s    
zDerBitStringTests.testEncode1c                 C   sJ   t  }|td | |jtd |td | |jtd d S )N r   r   r5   )r   r7   r   r   rb   r   r   r   r   rc     s
    zDerBitStringTests.testDecode1c                 C   s    t  }| ||td d S )Nr   )r   r   r7   r   r   r   r   r   rd     s    zDerBitStringTests.testDecode2N)rG   rH   rI   rM   r   rQ   rc   rd   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   rM     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   rQ     s
    
zDerSetOfTests.testEncode1c                 C   sR   t  }|d |d | | td t ddg}| | td d S )NrR   rw   u   1 ÿ)r   r   r   r   r   r   r   r   r   rX     s    

zDerSetOfTests.testEncode2c                 C   s(   t  }|d | t|jtd d S )NrR   z   )r   r   r   r   r   r   r   r   r   r[     s    
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   r`     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   r7   r   r   rs   listr   r   r   r   rc     s    zDerSetOfTests.testDecode1c                 C   sL   t  }|td | t|d t|}| d|k | d|k d S )N   1 ÿr+   rR   rw   )r   r7   r   r   rs   r   rr   )r   r    lr   r   r   rd     s    zDerSetOfTests.testDecode2c                 C   s   t  }| t|jtd d S )Nr   r   r   r   r7   r   r   r   r   r   re     s    
zDerSetOfTests.testDecode3c                 C   s    t  }| ||td d S )Nr   )r   r   r7   r   r   r   r   r   r      s    zDerSetOfTests.testDecode4c                 C   s   t  }| t|jtd d S )Nu   1 ÿªr   r   r   r   r   rk     s    
zDerSetOfTests.testErrDecode1N)rG   rH   rI   rM   rQ   rX   r[   r`   rc   rd   re   r   rk   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 )DerBooleanTestsc                 C   s   t d}| | d d S )NF    r   r   r   r   r   r   r   rQ     s    zDerBooleanTests.testEncode1c                 C   s   t d}| | d d S )NT   r   r   r   r   r   rX     s    zDerBooleanTests.testEncode2c                 C   s    t ddd}| | d d S )NF   r*       r   r   r   r   r   r[     s    zDerBooleanTests.testEncode3c                 C   s    t ddd}| | d d S )NFr.   r/       r   r   r   r   r   r`     s    zDerBooleanTests.testEncode4c                 C   s"   t  }|d | |jd d S )Nr   Fr   r7   r   rb   r   r   r   r   rc   "  s    
zDerBooleanTests.testDecode1c                 C   s"   t  }|d | |jd d S )Nr   Tr   r   r   r   r   rd   '  s    
zDerBooleanTests.testDecode2c                 C   s&   t dd}|d | |jd d S )Nr   r   r   Fr   r   r   r   r   re   ,  s    

zDerBooleanTests.testDecode3c                 C   s&   t dd}|d | |jd d S )Nr.   r/   r   Fr   r   r   r   r   r   1  s    

zDerBooleanTests.testDecode4c                 C   s   t  }| t|jd d S )Ns    r   r   r   r7   r   r   r   r   testErrorDecode16  s    z DerBooleanTests.testErrorDecode1c                 C   s   t  }| t|jd d S )Ns    r   r   r   r   r   testErrorDecode2;  s    z DerBooleanTests.testErrorDecode2N)rG   rH   rI   rQ   rX   r[   r`   rc   rd   re   r   r   r   r   r   r   r   r     s   r   c                 C   s   ddl m} g }||t7 }||t7 }||t7 }||t7 }||t7 }||t7 }||t7 }||t	7 }||t
7 }|S )Nr   )list_test_cases)ZCryptodome.SelfTest.st_commonr   r   rJ   rl   r   r   r   r   r   r   )configr   Z	listTestsr   r   r   	get_testsA  s    r   __main__c                   C   s   t t S )N)unittestZ	TestSuiter   r   r   r   r   <lambda>P      r   suite)ZdefaultTest)__doc__r   ZCryptodome.Util.py3compatZCryptodome.Util.asn1r   r   r   r   r   r   r	   r
   r   ZTestCaser   rJ   rl   r   r   r   r   r   r   r   rG   r   mainr   r   r   r   <module>"   s$   ,x # p#1'R2
