
    ¿ig=                     Z   d dl 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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 Z G d de          Z G d de j                  Z G d de j                  Z G d de j                  Z  e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$d          r4 ee$j*        +                                          Z,e,-                    e$j.                  Z/ ej0        d e)e$j1        fD                       Z2e$j3         ed          k    r2 ee$j3                  Z4 ej-        e2 e5e$j3                  e4          Z6n ej-        e2d            Z6e/e6e$j7        fd!Z8e/e6e$j7        fd"Z9e$j:        dk    r e;e d#e#z  e8            e;e d$e#z  e9           0 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$d0          r( ej0        d1 e)e$j1        e$j?        fD                       Z@[ ee$j*        +                                          Z,e,-                    e$j.                  Z/e$j3         ed          k    r2 ee$j3                  Z4 ej-        e@ e5e$j3                  e4          ZAn ej-        e@d            ZAe/eAe$j7        fd2ZB e;e=d3e#z  eB            G d4 d5e j                  ZC G d6 d7e j                  ZDd8 ZE G d9 d:e j                  ZFi fd;ZGeHd<k    rd= ZI e jJ        d>?           dS dS )@    N)bbchrbytes_to_long)strxor)list_test_cases)load_test_vectorsload_test_vectors_wycheproof)SHA1SHA224SHA256SHA384SHA512)RSA)pss)	PKCS1_PSSMGF1c                 ^    t          d| z   t                      t                      dg          S )NzCryptodome.Hash.new)
