
    ¿ig!5              	       $   d dl Z d dlZd dlmZ d dl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mZmZmZmZmZmZmZmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlm	Z	 d Z  G d dej!                  Z" G d dej!                  Z# edddd d d d          pg Z$ e%e$          D ]\  Z&Z' e(e'e)          r e*e'd          re'j+        Z,& e e'j-        .                                          Z/e/0                    e'j1                  Z2 ej3        d e,e'j4        fD                       Z5 ej0        e5          Z6e2e6e'j7        fdZ8e2e6e'j7        fdZ9e'j:        dk    r e;e#de&z  e9            e;e#de&z  e8            G d  d!ej!                  Z< G d" d#ej!                  Z= edd$d%d&d' i          pg Z>e> edd(d)d&d* i          pg z  Z> e%e>          D ]\  Z&Z' e(e'e)          r e*e'd          re'j+        Z,& e*e'd+          r8 ej3        d, e,e'j4        e'j?        fD                       Z@ ej0        e@          ZAj e e'j-        .                                          Z/e/0                    e'j1                  Z2e2eAe'j7        fd-ZB e;e=d.e&z  eB            G d/ d0ej!                  ZC G d1 d2ej!                  ZD G d3 d4ej!                  ZE G d5 d6ej!                  ZFi fd7ZGeHd8k    rd9 ZI ejJ        d:;           dS dS )<    N)	unhexlify)bchrbytes_to_long)strxor)list_test_cases)load_test_vectorsload_test_vectors_wycheproof)	SHA1SHA224SHA256SHA384SHA512SHA3_384SHA3_224SHA3_256SHA3_512)RSA)pkcs1_15)
