
    ¿ig*                        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
 Zd Z G d dej                  Z G d dej                  Zi fdZedk    rd Z ej        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                 <    dD ]}|                      |d          } | S )z6Remove white spaces, tabs, and new lines from a string)
	  )replace)tcs     d/var/www/html/afkarena/venv/lib/python3.11/site-packages/Cryptodome/SelfTest/Cipher/test_pkcs1_15.pyrwsr   $   s+      IIaH    c                     t          t          |                     }t          |          dz  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   cleans     r   t2br   +   sC    c!ffIIE
5zzA~=>>>5>>r   c                   N    e Zd Zd ZdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZdS )PKCS1_15_Testsc                 ~    t          j                    j        | _        t	          j        d| j                  | _        d S )Ni   )r   newreadrngr   generatekey1024selfs    r   setUpzPKCS1_15_Tests.setUp5   s+    !:<<,"|D$(;;r   ))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           
      n   | j         D ]}t          j        |d                   } G d d          }t          j        | |t          |d                                       }|                    t          |d                             }|                     |t          |d                              d S )Nr   c                       e Zd Zd Zd ZdS ),PKCS1_15_Tests.testEncrypt1.<locals>.randGenc                 "    || _         d| _        d S )Nr   dataidx)r)   r0   s     r   __init__z5PKCS1_15_Tests.testEncrypt1.<locals>.randGen.__init__s   s    ,0	+,r   c                 ^    | j         | j        | j        |z            }| xj        |z  c_        |S Nr/   )r)   Nrs      r   __call__z5PKCS1_15_Tests.testEncrypt1.<locals>.randGen.__call__v   s/    $(Idhtxz.A$B $A'(r   N)__name__
__module____qualname__r2   r7    r   r   randGenr-   r   s2        - - -) ) ) ) )r   r<      )randfuncr   r   )		_testDatar   	importKeyPKCSr#   r   encryptr	   assertEqual)r)   testkeyr<   ciphercts         r   testEncrypt1zPKCS1_15_Tests.testEncrypt1l   s     N ; ;D!mDG44) ) ) ) ) ) ) ) "&#DG8M8M!N!N!N#^^Ad1gJJ77((Sa\\::::!; ;r   c                 ~    d}t          j        | j                  }|                     t          |j        |           d S )Nzv                                                                                                                      )rA   r#   r'   assertRaisesr   rB   )r)   ptrF   s      r   testEncrypt2zPKCS1_15_Tests.testEncrypt2   s8    &$,//!!*fnbAAAAAr   c                    | j         D ]}t          j        |d                   }t          |d                   }t	          |d                   }t          j        |          }|                    |d           }|                     ||           |                    |dt          |          z            }|                     ||           d S )Nr   r   r      )
r?   r   r@   r	   r   rA   r#   decryptrC   r   )r)   rD   rE   expected_ptrG   rF   rK   s          r   testVerify1zPKCS1_15_Tests.testVerify1   s     2 2mDG,,Qjja\\# ^^B--  [111^^B#k2B2B(BCC  [11112 2r   c                    t          j        | 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   ---)rA   r#   r'   rJ   r   rO   r	   r
   _encryptr   rC   )r)   rF   rK   pt_intct_intrG   s         r   testVerify2zPKCS1_15_Tests.testVerify2   s     Xdl++Fj&.*eLLLj&.*eLLL >??B"2&&F\**622Fvs++BVV^^B%?%?@@@@@r   c                    t          dd          D ]t}|                     |          }t          j        | j                  }|                    |          }|                    |d|z            }|                     ||           ud S )Nr   v      )ranger%   rA   r#   r'   rB   rO   rC   )r)   pt_lenrK   rF   rG   pt2s         r   testEncryptVerify1z!PKCS1_15_Tests.testEncryptVerify1   s      <00 * *XXf%%$,//^^B''nnR6)9::  S))))* *r   c                 x   t          j        | j                  }d}|                    |          }d}|                    ||d          }|                     ||           |                    ||d          }|                     ||           |                    ||d          }|                     ||           d S )Ns   5555555555555555s            )rA   r#   r'   rB   rO   rC   )r)   rF   rK   rG   sentinelpt_Apt_Bpt_Cs           r   test_encrypt_verify_exp_pt_lenz-PKCS1_15_Tests.test_encrypt_verify_exp_pt_len   s    Xdl++FB##B#H>>"h33DR&&&>>"h33DXt,,,>>"h33DXt,,,,,r   c                    d}t          j        | j                  }|                    t	          |                    }|                    t	          |          dt          |          z            }|                     ||           d S )N   XER   ÿ)rA   r#   r'   rB   	bytearrayrO   r   rC   r)   rK   rF   rG   r]   s        r   testByteArrayzPKCS1_15_Tests.testByteArray   so    BXdl++F	"..B..2R0@AACR%%%%%r   c                 F   d}t          j        | j                  }|                    t	          t          |                              }|                    t	          t          |                    dt          |          z            }|                     ||           d S )Nri   rN   )	rA   r#   r'   rB   