__import__globalslocals)	hash_names    b/var/www/html/afkarena/venv/lib/python3.11/site-packages/Cryptodome/SelfTest/Signature/test_pss.pyload_hash_by_namer   /   s&    (94giiE7SSS    c                       e Zd Zd Zd ZdS )PRNGc                 "    || _         d| _        d S )Nr   streamidx)selfr"   s     r   __init__zPRNG.__init__5   s    r   c                 ^    | j         | j        | j        |z            }| xj        |z  c_        |S Nr!   )r$   rnd_sizeresults      r   __call__zPRNG.__call__9   s1    TXdh&99:Hr   N)__name__
__module____qualname__r%   r*    r   r   r   r   3   s2              r   r   c                   ,    e Zd ZdZdZdZd Zd Zd ZdS )	PSS_Testss  -----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAsvI34FgiTK8+txBvmooNGpNwk23YTU51dwNZi5yha3W4lA/Q
vcZrDalkmD7ekWQwnduxVKa6pRSI13KBgeUOIqJoGXSWhntEtY3FEwvWOHW5AE7Q
jUzTzCiYT6TVaCcpa/7YLai+p6ai2g5f5Zfh4jSawa9uYeuggFygQq4IVW796MgV
yqxYMM/arEj+/sKz3Viua9Rp9fFosertCYCX4DUTgW0mX9bwEnEOgjSI3pLOPXz1
8vx+DRZS5wMCmwCUa0sKonLn3cAUPq+sGix7+eo7T0Z12MU8ud7IYVX/75r3cXiF
PaYE2q8Le0kgOApIXbb+x74x0rNgyIh1yGygkwIDAQABAoIBABz4t1A0pLT6qHI2
EIOaNz3mwhK0dZEqkz0GB1Dhtoax5ATgvKCFB98J3lYB08IBURe1snOsnMpOVUtg
aBRSM+QqnCUG6bnzKjAkuFP5liDE+oNQv1YpKp9CsUovuzdmI8Au3ewihl+ZTIN2
UVNYMEOR1b5m+z2SSwWNOYsiJwpBrT7zkpdlDyjat7FiiPhMMIMXjhQFVxURMIcB
jUBtPzGvV/PG90cVDWi1wRGeeP1dDqti/jsnvykQ15KW1MqGrpeNKRmDdTy/Ucl1
WIoYklKw3U456lgZ/rDTDB818+Tlnk35z4yF7d5ANPM8CKfqOPcnO1BCKVFzf4eq
54wvUtkCgYEA1Zv2lp06l7rXMsvNtyYQjbFChezRDRnPwZmN4NCdRtTgGG1G0Ryd
Yz6WWoPGqZp0b4LAaaHd3W2GTcpXF8WXMKfMX1W+tMAxMozfsXRKMcHoypwuS5wT
fJRXJCG4pvd57AB0iVUEJW2we+uGKU5Zxcx//id2nXGCpoRyViIplQsCgYEA1nVC
eHupHChht0Fh4N09cGqZHZzuwXjOUMzR3Vsfz+4WzVS3NvIgN4g5YgmQFOeKwo5y
iRq5yvubcNdFvf85eHWClg0zPAyxJCVUWigCrrOanGEhJo6re4idJvNVzu4Ucg0v
6B3SJ1HsCda+ZSNz24bSyqRep8A+RoAaoVSFx5kCgYEAn3RvXPs9s+obnqWYiPF3
Re5etE6Vt2vfNKwFxx6zaR6bsmBQjuUHcABWiHb6I71S0bMPI0tbrWGG8ibrYKl1
NTLtUvVVCOS3VP7oNTWT9RTFTAnOXU7DFSo+6o/poWn3r36ff6zhDXeWWMr2OXtt
dEQ1/2lCGEGVv+v61eVmmQUCgYABFHITPTwqwiFL1O5zPWnzyPWgaovhOYSAb6eW
38CXQXGn8wdBJZL39J2lWrr4//l45VK6UgIhfYbY2JynSkO10ZGow8RARygVMILu
OUlaK9lZdDvAf/NpGdUAvzTtZ9F+iYZ2OsA2JnlzyzsGM1l//3vMPWukmJk3ral0
qoJJ8QKBgGRG3eVHnIegBbFVuMDp2NTcfuSuDVUQ1fGAwtPiFa8u81IodJnMk2pq
iXu2+0ytNA/M+SVrAnE2AgIzcaJbtr0p2srkuVM7KMWnG1vWFNjtXN8fAhf/joOv
D+NmPL/N4uE57e40tbiU/H7KdyZaDt+5QiTmdhuyAe6CBjKsF2jy
-----END RSA PRIVATE KEY-----s   AAAs    [c5ذ!Dݹ`P>X5ݎŉP+ɯPL5k{=_R}b5Y~}l1-Vlk/o5Q$	=ABPG"~<p5 +c,\)voʆ95neQ@xɛUCT/ǕhCb1>jqkbsbm(`F.)/_Sv/DT:s</c                     t          j        | j                  }t          j        | j                  }t          j        |          }|                    || j                   d S r'   )	r   
import_keyrsa_keyr   r   msgr   verifytag)r$   keyhverifiers       r   test_positive_1zPSS_Tests.test_positive_1E   sM    nT\**Jtx  73<<48$$$$$r   c                    t          j        | j                  }t          j        | j        dz             }t          j        |          }t          | j                  }| 	                    t          |j        ||           d S )N   Ar   r2   r3   r   r   r4   r   	bytearrayr6   assertRaises
ValueErrorr5   r$   r7   r8   r9   r6   s        r   test_negative_1zPSS_Tests.test_negative_1K   sf    nT\**Jtx$''73<<!!*hoq#>>>>>r   c                    t          j        | j                  }t          j        | j                  }t          j        |d          }t          | j                  }| 	                    t          |j        ||           d S )Ni  
salt_bytesr=   rA   s        r   test_negative_2zPSS_Tests.test_negative_2R   si    nT\**Jtx  734000!!*hoq#>>>>>r   N)	r+   r,   r-   r3   r4   r6   r:   rB   rF   r.   r   r   r0   r0   ?   sV         vG
C vC% % %? ? ?? ? ? ? ?r   r0   c                   &    e Zd Zd Zd Zd Zd ZdS )FIPS_PKCS1_Verify_Testsc                     dS )NzFIPS PKCS1 Tests (Verify)r.   r$   s    r   shortDescriptionz(FIPS_PKCS1_Verify_Tests.shortDescription\   s    **r   c                     t          |          }|                    |          }t          j        |t          |          |          }|                    ||           d S NrE   	rand_func)r   r   r   lenr5   	r$   hashmodmessage
public_keysalt	signatureprnghashedr9   s	            r   verify_positivez'FIPS_PKCS1_Verify_Tests.verify_positive_   sT    DzzW%%7:#d))tLLL	*****r   c                     t          |          }|                    |          }t          j        |t          |          |          }|                     t
          |j        ||           d S rM   )r   r   r   rP   r?   r@   r5   rQ   s	            r   verify_negativez'FIPS_PKCS1_Verify_Tests.verify_negativee   s\    DzzW%%7:#d))tLLL*hovyIIIIIr   c                     t          j        d                                          }t          j        |          }|                     |                                d           d S )N   F)r   generaterT   r   r   assertEqualcan_sign)r$   test_public_keyr9   s      r   test_can_signz%FIPS_PKCS1_Verify_Tests.test_can_signk   sT    ,t,,77997?++**,,e44444r   N)r+   r,   r-   rK   rY   r[   rb   r.   r   r   rH   rH   Z   sS        + + ++ + +J J J5 5 5 5 5r   rH   c                       e Zd ZdS )FIPS_PKCS1_Verify_Tests_KATNr+   r,   r-   r.   r   r   rd   rd   q           Dr   rd   )	Signaturez	PKCS1-PSSzSigVerPSS_186-3.rspzSignature Verification 186-3c                     | S r'   r.   xs    r   <lambda>rk   x   s     r   c                     | S r'   r.   ri   s    r   rk   rk   y   s     r   )shaalgr)   npc                 ,    g | ]}t          |          S r.   r   .0rj   s     r   