PKCS1_v1_5)pycryptodome_filenamec                 ^    t          d| z   t                      t                      dg          S )NzCryptodome.Hash.new)
__import__globalslocals)	hash_names    g/var/www/html/afkarena/venv/lib/python3.11/site-packages/Cryptodome/SelfTest/Signature/test_pkcs1_15.pyload_hash_by_namer   3   s&    (94giiE7SSS    c                       e Zd Zd Zd ZdS )FIPS_PKCS1_Verify_Testsc                     dS )NzFIPS PKCS1 Tests (Verify) selfs    r   shortDescriptionz(FIPS_PKCS1_Verify_Tests.shortDescription9   s    **r    c                     t          j        d                                          }t          j        |          }|                     |                                d           d S )N   F)r   generate
public_keyr   r   assertEqualcan_sign)r&   test_public_keyverifiers      r   test_can_signz%FIPS_PKCS1_Verify_Tests.test_can_sign<   sT    ,t,,7799<00**,,e44444r    N__name__
__module____qualname__r'   r0   r$   r    r   r"   r"   7   s2        + + +5 5 5 5 5r    r"   c                       e Zd ZdS )FIPS_PKCS1_Verify_Tests_KATNr2   r3   r4   r$   r    r   r6   r6   B           Dr    r6   )	Signaturez
PKCS1-v1.5zSigVer15_186-3.rspzSignature Verification 186-3c                     | S Nr$   xs    r   <lambda>r>   I       a r    c                      t          |           S r;   )intr<   s    r   r>   r>   J   s    Q r    c                     | S r;   r$   r<   s    r   r>   r>   K   r?   r    )shaalgdresultnc                 ,    g | ]}t          |          S r$   r   .0r=   s     r   
<listcomp>rJ   W   s     JJJQa 0 0JJJr    c                 2    |                     ||           d S r;   )verifyr&   hash_objr/   	signatures       r   positive_testrP   Z   s    ),,,,,r    c                 J    |                      t          |j        ||           d S r;   )assertRaises
ValueErrorrL   rM   s       r   negative_testrT   ]   s$    *hoxKKKKKr    fztest_negative_%dztest_positive_%dc                       e Zd Zd Zd ZdS )FIPS_PKCS1_Sign_Testsc                     dS )NzFIPS PKCS1 Tests (Sign)r$   r%   s    r   r'   z&FIPS_PKCS1_Sign_Tests.shortDescriptionh   s    ((r    c                     t          j        d          }t          j        |          }|                     |                                d           d S )Nr)   T)r   r*   r   r   r,   r-   )r&   test_private_keysigners      r   r0   z#FIPS_PKCS1_Sign_Tests.test_can_signk   sH    <--.//**D11111r    Nr1   r$   r    r   rW   rW   f   s2        ) ) )2 2 2 2 2r    rW   c                       e Zd ZdS )FIPS_PKCS1_Sign_Tests_KATNr7   r$   r    r   r]   r]   q   r8   r    r]   zSigGen15_186-2.txtzSignature Generation 186-2rC   c                     | S r;   r$   r<   s    r   r>   r>   x       Q r    zSigGen15_186-3.txtzSignature Generation 186-3c                     | S r;   r$   r<   s    r   r>   r>   }   r_   r    ec                 ,    g | ]}t          |          S r$   r   rH   s     r   rJ   rJ      s     $U$U$U!]1%5%5$U$U$Ur    c                 \    |                     |          }|                     ||           d S r;   )signr,   )r&   rN   r[   rE   rO   s        r   new_testre      s/    KK))	F+++++r    ztest_%dc                   :    e Zd ZdZdZdZdZ ee          Zd Z	dS )PKCS1_15_NoParamszVerify that PKCS#1 v1.5 signatures pass even without NULL parameters in
    the algorithm identifier (PyCrypto/LP bug #1119552).aP  -----BEGIN RSA PRIVATE KEY-----
            MIIBOwIBAAJBAL8eJ5AKoIsjURpcEoGubZMxLD7+kT+TLr7UkvEtFrRhDDKMtuII
            q19FrL4pUIMymPMSLBn3hJLe30Dw48GQM4UCAwEAAQJACUSDEp8RTe32ftq8IwG8
            Wojl5mAd1wFiIOrZ/Uv8b963WJOJiuQcVN29vxU5+My9GPZ7RA3hrDBEAoHUDPrI
            OQIhAPIPLz4dphiD9imAkivY31Rc5AfHJiQRA7XixTcjEkojAiEAyh/pJHks/Mlr
            +rdPNEpotBjfV4M4BkgGAA/ipcmaAjcCIQCHvhwwKVBLzzTscT2HeUdEeBMoiXXK
            JACAr3sJQJGxIQIgarRp+m1WSKV1MciwMaTOnbU7wxFs9DP1pva76lYBzgUCIQC9
            n0CnZCJ6IZYqSt0H5N7+Q+2Ro64nuwV/OSQfM6sBwQ==
            -----END RSA PRIVATE KEY-----s   This is a test
ڀa287a13517f716e72fb14eea8e33a8db4a4643314607e7ca3e3e281893db74013dda8b855fd99f6fecedcb25fcb7a434f35cd0a101f8b19348e0bd7b6f152dfcc                     t          j        t          j        | j                            }t          j        | j                  }|                    || j                   d S r;   )	r   r   r   	importKeyrsakeyr   msgrL   rO   )r&   r/   hasheds      r   runTestzPKCS1_15_NoParams.runTest   sJ    <dk : :;;$(##/////r    N)
r2   r3   r4   __doc__rk   rl   sig_strr   rO   rn   r$   r    r   rg   rg      sS        < <-F  C%G 	'""I0 0 0 0 0r    rg   c                       e Zd ZdZd Zd ZdS )PKCS1_Legacy_Module_TestszVerify that the legacy module Cryptodome.Signature.PKCS1_v1_5
    behaves as expected. The only difference is that the verify()
    method returns True/False and does not raise exceptions.c                     dS )Nz+Test legacy Cryptodome.Signature.PKCS1_v1_5r$   r%   s    r   r'   z*PKCS1_Legacy_Module_Tests.shortDescription   s    <<r    c                    t          j        t          j                  }t	          j        d          }t          j        |                              |          }t          j        |                                          }| 	                    |
                    ||          d           t          |t          d          t          |          z            }| 	                    |
                    ||          d           d S )N   TestT   F)r   rj   rg   rk   r   r   r   rd   r+   r,   rL   r   r   len)r&   keyrm   good_signaturer/   bad_signatures         r   rn   z!PKCS1_Legacy_Module_Tests.runTest   s    m-455'""#,,11&99>#.."2"233@@$GGG ~tAww^9L9L/LMM??GGGGGr    N)r2   r3   r4   ro   r'   rn   r$   r    r   rr   rr      sC        @ @= = =
