o
    Þý°jÜ*  ã                   @   sÔ   d dl mZ d dlZd dlmZ d dlmZmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZ d d	lmZ d
d„ Zdd„ ZG dd„ dejƒZG dd„ dejƒZi fdd„Zedkrhdd„ Zejdd� dS dS )é    )Úprint_functionN)ÚRSA)Úlist_test_casesÚa2b_hex)ÚRandom)Ú
PKCS1_v1_5)Úb)Úbytes_to_longÚlong_to_bytes©Úload_test_vectors_wycheproofc                 C   s   dD ]}|   |d¡} q| S )z6Remove white spaces, tabs, and new lines from a string)Ú
ú	ú Ú )Úreplace)ÚtÚc© r   ú›/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/Cryptodome/SelfTest/Cipher/test_pkcs1_15.pyÚrws$   s   r   c                 C   s,   t t| ƒƒ}t|ƒd dkrtdƒ‚t|ƒS )z=Convert a text string with bytes in hex form to a byte stringé   é   z"Even number of characters expected)r   r   ÚlenÚ
ValueErrorr   )r   Úcleanr   r   r   Út2b+   s   r   c                   @   s`   e Zd Zd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S )ÚPKCS1_15_Testsc                 C   s    t  ¡ j| _t d| j¡| _d S )Ni   )r   ÚnewÚreadÚrngr   ÚgenerateÚkey1024©Úselfr   r   r   ÚsetUp5   s   zPKCS1_15_Tests.setUp))av  -----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDAiAnvIAOvqVwJTaYzsKnefZftgtXGE2hPJppGsWl78yz9jeXY
W/FxX/gTPURArNhdnhP6n3p2ZaDIBrO2zizbgIXs0IsljTTcr4vnI8fMXzyNUOjA
zP3nzMqZDZK6757XQAobOssMkBFqRWwilT/3DsBhRpl3iMUhF+wvpTSHewIDAQAB
AoGAC4HV/inOrpgTvSab8Wj0riyZgQOZ3U3ZpSlsfR8ra9Ib9Uee3jCYnKscu6Gk
y6zI/cdt8EPJ4PuwAWSNJzbpbVaDvUq25OD+CX8/uRT08yBS4J8TzBitZJTD4lS7
atdTnKT0Wmwk+u8tDbhvMKwnUHdJLcuIsycts9rwJVapUtkCQQDvDpx2JMun0YKG
uUttjmL8oJ3U0m3ZvMdVwBecA0eebZb1l2J5PvI3EJD97eKe91Nsw8T3lwpoN40k
IocSVDklAkEAzi1HLHE6EzVPOe5+Y0kGvrIYRRhncOb72vCvBZvD6wLZpQgqo6c4
d3XHFBBQWA6xcvQb5w+VVEJZzw64y25sHwJBAMYReRl6SzL0qA0wIYrYWrOt8JeQ
8mthulcWHXmqTgC6FEXP9Es5GD7/fuKl4wqLKZgIbH4nqvvGay7xXLCXD/ECQH9a
1JYNMtRen5unSAbIOxRcKkWz92F0LKpm9ZW/S9vFHO+mBcClMGoKJHiuQxLBsLbT
NtEZfSJZAeS2sUtn3/0CQDb2M2zNBTF8LlM0nxmh0k9VGm5TVIyBEMcipmvOgqIs
HKukWBcq9f/UOmS0oEhai/6g+Uf7VHJdWaeO5LzuvwU=
-----END RSA PRIVATE KEY-----zTHIS IS PLAINTEXT
a÷  3f dc fd 3c cd 5c 9b 12  af 65 32 e3 f7 d0 da 36
                8f 8f d9 e3 13 1c 7f c8  b3 f9 c1 08 e4 eb 79 9c
                91 89 1f 96 3b 94 77 61  99 a4 b1 ee 5d e6 17 c9
                5d 0a b5 63 52 0a eb 00  45 38 2a fb b0 71 3d 11
                f7 a1 9e a7 69 b3 af 61  c0 bb 04 5b 5d 4b 27 44
                1f 5b 97 89 ba 6a 08 95  ee 4f a2 eb 56 64 e5 0f
                da 7c f9 9a 61 61 06 62  ed a0 bc 5f aa 6c 31 78
                70 28 1a bb 98 3c e3 6a  60 3c d1 0b 0f 5a f4 75a   eb d7 7d 86 a4 35 23 a3 54 7e 02 0b 42 1d
                61 6c af 67 b8 4e 17 56 80 66 36 04 64 34 26 8a
                47 dd 44 b3 1a b2 17 60 f4 91 2e e2 b5 95 64 cc
                f9 da c8 70 94 54 86 4c ef 5b 08 7d 18 c4 ab 8d
                04 06 33 8f ca 15 5f 52 60 8a a1 0c f5 08 b5 4c
                bb 99 b8 94 25 04 9c e6 01 75 e6 f9 63 7a 65 61
                13 8a a7 47 77 81 ae 0d b8 2c 4d 50 a5c                 C   sl   | j D ]0}t |d ¡}G dd„ dƒ}tj||t|d ƒƒd�}| t|d ƒ¡}|  |t|d ƒ¡ qd S )Nr   c                   @   s   e Zd Zdd„ Zdd„ ZdS )z,PKCS1_15_Tests.testEncrypt1.<locals>.randGenc                 S   s   || _ d| _d S )Nr   ©ÚdataÚidx)r$   r'   r   r   r   Ú__init__s   s   
z5PKCS1_15_Tests.testEncrypt1.<locals>.randGen.__init__c                 S   s(   | j | j| j| … }|  j|7  _|S ©Nr&   )r$   ÚNÚrr   r   r   Ú__call__v   s   z5PKCS1_15_Tests.testEncrypt1.<locals>.randGen.__call__N)Ú__name__Ú
__module__Ú__qualname__r)   r-   r   r   r   r   ÚrandGenr   s    r1   é   )Úrandfuncr   r   )	Ú	_testDatar   Ú	importKeyÚPKCSr   r   Úencryptr   ÚassertEqual)r$   ÚtestÚkeyr1   ÚcipherÚctr   r   r   ÚtestEncrypt1l   s   
	ðzPKCS1_15_Tests.testEncrypt1c                 C   s$   d}t  | j¡}|  t|j|¡ d S )Nzv                                                                                                                      )r6   r   r"   ÚassertRaisesr   r7   )r$   Úptr;   r   r   r   ÚtestEncrypt2   s   zPKCS1_15_Tests.testEncrypt2c                 C   sx   | j D ]6}t |d ¡}t|d ƒ}t|d ƒ}t |¡}| |d ¡}|  ||¡ | |dt	|ƒ ¡}|  ||¡ qd S )Nr   r   r   ó   ÿ)
r4   r   r5   r   r   r6   r   Údecryptr8   r   )r$   r9   r:   Úexpected_ptr<   r;   r?   r   r   r   ÚtestVerify1…   s   

õzPKCS1_15_Tests.testVerify1c                 C   sn   t  | j¡}|  t|jdd¡ |  t|jdd¡ tdƒ}t|ƒ}| j |¡}t	|dƒ}|  
d| |d¡¡ d S )Nz                                                                                                                               z---z�                                                                                                                                 u‡    Ã¿Ã¿Ã¿Ã¿Ã¿Ã¿Ã¿ EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEé€   s   ---)r6   r   r"   r>   r   rB   r   r	   Ú_encryptr
   r8   )r$   r;   r?   Úpt_intÚct_intr<   r   r   r   ÚtestVerify2“   s   
zPKCS1_15_Tests.testVerify2c                 C   sP   t ddƒD ] }|  |¡}t | j¡}| |¡}| |d| ¡}|  ||¡ qd S )Nr   év   ó   ª)Úranger    r6   r   r"   r7   rB   r8   )r$   Úpt_lenr?   r;   r<   Úpt2r   r   r   ÚtestEncryptVerify1¢   s   

ûz!PKCS1_15_Tests.testEncryptVerify1c                 C   sp   t  | j¡}d}| |¡}d}| ||d¡}|  ||¡ | ||d¡}|  ||¡ | ||d¡}|  ||¡ d S )Ns   5555555555555555s   ªªªªªªªªªªªªªªªªé   é   é   )r6   r   r"   r7   rB   r8   )r$   r;   r?   r<   ÚsentinelÚpt_AÚpt_BÚpt_Cr   r   r   Útest_encrypt_verify_exp_pt_len¬   s   
z-PKCS1_15_Tests.test_encrypt_verify_exp_pt_lenc                 C   sF   d}t  | j¡}| t|ƒ¡}| t|ƒdt|ƒ ¡}|  ||¡ d S )Nó   XERõ   Ã¿)r6   r   r"   r7   Ú	bytearrayrB   r   r8   ©r$   r?   r;   r<   rN   r   r   r   ÚtestByteArray¼   s
   zPKCS1_15_Tests.testByteArrayc                 C   sN   d}t  | j¡}| tt|ƒƒ¡}| tt|ƒƒdt|ƒ ¡}|  ||¡ d S )NrX   rA   )	r6   r   r"   r7   Ú
memoryviewrZ   rB   r   r8   r[   r   r   r   ÚtestMemoryviewÃ   s
   zPKCS1_15_Tests.testMemoryviewc                 C   sJ   d}t  | j¡}| |¡}|  t|tƒ¡ | |d¡}|  t|tƒ¡ d S )Ns   XYZs   ªªª)r6   r   r"   r7   Ú
assertTrueÚ
isinstanceÚbytesrB   r[   r   r   r   Útest_return_typeÊ   s   
zPKCS1_15_Tests.test_return_typeN)r.   r/   r0   r%   r4   r=   r@   rD   rI   rO   rW   r\   r^   rb   r   r   r   r   r   3   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 )ÚTestVectorsWycheproofc                 C   s"   t j | ¡ || _|| _d| _d S )NÚNone)ÚunittestÚTestCaser)   Ú_wycheproof_warningsÚ_skip_slow_testsÚ_id)r$   Úwycheproof_warningsÚskip_slow_testsr   r   r   r)   Õ   s   
zTestVectorsWycheproof.__init__c                 C   s$   dd„ }t d|d| d|id�}|S )Nc                 S   s   t  | d ¡S )NÚprivateKeyPem)r   Ú
import_key)Úgroupr   r   r   Ú
filter_rsaÝ   s   z4TestVectorsWycheproof.load_tests.<locals>.filter_rsa)ÚCipherÚ
wycheproofzWycheproof PKCS#1v1.5 (%s)Úrsa_key)Ú	group_tagr   )r$   Úfilenamero   Úresultr   r   r   Ú
load_testsÛ   s   ýz TestVectorsWycheproof.load_testsc                 C   sJ   g | _ | j  |  d¡¡ | js#| j  |  d¡¡ | j  |  d¡¡ d S d S )Nzrsa_pkcs1_2048_test.jsonzrsa_pkcs1_3072_test.jsonzrsa_pkcs1_4096_test.json)ÚtvÚextendrv   rh   r#   r   r   r   r%   ç   s   þzTestVectorsWycheproof.setUpc                 C   s   | j S r*   )ri   r#   r   r   r   ÚshortDescriptionî   s   z&TestVectorsWycheproof.shortDescriptionc                 C   s6   |j r| jrdd l}| d| j|jf ¡ d S d S d S )Nr   zWycheproof warning: %s (%s))Úwarningrg   ÚwarningsÚwarnri   Úcomment)r$   rw   r{   r   r   r   r|   ñ   s   þzTestVectorsWycheproof.warnc                 C   sœ   d|j  | _dtdt|jƒƒ }t |j¡}z
|j|j	|d�}W n t
y/   |jr,J ‚Y d S w ||kr;|jr9J ‚d S |js@J ‚|  ||j¡ |  |¡ d S )Nz&Wycheproof Decrypt PKCS#1v1.5 Test #%srK   r2   )rS   )Úidri   Úmaxr   Úmsgr6   r   rr   rB   r<   r   Úvalidr8   r|   )r$   rw   rS   r;   r?   r   r   r   Útest_decryptö   s   ÿ
z"TestVectorsWycheproof.test_decryptc                 C   s   | j D ]}|  |¡ qd S r*   )rw   r‚   )r$   rw   r   r   r   ÚrunTest  s   
ÿzTestVectorsWycheproof.runTestN)
r.   r/   r0   r)   rv   r%   ry   r|   r‚   rƒ   r   r   r   r   rc   Ó   s    rc   c                 C   s:   |   d¡ }|   d¡}g }|ttƒ7 }|t||ƒg7 }|S )NÚ
slow_testsrj   )Úgetr   r   rc   )Úconfigrk   rj   Útestsr   r   r   Ú	get_tests  s   
rˆ   Ú__main__c                   C   s   t  tƒ ¡S r*   )re   Ú	TestSuiterˆ   r   r   r   r   Úsuite  s   r‹   )ÚdefaultTest)Ú
__future__r   re   ÚCryptodome.PublicKeyr   ÚCryptodome.SelfTest.st_commonr   r   Ú
Cryptodomer   ÚCryptodome.Cipherr   r6   ÚCryptodome.Util.py3compatr   ÚCryptodome.Util.numberr	   r
   ÚCryptodome.SelfTest.loaderr   r   r   rf   r   rc   rˆ   r.   r‹   Úmainr   r   r   r   Ú<module>   s&    !9
ý