U
    ÞM‘ft1  ã                   @   s†   d Z dZddlZddlZddlmZ ddlT ddlZddlmZm	Z	m
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-test suite for Cryptodome.PublicKey.RSAz$Id$é    N)ÚPicklingError)Ú*)Úlist_test_casesÚa2b_hexÚb2a_hexc                   @   sà   e Zd ZdZdZdZd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d0d1„ Zd2d3„ Zd4d5„ Zd6S )7ÚRSATestaÅ  
           eb 7a 19 ac e9 e3 00 63 50 e3 29 50 4b 45 e2
        ca 82 31 0b 26 dc d8 7d 5c 68 f1 ee a8 f5 52 67
        c3 1b 2e 8b b4 25 1f 84 d7 e0 b2 c0 46 26 f5 af
        f9 3e dc fb 25 c9 c2 b3 ff 8a e1 0e 83 9a 2d db
        4c dc fe 4f f4 77 28 b4 a1 b7 c1 36 2b aa d2 9a
        b4 8d 28 69 d5 02 41 21 43 58 11 59 1b e3 92 f9
        82 fb 3e 87 d0 95 ae b4 04 48 db 97 2f 3a c1 4f
        7b c2 75 19 52 81 ce 32 d2 f1 b7 6d 4d 35 3e 2d
    aÅ  
        12 53 e0 4d c0 a5 39 7b b4 4a 7a b8 7e 9b f2 a0
        39 a3 3d 1e 99 6f c8 2a 94 cc d3 00 74 c9 5d f7
        63 72 20 17 06 9e 52 68 da 5d 1c 0b 4f 87 2c f6
        53 c1 1d f8 23 14 a6 79 68 df ea e2 8d ef 04 bb
        6d 84 b1 c3 1d 65 4a 19 70 e5 78 3b d6 eb 96 a0
        24 c2 ca 2f 4a 90 fe 9f 2e f5 c9 c1 40 e5 bb 48
        da 95 36 ad 87 00 c8 4f c9 13 0a de a7 4e 55 8d
        51 a7 4d df 85 d8 b5 0d e9 68 38 d6 06 3e 09 55
    aÅ  
        bb f8 2f 09 06 82 ce 9c 23 38 ac 2b 9d a8 71 f7
        36 8d 07 ee d4 10 43 a4 40 d6 b6 f0 74 54 f5 1f
        b8 df ba af 03 5c 02 ab 61 ea 48 ce eb 6f cd 48
        76 ed 52 0d 60 e1 ec 46 19 71 9d 8a 5b 8b 80 7f
        af b8 e0 a3 df c7 37 72 3e e6 b4 b7 d9 3a 25 84
        ee 6a 64 9d 06 09 53 74 88 34 b2 45 45 98 39 4e
        e0 aa b1 2d 7b 61 a5 1f 52 7a 9a 41 f6 c1 68 7f
        e2 53 72 98 ca 2a 8f 59 46 f8 e5 fd 09 1d bd cb
    é   zå
        c9 7f b1 f0 27 f4 53 f6 34 12 33 ea aa d1 d9 35
        3f 6c 42 d0 88 66 b1 d0 5a 0f 20 35 02 8b 9d 86
        98 40 b4 16 66 b4 2e 92 ea 0d a3 b4 32 04 b5 cf
        ce 33 52 52 4d 04 16 a5 a4 41 e7 00 af 46 15 03
    c                 C   sŽ   ddl ma ddlma ddlmam} tt| jƒƒ| _	tt| j
ƒƒ| _| j	| j | _|| j| jd | jd  ƒ| _|| j| jƒ| _t| _d S )Nr   )ÚRSA)ÚRandom)Úbytes_to_longÚinverseé   )ZCryptodome.PublicKeyr	   Z
Cryptodomer
   ÚCryptodome.Util.numberr   r   r   ÚmodulusÚnÚprime_factorÚpÚqÚeÚdÚuÚrsa)Úselfr   © r   úJ/tmp/pip-unpacked-wheel-l_0d1exj/Cryptodome/SelfTest/PublicKey/test_RSA.pyÚsetUpY   s    zRSATest.setUpc                 C   s@   | j  d¡}|  |¡ |  |¡ | ¡ }|  |¡ |  |¡ dS )z7RSA (default implementation) generated key (1 argument)é   N)r   ÚgenerateÚ_check_private_keyÚ_exercise_primitiveÚ