H 
H 
H 
H 
Hr    rr   c                       e Zd Zd Zd ZdS )PKCS1_All_Hashes_Testsc                     dS )Nz8Test PKCS#1v1.5 signature in combination with all hashesr$   r%   s    r   r'   z'PKCS1_All_Hashes_Tests.shortDescription   s    IIr    c                    t          j        d          }t          j        |          }d}|D ]9}t	          |                              d          }|                    |           :ddlm}m} dD ].}|                    |d          }	|                    |	           /dD ].}|                    |d          }
|                    |
           /d S )	Nr)   )MD2MD4MD5	RIPEMD160r   r   r   r   r   r   r   r   r   ru   r   )BLAKE2bBLAKE2s)       0   @   )digest_bytesdata)   r      r   )	r   r*   r   r   r   rd   Cryptodome.Hashr   r   )r&   rx   r[   
hash_namesnamerm   r   r   	hash_sizehashed_bhashed_ss              r   rn   zPKCS1_All_Hashes_Tests.runTest   s    l4  c""F
  	  	 D&t,,0099FKK44444444) 	" 	"I{{	{HHHKK!!!!) 	" 	"I{{	{HHHKK!!!!	" 	"r    N)r2   r3   r4   r'   rn   r$   r    r   r|   r|      s5        J J J" " " " "r    r|   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestVectorsWycheproofc                 `    t           j                            |            || _        d| _        d S )NNone)unittestTestCase__init___wycheproof_warnings_id)r&   wycheproof_warningss     r   r   zTestVectorsWycheproof.__init__   s,    ""4((($7!r    c                    g | _         |                     d           |                     d           |                     d           |                     d           |                     d           |                     d           |                     d           |                     d           |                     d	           |                     d
           |                     d           |                     d           |                     d           |                     d           |                     d           |                     d           |                     d           |                     d           |                     d           |                     d           |                     d           |                     d           d S )Nzrsa_sig_gen_misc_test.jsonz#rsa_signature_2048_sha224_test.jsonz#rsa_signature_2048_sha256_test.jsonz#rsa_signature_2048_sha384_test.jsonz%rsa_signature_2048_sha3_224_test.jsonz%rsa_signature_2048_sha3_256_test.jsonz%rsa_signature_2048_sha3_384_test.jsonz%rsa_signature_2048_sha3_512_test.jsonz#rsa_signature_2048_sha512_test.jsonz'rsa_signature_2048_sha512_224_test.jsonz'rsa_signature_2048_sha512_256_test.jsonz#rsa_signature_3072_sha256_test.jsonz#rsa_signature_3072_sha384_test.jsonz%rsa_signature_3072_sha3_256_test.jsonz%rsa_signature_3072_sha3_384_test.jsonz%rsa_signature_3072_sha3_512_test.jsonz#rsa_signature_3072_sha512_test.jsonz'rsa_signature_3072_sha512_256_test.jsonz#rsa_signature_4096_sha384_test.jsonz#rsa_signature_4096_sha512_test.jsonz'rsa_signature_4096_sha512_256_test.jsonzrsa_signature_test.json)tv	add_testsr%   s    r   setUpzTestVectorsWycheproof.setUp   s   3444<===<===<===>???>???>???>???<===@AAA@AAA<===<===>???>???>???<===@AAA<===<===@AAA011111r    c           	      L    d }d }d }t          d|d|z  |||d          }|S )Nc                 6    t          j        | d                   S )NkeyPem)r   
import_key)groups    r   
filter_rsaz3TestVectorsWycheproof.add_tests.<locals>.filter_rsa  s    >%/222r    c                    | d         }|dk    rt           S |dk    rt          j        d          S |dk    rt          j        d          S |dk    rt          S |d	k    rt          S |d
k    rt          S |dk    rt
          S |dk    rt          S |dk    rt          S |dk    rt          S |dk    rt          S t          d|z             )NshazSHA-512zSHA-512/224224)truncatezSHA-512/256256zSHA3-512zSHA-384zSHA3-384zSHA-256zSHA3-256zSHA-224zSHA3-224zSHA-1zUnknown hash algorithm: )r   r   r   r   r   r   r   r   r   r   rS   )r   r   s     r   
