B
    _£et1  ã               @   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	   Ú
Cryptodomer
   ÚCryptodome.Util.numberr   r   r   ÚmodulusÚnÚprime_factorÚpÚqÚeÚdÚuÚrsa)Úselfr   © r   úe/var/www/html/afkarena_new/venv/lib/python3.7/site-packages/Cryptodome/SelfTest/PublicKey/test_RSA.pyÚsetUpY   s    zRSATest.setUpc             C   s@   | j  d¡}|  |¡ |  |¡ | ¡ }|  |¡ |  |¡ dS )z7RSA (default implementation) generated key (1 argument)i   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)i   N)
r   r   r
   ÚnewÚreadr   r   r    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 )Ni   i  )r   )r   r   r
   r&   r'   r   r   r    r!   r"   ÚassertEqualr   )r   r#   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,   r.   )r   r#   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,   r.   )r   r#   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,   r.   )r   r#   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 )Nr   )r   r   r   r3   r4   r   r+   )r   r5   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   r3   r4   r   r+   r   )r   r5   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   r3   r4   r   r+   r   r   )r   r5   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 )Nr   )
r   r+   r   r   r   Z
assertTruer   r   r3   r4   )r   r#   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   Úrepr)r   r#   r   r   r   Ú	test_reprÉ   s     zRSATest.test_reprc             C   s    | j  d¡}|  ttj|¡ dS )zRSA keys are unpickablei   N)r   r   r3   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 )Ni   éÿÿÿÿ)r   r   r3   r4   Ú_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 )Ni   é€   )r   r+   r   r   r)   Zsize_in_bitsZsize_in_bytes)r   r$   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.NumbersrI   r)   Úhas_privater   r   r   ÚintÚlcmr   r   r   ZinvpZinvq)r   r#   rI   rL   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)   rJ   r   r   Úhasattrr3   Ú	TypeErrorrC   r   rD   r    Z	publickey)r   r#   rM   r   r   r   r!   ø   s     




zRSATest._check_public_keyc             C   s2   t t| jƒƒ}| |¡}| |¡}|  ||¡ d S )N)r   r   rM   rC   rE   r)   )r   r#   rM   Ú	plaintextÚnew_ciphertext2r   r   r   r     s    

zRSATest._exercise_primitivec             C   s   t | jƒ}| t|ƒ¡}d S )N)r   rP   rE   r   )r   r#   rP   rQ   r   r   r   r"   $  s    
z"RSATest._exercise_public_primitivec             C   s6   t | jƒ}t | jƒ}| t|ƒ¡}|  t|ƒ|¡ d S )N)r   rP   rM   rE   r   r)   )r   r#   rP   rM   rQ   r   r   r   r,   *  s    

zRSATest._check_encryptionc             C   s6   t t| jƒƒ}t t| jƒƒ}| |¡}|  ||¡ d S )N)r   r   rP   rM   rC   r)   )r   r#   rP   rM   Znew_plaintextr   r   r   r.   2  s    
zRSATest._check_decryptionN) Ú__name__Ú
__module__Ú__qualname__rP   rM   r   r   r   r   r%   r(   r*   r-   r/   r0   r1   r2   r6   r7   r9   r;   r<   r>   rA   rF   rH   r   r!   r   r"   r,   r.   r   r   r   r   r   %   s:   			
r   c             C   s   g }|t tƒ7 }|S )N)r   r   )ÚconfigÚtestsr   r   r   Ú	get_tests;  s    rW   Ú__main__c               C   s   t  tƒ ¡S )N)ÚunittestZ	TestSuiterW   r   r   r   r   Ú<lambda>A  ó    rZ   Úsuite)ZdefaultTest)Ú__doc__Z__revision__Úosr?   r   ZCryptodome.Util.py3compatrY   ZCryptodome.SelfTest.st_commonr   r   r   ZTestCaser   rW   rR   r\   Úmainr   r   r   r   Ú<module>   s     