<listcomp>rs      s     JJJQa 0 0JJJr    rN   rD   c                 2    |                     ||           d S r'   )r5   r$   hash_objr9   rV   s       r   positive_testrx      s    ),,,,,r   c                 J    |                      t          |j        ||           d S r'   )r?   r@   r5   rv   s       r   negative_testrz      s$    *hoxKKKKKr   ztest_positive_%dztest_negative_%dc                       e Zd Zd Zd ZdS )FIPS_PKCS1_Sign_Testsc                     dS )NzFIPS PKCS1 Tests (Sign)r.   rJ   s    r   rK   z&FIPS_PKCS1_Sign_Tests.shortDescription   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   rb   z#FIPS_PKCS1_Sign_Tests.test_can_sign   sH    <--)****D11111r   N)r+   r,   r-   rK   rb   r.   r   r   r|   r|      s2        ) ) )2 2 2 2 2r   r|   c                       e Zd ZdS )FIPS_PKCS1_Sign_Tests_KATNre   r.   r   r   r   r      rf   r   r   zSigGenPSS_186-2.txtzSignature Generation 186-2rm   c                     | S r'   r.   ri   s    r   rk   rk          Q r   zSigGenPSS_186-3.txtzSignature Generation 186-3c                     | S r'   r.   ri   s    r   rk   rk      r   r   ec                 ,    g | ]}t          |          S r.   r   rq   s     r   rs   rs      s     $U$U$U!]1%5%5$U$U$Ur   c                 \    |                     |          }|                     ||           d S r'   )signr_   )r$   rw   r   r)   rV   s        r   new_testr      s/    KK))	F+++++r   ztest_%dc                       e Zd ZdZd Zd ZdS )PKCS1_Legacy_Module_TestszVerify that the legacy module Cryptodome.Signature.PKCS1_PSS
    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_PSSr.   rJ   s    r   rK   z*PKCS1_Legacy_Module_Tests.shortDescription   s    ;;r   c                    t          j        d          }t          j        t	          d                    }t          j        |                              |          }t          j        |                                          }|                     |	                    ||          d           t          |t          d          t          |          z            }|                     |	                    ||          d           d S )Nr]   TestT   F)r   r^   r   r   r   r   r   rT   r_   r5   r   r   rP   )r$   r7   rX   good_signaturer9   bad_signatures         r   runTestz!PKCS1_Legacy_Module_Tests.runTest   s    l4  !F))$$"s++0088=!1!122@@$GGG ~tAww^9L9L/LMM??GGGGGr   N)r+   r,   r-   __doc__rK   r   r.   r   r   r   r      sC        @ @< < <