memoryviewrk   rO   r   rC   rl   s        r   testMemoryviewzPKCS1_15_Tests.testMemoryview   s    BXdl++F
9R== 9 9::B..IbMM!:!:Gc"gg<MNNCR%%%%%r   c                 2   d}t          j        | j                  }|                    |          }|                     t          |t                               |                    |d          }|                     t          |t                               d S )Ns   XYZs   )rA   r#   r'   rB   
assertTrue
isinstancebytesrO   rl   s        r   test_return_typezPKCS1_15_Tests.test_return_type   sz    BXdl++F##BOOJr511222..[11COOJsE2233333r   N)r8   r9   r:   r*   r?   rH   rL   rQ   rW   r^   rg   rm   rp   ru   r;   r   r   r!   r!   3   s        	< 	< 	<*
	X	; 	; 	;&	B 	B 	B	2 	2 	2	A 	A 	A	* 	* 	*	- 	- 	- 	& 	& 	&	& 	& 	&	4 	4 	4 	4 	4r   r!   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestVectorsWycheproofc                 n    t           j                            |            || _        || _        d| _        d S )NNone)unittestTestCaser2   _wycheproof_warnings_skip_slow_tests_id)r)   wycheproof_warningsskip_slow_testss      r   r2   zTestVectorsWycheproof.__init__   s4    ""4((($7! /r   c                 <    d }t          d|d|z  d|i          }|S )Nc                 6    t          j        | d                   S )NprivateKeyPem)r   
import_key)groups    r   
filter_rsaz4TestVectorsWycheproof.load_tests.<locals>.filter_rsa   s    >%"8999r   )Cipher
wycheproofzWycheproof PKCS#1v1.5 (%s)rsa_key)	group_tagr   )r)   filenamer   results       r   
load_testsz TestVectorsWycheproof.load_tests   sD    	: 	: 	: ..F.6.JX.U9BJ8O0 0 0
 r   c                 4   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extendr   r}   r(   s    r   r*   zTestVectorsWycheproof.setUp   s    t'ABBCCC$ 	HGNN4??+EFFGGGGNN4??+EFFGGGGG	H 	Hr   c                     | j         S r4   )r~   r(   s    r   shortDescriptionz&TestVectorsWycheproof.shortDescription   s	    xr   c                 ~    |j         r3| j        r.dd l}|                    d| j        d|j        d           d S d S d S )Nr   zWycheproof warning: z ())warningr|   warningswarnr~   comment)r)   r   r   s      r   r   zTestVectorsWycheproof.warn   sd    : 	R$3 	ROOOMMM4888RZZZPQQQQQ	R 	R 	R 	Rr   c                    d|j         z  | _        dt          dt          |j                            z  }t          j        |j                  }	 |                    |j	        |          }||k    r|j
        rJ d S |j
        sJ |                     ||j                   |                     |           d S # t          $ r |j
        rJ Y d S w xY w)Nz&Wycheproof Decrypt PKCS#1v1.5 Test #%srZ   r=   )rc   )idr~   maxr   msgrA   r#   r   rO   rG   validrC   r   r   )r)   r   rc   rF   rK   s        r   test_decryptz"TestVectorsWycheproof.test_decrypt   s    ;beCSCKK000"*%%
	99B X~~8#####x  RV,,,		"  	  	  	 x	 s   B7 7CCc                 D    | j         D ]}|                     |           d S r4   )r   r   )r)   r   s     r   runTestzTestVectorsWycheproof.runTest  s4    ' 	" 	"Bb!!!!	" 	"r   N)
r8   r9   r:   r2   r   r*   r   r   r   r   r;   r   r   rw   rw      s          
 
 
H H H  R R R
   " " " " "r   rw   c                     |                      d           }|                      d          }g }|t          t                    z  }|t          ||          gz  }|S )N
slow_testsr   )getr   r!   rw   )configr   r   testss       r   	get_testsr     s^     **\222O **%:;;E	_^,,,E	#$7IIJJELr   __main__c                  B    t          j        t                                S r4   )rz   	TestSuiter   r;   r   r   suiter     s    !)++...r   r   )defaultTest)
__future__r   rz   Cryptodome.PublicKeyr   Cryptodome.SelfTest.st_commonr   r   
Cryptodomer   Cryptodome.Cipherr   rA   Cryptodome.Util.py3compatr	   Cryptodome.Util.numberr
   r   Cryptodome.SelfTest.loaderr   r   r   r{   r!   rw   r   r8   r   mainr;   r   r   <module>r      s  . & % % % % %  $ $ $ $ $ $ B B B B B B B B       0 0 0 0 0 0 ' ' ' ' ' ' ? ? ? ? ? ? ? ? C C C C C C    ]4 ]4 ]4 ]4 ]4X& ]4 ]4 ]4@6" 6" 6" 6" 6"H- 6" 6" 6"r      z/ / /HMg&&&&&& r   