filter_shaz3TestVectorsWycheproof.add_tests.<locals>.filter_sha  s    eII%%m++z51111m++z51111j((i''j((i''j((i''j((g%% !;i!GHHHr    c                 B    | d         }|dvrt          d|z             d S )Ntype)RsassaPkcs1VerifyRsassaPkcs1GeneratezUnknown type name )rS   )r   	type_names     r   filter_typez4TestVectorsWycheproof.add_tests.<locals>.filter_type   s4    fI LLL !5	!ABBB MLr    )r9   
wycheproofz$Wycheproof PKCS#1v1.5 signature (%s))rsa_keyhash_modr   )	group_tag)r
   )r&   filenamer   r   r   rE   s         r   r   zTestVectorsWycheproof.add_tests   sy    	3 	3 	3	I 	I 	I6	C 	C 	C
 ..I.6.TW_._DNEOAL9N 9NO O O r    c                     | j         S r;   )r   r%   s    r   r'   z&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.warn0  sd    : 	R$3 	ROOOMMM4888RZZZPQQQQQ	R 	R 	R 	Rr    c                 ~   dt          |j                  z   | _        |j                            |j                  }t          j        |j                  }	 |                    ||j	                  }|j
        sJ |                     |           d S # t          $ r!}|j        rY d }~d S |j
        rJ Y d }~d S d }~ww xY w)NzWycheproof RSA PKCS$#1 Test #)stridr   hash_moduler   rl   r   rx   rL   sigvalidr   rS   r   )r&   r   
hashed_msgr[   rO   ra   s         r   test_verifyz!TestVectorsWycheproof.test_verify5  s    2SZZ?^''//
bf%%	j"&99I 8OOOIIbMMMMM  	  	  	 z x	 s   B 
B<B7(	B77B<c                 D    | j         D ]}|                     |           d S r;   )r   r   )r&   r   s     r   rn   zTestVectorsWycheproof.runTestD  s4    ' 	! 	!BR    	! 	!r    N)
r2   r3   r4   r   r   r   r'   r   r   rn   r$   r    r   r   r      s          
2 2 22+ + +Z  R R R
  ! ! ! ! !r    r   c                    |                      d          }g }|t          t                    z  }|t          t                    z  }|t          t                    z  }|t          t
                    z  }|t          t                    z  }|t          |          gz  }|                      d          r.|t          t                    z  }|t          t                    z  }|S )Nr   
slow_tests)
getr   r"   rW   rg   rr   r|   r   r6   r]   )configr   testss      r   	get_testsr   I  s     **%:;;E	_4555E	_2333E	_.///E	_6777E	_3444E	$%899;;Ezz, <!<===!:;;;Lr    __main__c                  B    t          j        t                                S r;   )r   	TestSuiter   r$   r    r   r>   r>   [  s    H&y{{33 r    suite)defaultTest)Kjsonr   binasciir   Cryptodome.Util.py3compatr   Cryptodome.Util.numberr   Cryptodome.Util.strxorr   Cryptodome.SelfTest.st_commonr   Cryptodome.SelfTest.loaderr	   r
   r   r   r   r   r   r   r   r   r   r   Cryptodome.PublicKeyr   Cryptodome.Signaturer   r   Cryptodome.Util._file_systemr   r   r   r"   r6   test_vectors_verify	enumeratecountr   
isinstancer   hasattrrF   modulusrC   upperr   r   rl   rN   	constructra   r+   r/   srP   rT   rE   setattrrW   r]   test_vectors_signrD   private_keyr[   re   rg   rr   r|   r   r   r2   r   mainr$   r    r   <module>r      sK  >         * * * * * * 0 0 0 0 0 0 ) ) ) ) ) ) 9 9 9 9 9 9 V V V V V V V V7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 $ $ $ $ $ $ ) ) ) ) ) ) + + + + + + > > > > > > ) ) ) ) ) )T T T5 5 5 5 5h/ 5 5 5	 	 	 	 	("3 	 	 	 ('(C!5!?,7K'7'7,7K"9 "9: : @
 >@  .// X XIE2z"c wr3 $##BIOO$5$566Krv&&HJJ7BD/JJJKKJx|J''H%-BD - - - - &.BD L L L L 
yC+-?%-GWWWW+-?%-GWWWW2 2 2 2 2H- 2 2 2	 	 	 	 	 1 	 	 	 '&'B(<(D)1;;(?A A G EG 
 &&'B(<(D)1;;(?A A G EGG 
 ,-- D DIE2z"c wr3 $wr3 #cm$U$Urt?T$U$U$UVVk**##BIOO$5$566Krv&&H ( , , , , G%y5'8(CCCC0 0 0 0 0) 0 0 0:H H H H H 1 H H H*" " " " "X. " " "4f! f! f! f! f!H- f! f! f!R     " z33EHMg&&&&&& r    