H 
H 
H 
H 
Hr   r   c                       e Zd Zd Zd ZdS )PKCS1_All_Hashes_Testsc                     dS )Nz8Test PKCS#1 PSS signature in combination with all hashesr.   rJ   s    r   rK   z'PKCS1_All_Hashes_Tests.shortDescription   s    IIr   c                    t          j        d          }t          j        |          }d}|D ]F}t	          |                              t          d                    }|                    |           Gddlm}m	} dD ];}|                    |t          d                    }	|                    |	           <dD ];}|                    |t          d                    }
|                    |
           <d S )	Ni   )MD2MD4MD5	RIPEMD160r   r   r   r   r   SHA3_224SHA3_256SHA3_384SHA3_512r   r   )BLAKE2bBLAKE2s)       0   @   )digest_bytesdata)   r      r   )
r   r^   r   r   r   r   r   Cryptodome.Hashr   r   )r$   r7   r   
hash_namesnamerX   r   r   	hash_sizehashed_bhashed_ss              r   r   zPKCS1_All_Hashes_Tests.runTest   s   l4  F
  	  	 D&t,,006;;FKK44444444) 	" 	"I{{	&		{JJHKK!!!!) 	" 	"I{{	&		{JJHKK!!!!	" 	"r   N)r+   r,   r-   rK   r   r.   r   r   r   r      s5        J J J" " " " "r   r   c                 &   | dk    rt           }n| dk    rt          j        d          }nf| dk    rt          j        d          }nJ| dk    rt          }n<| dk    rt          }n.| d	k    rt          }n | d
k    rt
          }nt          d| z             |S )NzSHA-512zSHA-512/224224)truncatezSHA-512/256256zSHA-384zSHA-256zSHA-224zSHA-1zUnknown hash algorithm: )r   r   r   r   r   r   r@   )r   hash_modules     r   get_hash_moduler      s    I	m	#	#j%000	m	#	#j%000	i			i			i			g		3i?@@@r   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestVectorsPSSWycheproofc                 `    t           j                            |            || _        d| _        d S )NNone)unittestTestCaser%   _wycheproof_warnings_id)r$   wycheproof_warningss     r   r%   z!TestVectorsPSSWycheproof.__init__  s,    ""4((($7!r   c                 \    d }d }d }d }d }t          d|d|z  |||||d	          }|S )
Nc                 6    t          j        | d                   S )NkeyPem)r   r2   groups    r   
filter_rsaz6TestVectorsPSSWycheproof.add_tests.<locals>.filter_rsa  s    >%/222r   c                 ,    t          | d                   S )Nsha)r   r   s    r   
filter_shaz6TestVectorsPSSWycheproof.add_tests.<locals>.filter_sha  s    "5<000r   c                 B    | d         }|dvrt          d|z             d S )Ntype)RsassaPssVerifyzUnknown type name )r@   )r   	type_names     r   filter_typez7TestVectorsPSSWycheproof.add_tests.<locals>.filter_type  s3    fI 555 !5	!ABBB 65r   c                     | d         S )NsLenr.   r   s    r   filter_slenz7TestVectorsPSSWycheproof.add_tests.<locals>.filter_slen#  s    = r   c                 v    | d         }|dvrt          d|z             t          | d                   }|fd}|S )Nmgfr   zUnknown MGF mgfShac                 $    t          | ||          S r'   r   )rj   ymhs      r   r   zCTestVectorsPSSWycheproof.add_tests.<locals>.filter_mgf.<locals>.mgf,  s    Aq"~~%r   )r@   r   )r   r   	mgf1_hashs      r   
filter_mgfz6TestVectorsPSSWycheproof.add_tests.<locals>.filter_mgf&  sX    ,C*$$ #!5666'h88I& & & & & Jr   )rg   
wycheproofzWycheproof PSS signature (%s))r7   r   r   r   r   )	group_tag)r
   )r$   filenamer   r   r   r   r   r)   s           r   	add_testsz"TestVectorsPSSWycheproof.add_tests  s    	3 	3 	3	1 	1 	1	C 	C 	C
	! 	! 	!		 		 		 ..I.6.MPX.X@JHRAL@JAL	9N 9NO O O r   c                    g | _         |                     d           |                     d           |                     d           |                     d           |                     d           |                     d           |                     d           |                     d           |                     d	           d S )
