o
    .ѹgP1                     @   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rCdd Zejdd dS dS )z(Self-test suite for Crypto.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Crypto.PublicKeyr	   ZCryptor
   Crypto.Util.numberr   r   r   modulusnprime_factorpqedursa)selfr    r   f/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/site-packages/Crypto/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p|j| jk | |j| jkp(|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Crypto.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  s    ra   suite)ZdefaultTest)__doc__Z__revision__osrF   r   ZCrypto.Util.py3compatr`   ZCrypto.SelfTest.st_commonr   r   r   ZTestCaser   r^   rY   rb   mainr   r   r   r   <module>   s      