
    ,h=              	          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      xs g Z! e"e!      D ]K  \  Z#Z$ e%e$e&      r e'e$d      re$jP                  Z)' e'e$d      r1 ee$jT                  jW                               Z,e,j[                  e$j\                        Z/ ej`                  e)e$jb                  fD  cg c]
  }  e|        c}       Z2e$jf                   ed      k7  r8 ee$jf                        Z4 ejZ                  e2 e5e$jf                        e4      Z6n ejZ                  e2d       Z6e/e6e$jn                  fd Z8e/e6e$jn                  fd!Z9e$jt                  dk(  r e;e d"e#z  e8       ? e;e d#e#z  e9       N  G d$ d%e j:                        Z< G d& d'e j:                        Z= edd(d)d*d+ i      xs g Z>e> edd,d-d*d. i      xs g z  Z> e"e>      D ]'  \  Z#Z$ e%e$e&      r e'e$d      re$jP                  Z)' e'e$d/      r> ej`                  e)e$jb                  e$j~                  fD  cg c]
  }  e|        c}       Z@n ee$jT                  jW                               Z,e,j[                  e$j\                        Z/e$jf                   ed      k7  r8 ee$jf                        Z4 ejZ                  e@ e5e$jf                        e4      ZAn ejZ                  e@d       ZAe/eAe$jn                  fd0ZB e;e=d1e#z  eB       *  G d2 d3e j:                        ZC G d4 d5e j:                        ZDd6 ZE G d7 d8e j:                        ZFi fd9ZGeHd:k(  rd; ZI e j                  d<=       yyc c} w c c} w )>    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                 F    t        d| z   t               t               dg      S )NzCrypto.Hash.new)
__import__globalslocals)	hash_names    d/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/Crypto/SelfTest/Signature/test_pss.pyload_hash_by_namer   /   s    ny0')VXwOO    c                       e Zd Zd Zd Zy)PRNGc                      || _         d| _        y )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   s2    TXXdhh&9:Hr   N)__name__
__module____qualname__r$   r)    r   r   r   r   3   s    r   r   c                   *    e Zd ZdZdZdZd Zd Zd Zy)	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                  || j                         y r&   )	r   
import_keyrsa_keyr   r   msgr   verifytag)r#   keyhverifiers       r   test_positive_1zPSS_Tests.test_positive_1E   sE    nnT\\*JJtxx 773<488$r   c                    t        j                  | j                        }t        j                  | j
                  dz         }t        j                  |      }t        | j                        }| j                  t        |j                  ||       y )N   Ar   r1   r2   r   r   r3   r   	bytearrayr5   assertRaises
ValueErrorr4   r#   r6   r7   r8   r5   s        r   test_negative_1zPSS_Tests.test_negative_1K   s]    nnT\\*JJtxx$'773<!*hooq#>r   c                    t        j                  | j                        }t        j                  | j
                        }t        j                  |d      }t        | j                        }| j                  t        |j                  ||       y )Ni  
salt_bytesr<   r@   s        r   test_negative_2zPSS_Tests.test_negative_2R   s\    nnT\\*JJtxx 77340!*hooq#>r   N)	r*   r+   r,   r2   r3   r5   r9   rA   rE   r-   r   r   r/   r/   ?   s&     vG
C vC%??r   r/   c                   $    e Zd Zd Zd Zd Zd Zy)FIPS_PKCS1_Verify_Testsc                      y)NzFIPS PKCS1 Tests (Verify)r-   r#   s    r   shortDescriptionz(FIPS_PKCS1_Verify_Tests.shortDescription\   s    *r   c                     t        |      }|j                  |      }t        j                  |t        |      |      }|j	                  ||       y NrD   	rand_func)r   r   r   lenr4   	r#   hashmodmessage
public_keysalt	signatureprnghashedr8   s	            r   verify_positivez'FIPS_PKCS1_Verify_Tests.verify_positive_   s=    DzW%77:#d)tL	*r   c                     t        |      }|j                  |      }t        j                  |t        |      |      }| j	                  t
        |j                  ||       y rL   )r   r   r   rO   r>   r?   r4   rP   s	            r   verify_negativez'FIPS_PKCS1_Verify_Tests.verify_negativee   sG    DzW%77:#d)tL*hoovyIr   c                     t        j                  d      j                         }t        j                  |      }| j                  |j                         d       y )N   F)r   generaterS   r   r   assertEqualcan_sign)r#   test_public_keyr8   s      r   test_can_signz%FIPS_PKCS1_Verify_Tests.test_can_signk   s@    ,,t,77977?+**,e4r   N)r*   r+   r,   rJ   rX   rZ   ra   r-   r   r   rG   rG   Z   s    ++J5r   rG   c                       e Zd Zy)FIPS_PKCS1_Verify_Tests_KATNr*   r+   r,   r-   r   r   rc   rc   q       r   rc   )	Signaturez	PKCS1-PSSzSigVerPSS_186-3.rspzSignature Verification 186-3c                     | S r&   r-   xs    r   <lambda>rj   x   s     r   c                     | S r&   r-   rh   s    r   rj   rj   y   s     r   )shaalgr(   np rM   rC   c                 (    |j                  ||       y r&   )r4   r#   hash_objr8   rU   s       r   positive_testrs      s    ),r   c                 H    | j                  t        |j                  ||       y r&   )r>   r?   r4   rq   s       r   negative_testru      s    *hooxKr   ztest_positive_%dztest_negative_%dc                       e Zd Zd Zd Zy)FIPS_PKCS1_Sign_Testsc                      y)NzFIPS PKCS1 Tests (Sign)r-   rI   s    r   rJ   z&FIPS_PKCS1_Sign_Tests.shortDescription   s    (r   c                     t        j                  d      }t        j                  |      }| j	                  |j                         d       y )Nr\   T)r   r]   r   r   r^   r_   )r#   test_private_keysigners      r   ra   z#FIPS_PKCS1_Sign_Tests.test_can_sign   s7    <<-)**D1r   N)r*   r+   r,   rJ   ra   r-   r   r   rw   rw      s    )2r   rw   c                       e Zd Zy)FIPS_PKCS1_Sign_Tests_KATNrd   r-   r   r   r}   r}      re   r   r}   zSigGenPSS_186-2.txtzSignature Generation 186-2rl   c                     | S r&   r-   rh   s    r   rj   rj          Q r   zSigGenPSS_186-3.txtzSignature Generation 186-3c                     | S r&   r-   rh   s    r   rj   rj      r   r   ec                 J    |j                  |      }| j                  ||       y r&   )signr^   )r#   rr   r{   r(   rU   s        r   new_testr      s     KK)	F+r   ztest_%dc                       e Zd ZdZd Zd Zy)PKCS1_Legacy_Module_TestszVerify that the legacy module Crypto.Signature.PKCS1_PSS
    behaves as expected. The only difference is that the verify()
    method returns True/False and does not raise exceptions.c                      y)Nz&Test legacy Crypto.Signature.PKCS1_PSSr-   rI   s    r   rJ   z*PKCS1_Legacy_Module_Tests.shortDescription   s    7r   c                    t        j                  d      }t        j                  t	        d            }t        j                  |      j                  |      }t        j                  |j                               }| j                  |j                  ||      d       t        |t        d      t        |      z        }| j                  |j                  ||      d       y )Nr\   TestT   F)r   r]   r
   r   r   r   r   rS   r^   r4   r   r   rO   )r#   r6   rW   good_signaturer8   bad_signatures         r   runTestz!PKCS1_Legacy_Module_Tests.runTest   s    ll4 !F)$"s+008==!12@$G ~tAw^9L/LM?Gr   N)r*   r+   r,   __doc__rJ   r   r-   r   r   r   r      s    @8
Hr   r   c                       e Zd Zd Zd Zy)PKCS1_All_Hashes_Testsc                      y)Nz8Test PKCS#1 PSS signature in combination with all hashesr-   rI   s    r   rJ   z'PKCS1_All_Hashes_Tests.shortDescription   s    Ir   c                    t        j                  d      }t        j                  |      }d}|D ]6  }t	        |      j                  t        d            }|j                  |       8 ddlm}m	} dD ]/  }|j                  |t        d            }	|j                  |	       1 dD ]/  }|j                  |t        d            }
|j                  |
       1 y )	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   Crypto.Hashr   r   )r#   r6   r{   
hash_namesnamerW   r   r   	hash_sizehashed_bhashed_ss              r   r   zPKCS1_All_Hashes_Tests.runTest   s    ll4 F
  	 D&t,006;FKK	  	1) 	"I{{	&	{JHKK!	" * 	"I{{	&	{JHKK!	"r   N)r*   r+   r,   rJ   r   r-   r   r   r   r      s    J"r   r   c                    | 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 t        d| z         )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	#jj%0  
m	#jj%0  
i	  
i	  
i	
 	 
g	  3i?@@r   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestVectorsPSSWycheproofc                 ^    t         j                  j                  |        || _        d| _        y )NNone)unittestTestCaser$   _wycheproof_warnings_id)r#   wycheproof_warningss     r   r$   z!TestVectorsPSSWycheproof.__init__  s%    ""4($7!r   c                 T    d }d }d }d }d }t        d|d|z  |||||d	      }|S )
Nc                 2    t        j                  | d         S )NkeyPem)r   r1   groups    r   
filter_rsaz6TestVectorsPSSWycheproof.add_tests.<locals>.filter_rsa  s    >>%/22r   c                     t        | d         S )Nsha)r   r   s    r   
filter_shaz6TestVectorsPSSWycheproof.add_tests.<locals>.filter_sha  s    "5<00r   c                 2    | d   }|dvrt        d|z         y )Ntype)RsassaPssVerifyzUnknown type name )r?   )r   	type_names     r   filter_typez7TestVectorsPSSWycheproof.add_tests.<locals>.filter_type  s*    fI 55 !5	!ABB 6r   c                     | d   S )NsLenr-   r   s    r   filter_slenz7TestVectorsPSSWycheproof.add_tests.<locals>.filter_slen#  s    = r   c                 Z    | d   }|dvrt        d|z         t        | d         }|fd}|S )Nmgfr   zUnknown MGF mgfShac                     t        | ||      S r&   r   )ri   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&  s@    ,C*$ #!566'h8I& & Jr   )rf   
wycheproofzWycheproof PSS signature (%s))r6   r   r   r   r   )	group_tag)r	   )r#   filenamer   r   r   r   r   r(   s           r   	add_testsz"TestVectorsPSSWycheproof.add_tests  sT    	3	1	C
	!		 ..I.6.MPX.X@JHRAL@JAL	9NO r   c                 D   g | _         | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d	       y )
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   rI   s    r   setUpzTestVectorsPSSWycheproof.setUp;  s~    <==>>?BCBC>?>?>?/0r   c                     | j                   S r&   )r   rI   s    r   rJ   z)TestVectorsPSSWycheproof.shortDescriptionG  s    xxr   c                     |j                   r>| j                  r1dd l}|j                  d| j                  d|j
                  d       y y y )Nr   zWycheproof warning: z ())warningr   warningswarnr   comment)r#   r   r   s      r   r   zTestVectorsPSSWycheproof.warnJ  s4    ::$33MM488RZZPQ 4:r   c                    d|j                   |j                  fz  | _        |j                  j	                  |j
                        }t        j                  |j                  |j                  |j                        }	 |j                  ||j                        }|j                  sJ | j                  |       y # t        $ r)}|j                  rY d }~y |j                  rJ Y d }~y d }~ww xY w)Nz Wycheproof RSA PSS Test #%d (%s))	mask_funcrD   )idr   r   r   r   r3   r   r6   r   r   r4   sigvalidr   r?   r   )r#   r   
hashed_msgr{   rU   r   s         r   test_verifyz$TestVectorsPSSWycheproof.test_verifyO  s    5

8KK^^''/
266bggF	j"&&9I 88OIIbM  	 zzxxx	 s   =B9 9	C+C&C&&C+c                 H    | j                   D ]  }| j                  |        y r&   )r   r   )r#   r   s     r   r   z TestVectorsPSSWycheproof.runTest^  s#    '' 	!BR 	!r   N)
r*   r+   r,   r$   r   r   rJ   r   r   r   r-   r   r   r   r     s'    
#J
1R
!r   r   c                 h   | j                  d      }g }|t        t              z  }|t        t              z  }|t        t              z  }|t        t
              z  }|t        t              z  }| j                  d      r$|t        t              z  }|t        t              z  }|t        |      gz  }|S )Nr   
slow_tests)
getr   r/   rG   rw   r   r   rc   r}   r   )configr   testss      r   	get_testsr   c  s     **%:;E	_Y''E	_455E	_233E	_677E	_344Ezz,!<==!:;;	&':;<<ELr   __main__c                  <    t        j                  t                     S r&   )r   	TestSuiter   r-   r   r   suiter   w  s    !!)+..r   r   )defaultTest)Kr   Crypto.Util.py3compatr   r   Crypto.Util.numberr   Crypto.Util.strxorr   Crypto.SelfTest.st_commonr   Crypto.SelfTest.loaderr   r	   r   r
   r   r   r   r   Crypto.PublicKeyr   Crypto.Signaturer   r   Crypto.Signature.pssr   r   objectr   r   r/   rG   rc   test_vectors_verify	enumeratecountr   
isinstancestrhasattrrm   modulusrl   upperr   r   r3   rr   	constructr   rS   saltvalrV   rO   r8   srs   ru   r(   setattrrw   r}   test_vectors_signdprivate_keyr{   r   r   r   r   r   r   r*   r   mainrh   s   0r   <module>r     s  >  ) , % 5 R < <     & %P	6 	?!! ?65h// 5.	("3"3 	 ((B,A,J7B6A-CD J HJ	  ./ XIE2"cr3$$r3#BIIOO$56Krvv&H7BDD/JQa 0JKJ	zzQvYBJJ377:#bjj/TR377:!4%-BDD - &.BDD L 
yyC+-?%-GW+-?%-GW7X<2H-- 2	 1 1 	 &&@(=(D)1;(?A G EG 
 &'A(=(D)1;(?A G EGG 
 ,- DIE2"cr3$$r3#cmmrtt?T$U!]1%5$UV#BIIOO$56Krvv&H	zzQvYBJJRZZDQ3 ( , %y5'8(C-D2H 1 1 H*"X.. "4(Q!x00 Q!h  & z/HMMg& _  Kf %Vs   >O-
5O2