Nz#rsa_pss_2048_sha1_mgf1_20_test.jsonz$rsa_pss_2048_sha256_mgf1_0_test.jsonz%rsa_pss_2048_sha256_mgf1_32_test.jsonz)rsa_pss_2048_sha512_256_mgf1_28_test.jsonz)rsa_pss_2048_sha512_256_mgf1_32_test.jsonz%rsa_pss_3072_sha256_mgf1_32_test.jsonz%rsa_pss_4096_sha256_mgf1_32_test.jsonz%rsa_pss_4096_sha512_mgf1_32_test.jsonzrsa_pss_misc_test.json)tvr   rJ   s    r   setUpzTestVectorsPSSWycheproof.setUp;  s    <====>>>>???BCCCBCCC>???>???>???/00000r   c                     | j         S r'   )r   rJ   s    r   rK   z)TestVectorsPSSWycheproof.shortDescriptionG  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TestVectorsPSSWycheproof.warnJ  sd    : 	R$3 	ROOOMMM4888RZZZPQQQQQ	R 	R 	R 	Rr   c                    d|j         |j        fz  | _        |j                            |j                  }t          j        |j        |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 PSS Test #%d (%s))	mask_funcrE   )idr   r   r   r   r4   r   r7   r   r   r5   sigvalidr   r@   r   )r$   r   
hashed_msgr   rV   r   s         r   test_verifyz$TestVectorsPSSWycheproof.test_verifyO  s    5
8KK^''//
26bgFFF	j"&99I 8OOOIIbMMMMM  	  	  	 z x	 s   B 
C"B>/	B>>Cc                 D    | j         D ]}|                     |           d S r'   )r   r   )r$   r   s     r   r   z TestVectorsPSSWycheproof.runTest^  s4    ' 	! 	!BR    	! 	!r   N)
r+   r,   r-   r%   r   r   rK   r   r   r   r.   r   r   r   r     s          
# # #J
1 
1 
1  R R R
  ! ! ! ! !r   r   c                    |                      d          }g }|t          t                    z  }|t          t                    z  }|t          t                    z  }|t          t
                    z  }|t          t                    z  }|                      d          r.|t          t                    z  }|t          t                    z  }|t          |          gz  }|S )Nr   
slow_tests)
getr   r0   rH   r|   r   r   rd   r   r   )configr   testss      r   	get_testsr   c  s     **%:;;E	_Y'''E	_4555E	_2333E	_6777E	_3444Ezz, <!<===!:;;;	&':;;<<ELr   __main__c                  B    t          j        t                                S r'   )r   	TestSuiter   r.   r   r   suiter   w  s    !)++...r   r   )defaultTest)Kr   Cryptodome.Util.py3compatr   r   Cryptodome.Util.numberr   Cryptodome.Util.strxorr   Cryptodome.SelfTest.st_commonr   Cryptodome.SelfTest.loaderr	   r
   r   r   r   r   r   r   Cryptodome.PublicKeyr   Cryptodome.Signaturer   r   Cryptodome.Signature.pssr   r   objectr   r   r0   rH   rd   test_vectors_verify	enumeratecountr   
isinstancestrhasattrrn   modulusrm   upperr   r   r4   rw   	constructr   rT   saltvalrW   rP   r9   srx   rz   r)   setattrr|   r   test_vectors_signdprivate_keyr   r   r   r   r   r   r   r+   r   mainr.   r   r   <module>r     s  >  - - - - - - - - 0 0 0 0 0 0 ) ) ) ) ) ) 9 9 9 9 9 9 V V V V V V V V @ @ @ @ @ @ @ @ @ @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ * * * * * * ) ) ) ) ) )T T T	 	 	 	 	6 	 	 	? ? ? ? ?! ? ? ?65 5 5 5 5h/ 5 5 5.	 	 	 	 	("3 	 	 	 ('(B,A,J7B{6Ak-C -CD D J HJ	  .// X XIE2z"c wr3 $wr3 ##BIOO$5$566Krv&&HJJ7BD/JJJKKJ	zQQvYYtBJ37:##bj//TRRR37:!444%-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 	 	 	 &%&@(=(D)1;;(?A A G EG 
 &&'A(=(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##BIOO$5$566Krv&&H	zQQvYYtBJRZDQQQ333 ( , , , , G%y5'8(CCCCH H H H H 1 H H H*" " " " "X. " " "4  (Q! Q! Q! Q! Q!x0 Q! Q! Q!h     & z/ / /HMg&&&&&& r   