public_keyÚ_check_public_keyÚ_exercise_public_primitive©r   ÚrsaObjÚpubr   r   r   Útest_generate_1argh   s    


zRSATest.test_generate_1argc                 C   sH   | j  dt ¡ j¡}|  |¡ |  |¡ | ¡ }|  |¡ |  	|¡ dS )z8RSA (default implementation) generated key (2 arguments)r   N)
r   r   r
   ÚnewÚreadr   r   r    r!   r"   r#   r   r   r   Útest_generate_2argq   s    


zRSATest.test_generate_2argc                 C   sZ   | j jdt ¡ jdd}|  |¡ |  |¡ | ¡ }|  |¡ |  	|¡ |  
d|j¡ d S )Nr   i  )r   )r   r   r
   r'   r(   r   r   r    r!   r"   ÚassertEqualr   r#   r   r   r   Útest_generate_3argsz   s    



zRSATest.test_generate_3argsc                 C   s,   | j  | j| jf¡}|  |¡ |  |¡ dS )z6RSA (default implementation) constructed key (2-tuple)N)r   Ú	constructr   r   r!   Ú_check_encryption©r   r%   r   r   r   Útest_construct_2tupleƒ   s    
zRSATest.test_construct_2tuplec                 C   s0   | j  | j| j| jf¡}|  |¡ |  |¡ dS )z6RSA (default implementation) constructed key (3-tuple)N)r   r,   r   r   r   r-   Ú_check_decryption©r   r$   r   r   r   Útest_construct_3tuple‰   s    
zRSATest.test_construct_3tuplec                 C   s4   | j  | j| j| j| jf¡}|  |¡ |  |¡ dS )z6RSA (default implementation) constructed key (4-tuple)N)r   r,   r   r   r   r   r-   r0   r1   r   r   r   Útest_construct_4tuple   s    
zRSATest.test_construct_4tuplec                 C   sB   | j  | j| j| j| j| jf¡}|  |¡ |  |¡ |  	|¡ dS )z6RSA (default implementation) constructed key (5-tuple)N)
r   r,   r   r   r   r   r   r   r-   r0   r1   r   r   r   Útest_construct_5tuple•   s     

zRSATest.test_construct_5tuplec                 C   sF   | j  | j| j| j| j| j| jf¡}|  |¡ |  	|¡ |  
|¡ dS )z6RSA (default implementation) constructed key (6-tuple)N)r   r,   r   r   r   r   r   r   r   r-   r0   r1   r   r   r   Útest_construct_6tupleœ   s    $

zRSATest.test_construct_6tuplec                 C   sB   | j df}|  t| jj|¡ | j d | jf}|  t| jj|¡ d S ©Nr   )r   ÚassertRaisesÚ
ValueErrorr   r,   r   ©r   Útupr   r   r   Útest_construct_bad_key2£   s    
zRSATest.test_construct_bad_key2c                 C   s*   | j | j| jd f}|  t| jj|¡ d S r6   )r   r   r   r7   r8   r   r,   r9   r   r   r   Útest_construct_bad_key3«   s    zRSATest.test_construct_bad_key3c                 C   s„   | j | j| j| j| jf}|  t| jj|¡ | j| j | j| j| jf}|  t| jj|¡ | j| j d| j| jf}|  t| jj|¡ d S )Né   )	r   r   r   r   r7   r8   r   r,   r   r9   r   r   r   Útest_construct_bad_key5¯   s    zRSATest.test_construct_bad_key5c                 C   sr   | j | j| j| j| jdf}|  t| jj|¡ ddl	m
} | j | j| j| j| j|| j| jƒf}|  t| jj|¡ d S )Né
   r   )r   )r   r   r   r   r   r7   r8   r   r,   r   r   )r   r:   r   r   r   r   Útest_construct_bad_key6¹   s
    $zRSATest.test_construct_bad_key6c                 C   s’   | j  | j| j| jg¡}|  |j| jkp2|j| jk¡ |  |j| jkpP|j| jk¡ |  |j|j | jk¡ |  t	| j j| j| j| jd g¡ d S r6   )
r   r,   r   r   r   Ú
assertTruer   r   r7   r8   r1   r   r   r   Útest_factoringÁ   s
    zRSATest.test_factoringc                 C   s,   | j  | j| j| j| j| jf¡}t|ƒ d S ©N)r   r,   r   r   r   r   r   Úreprr1   r   r   r   Ú	test_reprÉ   s     zRSATest.test_reprc                 C   s    | j  d¡}|  ttj|¡ dS )zRSA keys are unpickabler   N)r   r   r7   r   ÚpickleÚdumps)r   Zrsa_keyr   r   r   Útest_serializationÍ   s    zRSATest.test_serializationc                 C   sv   | j  d¡}|  t|j|j¡ |  t|j|j¡ |  t|j|j¡ |  t|jd¡ |  t|jd¡ |  t|jd¡ d S )Nr   éÿÿÿÿ)r   r   r7   r8   Ú_decryptr   Ú_decrypt_to_bytesÚ_encrypt)r   Zrsa_objr   r   r   Útest_raw_rsa_boundaryÓ   s    zRSATest.test_raw_rsa_boundaryc                 C   s8   | j  | j| jf¡}|  | ¡ d¡ |  | ¡ d¡ d S )Nr   é€   )r   r,   r   r   r*   Zsize_in_bitsZsize_in_bytesr.   r   r   r   Ú	test_sizeà   s    zRSATest.test_sizec                 C   sø   ddl m} |  d| ¡ ¡ |  |j|j|j ¡ t||jd ƒ |jd ¡ƒ}|  d|j	|j
 | ¡ |  d|j|j |j ¡ |  d|jdk¡ |  d|jdk¡ |  d|j
dk¡ |  d|j	dk¡ |  |j|j¡ |  d|j|j |j ¡ d S )Nr   )ÚIntegerr   )ZCryptodome.Math.NumbersrP   r*   Úhas_privater   r   r   ÚintÚlcmr   r   r   ZinvpZinvq)r   r$   rP   rS   r   r   r   r   å   s    zRSATest._check_private_keyc                 C   s  t | jƒ}|  d| ¡ ¡ |  |j|j¡ |  |j|j¡ |  dt|dƒ¡ |  dt|dƒ¡ |  dt|dƒ¡ |  dt|dƒ¡ |  d|jdk¡ |  t|j	t
|ƒ¡ |  t|jt
|ƒ¡ |  | ¡ | ¡ kd¡ |  | ¡ | ¡ kd¡ |  | ¡ | ¡ ¡ d S )	Nr   r   r   r   r   r   TF)r   Ú
ciphertextr*   rQ   r   r   Úhasattrr7   Ú	TypeErrorrJ   r   rK   r    Z	publickey)r   r$   rT   r   r   r   r!   ø   s$    

ÿ
ÿzRSATest._check_public_keyc                 C   s2   t t| jƒƒ}| |¡}| |¡}|  ||¡ d S rC   )r   r   rT   rJ   rL   r*   )r   r$   rT   Ú	plaintextÚnew_ciphertext2r   r   r   r     s    

zRSATest._exercise_primitivec                 C   s   t | jƒ}| t|ƒ¡}d S rC   )r   rW   rL   r   )r   r$   rW   rX   r   r   r   r"   $  s    
z"RSATest._exercise_public_primitivec                 C   s6   t | jƒ}t | jƒ}| t|ƒ¡}|  t|ƒ|¡ d S rC   )r   rW   rT   rL   r   r*   )r   r$   rW   rT   rX   r   r   r   r-   *  s    

zRSATest._check_encryptionc                 C   s6   t t| jƒƒ}t t| jƒƒ}| |¡}|  ||¡ d S rC   )r   r   rW   rT   rJ   r*   )r   r$   rW   rT   Znew_plaintextr   r   r   r0   2  s    
zRSATest._check_decryptionN) Ú__name__Ú
__module__Ú__qualname__rW   rT   r   r   r   r   r&   r)   r+   r/   r2   r3   r4   r5   r;   r<   r>   r@   rB   rE   rH   rM   rO   r   r!   r   r"   r-   r0   r   r   r   r   r   %   s:   
			
r   c                 C   s   g }|t tƒ7 }|S rC   )r   r   )ÚconfigÚtestsr   r   r   Ú	get_tests;  s    r^   Ú__main__c                   C   s   t  tƒ ¡S rC   )ÚunittestZ	TestSuiter^   r   r   r   r   Ú<lambda>A  ó    ra   Úsuite)ZdefaultTest)Ú__doc__Z__revision__ÚosrF   r   ZCryptodome.Util.py3compatr`   ZCryptodome.SelfTest.st_commonr   r   r   ZTestCaser   r^   rY   rc   Úmainr   r   r   r   Ú<module>   s     