
    ,h4              	          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jB                        Z" G d dejB                        Z# edddd d d d      xs g Z$ e%e$      D ]  \  Z&Z' e(e'e)      r e*e'd      re'jV                  Z,& e e'jZ                  j]                               Z/e/ja                  e'jb                        Z2 ejf                  e,e'jh                  fD  cg c]
  }  e|        c}       Z5 ej`                  e5      Z6e2e6e'jn                  fdZ8e2e6e'jn                  fdZ9e'jt                  dk(  r e;e#de&z  e9        e;e#de&z  e8         G d d ejB                        Z< G d! d"ejB                        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'jV                  Z,& e*e'd*      rP ejf                  e,e'jh                  e'j~                  fD  cg c]
  }  e|        c}       Z@ ej`                  e@      ZA e e'jZ                  j]                               Z/e/ja                  e'jb                        Z2e2eAe'jn                  fd+ZB e;e=d,e&z  eB         G d- d.ejB                        ZC G d/ d0ejB                        ZD G d1 d2ejB                        ZE G d3 d4ejB                        ZFi fd5ZGeHd6k(  rd7 ZI ej                  d89       yyc c} w c c} w ):    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                 F    t        d| z   t               t               dg      S )NzCrypto.Hash.new)
__import__globalslocals)	hash_names    i/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/Crypto/SelfTest/Signature/test_pkcs1_15.pyload_hash_by_namer   3   s    ny0')VXwOO    c                       e Zd Zd Zd Zy)FIPS_PKCS1_Verify_Testsc                      y)NzFIPS PKCS1 Tests (Verify) selfs    r   shortDescriptionz(FIPS_PKCS1_Verify_Tests.shortDescription9   s    *r   c                     t        j                  d      j                         }t        j                  |      }| j                  |j                         d       y )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<   s@    ,,t,779<<0**,e4r   N__name__
__module____qualname__r&   r/   r#   r   r   r!   r!   7   s    +5r   r!   c                       e Zd Zy)FIPS_PKCS1_Verify_Tests_KATNr1   r2   r3   r#   r   r   r5   r5   B       r   r5   )	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                 (    |j                  ||       y r:   )verifyr%   hash_objr.   	signatures       r   positive_testrK   Z   s    ),r   c                 H    | j                  t        |j                  ||       y r:   )assertRaises
ValueErrorrG   rH   s       r   negative_testrO   ]   s    *hooxKr   fztest_negative_%dztest_positive_%dc                       e Zd Zd Zd Zy)FIPS_PKCS1_Sign_Testsc                      y)NzFIPS PKCS1 Tests (Sign)r#   r$   s    r   r&   z&FIPS_PKCS1_Sign_Tests.shortDescriptionh   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   r/   z#FIPS_PKCS1_Sign_Tests.test_can_signk   s7    <<-./*D1r   Nr0   r#   r   r   rR   rR   f   s    )2r   rR   c                       e Zd Zy)FIPS_PKCS1_Sign_Tests_KATNr6   r#   r   r   rX   rX   q   r7   r   rX   zSigGen15_186-2.txtzSignature Generation 186-2rB   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=   }   rZ   r   ec                 J    |j                  |      }| j                  ||       y r:   )signr+   )r%   rI   rV   rD   rJ   s        r   new_testr_      s     KK)	F+r   ztest_%dc                   2    e Zd ZdZdZdZdZ ee      Zd Z	y)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                  || j                         y r:   )	r   r   r   	importKeyrsakeyr
   msgrG   rJ   )r%   r.   hasheds      r   runTestzPKCS1_15_NoParams.runTest   sA    <<dkk :;$((#/r   N)
r1   r2   r3   __doc__re   rf   sig_strr   rJ   rh   r#   r   r   ra   ra      s-    <-F  C%G '"I0r   ra   c                       e Zd ZdZd Zd Zy)PKCS1_Legacy_Module_TestszVerify that the legacy module Crypto.Signature.PKCS1_v1_5
    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_v1_5r#   r$   s    r   r&   z*PKCS1_Legacy_Module_Tests.shortDescription   s    8r   c                    t        j                  t        j                        }t	        j
                  d      }t        j
                  |      j                  |      }t        j
                  |j                               }| j                  |j                  ||      d       t        |t        d      t        |      z        }| j                  |j                  ||      d       y )N   TestT   F)r   rd   ra   re   r
   r   r   r^   r*   r+   rG   r   r   len)r%   keyrg   good_signaturer.   bad_signatures         r   rh   z!PKCS1_Legacy_Module_Tests.runTest   s    mm-445'"#,11&9>>#.."23@$G ~tAw^9L/LM?Gr   N)r1   r2   r3   ri   r&   rh   r#   r   r   rl   rl      s    @9
Hr   rl   c                       e Zd Zd Zd Zy)PKCS1_All_Hashes_Testsc                      y)Nz8Test PKCS#1v1.5 signature in combination with all hashesr#   r$   s    r   r&   z'PKCS1_All_Hashes_Tests.shortDescription   s    Ir   c                 |   t        j                  d      }t        j                  |      }d}|D ]-  }t	        |      j                  d      }|j                  |       / ddlm}m} dD ]&  }|j                  |d      }	|j                  |	       ( dD ]&  }|j                  |d      }
|j                  |
       ( y )	Nr(   )MD2MD4MD5	RIPEMD160r
   r   r   r   r   r   r   r   r   ro   r   )BLAKE2bBLAKE2s)       0   @   )digest_bytesdata)   r      r   )	r   r)   r   r   r   r^   Crypto.Hashr}   r~   )r%   rr   rV   
hash_namesnamerg   r}   r~   	hash_sizehashed_bhashed_ss              r   rh   zPKCS1_All_Hashes_Tests.runTest   s    ll4 c"F
  	 D&t,009FKK	  	1) 	"I{{	{HHKK!	" * 	"I{{	{HHKK!	"r   N)r1   r2   r3   r&   rh   r#   r   r   rv   rv      s    J"r   rv   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestVectorsWycheproofc                 ^    t         j                  j                  |        || _        d| _        y )NNone)unittestTestCase__init___wycheproof_warnings_id)r%   wycheproof_warningss     r   r   zTestVectorsWycheproof.__init__   s%    ""4($7!r   c                    g | _         | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d	       | j                  d
       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       y )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<=<=<=>?>?>?>?<=@A@A<=<=>?>?>?<=@A<=<=@A01r   c           	      D    d }d }d }t        d|d|z  |||d      }|S )Nc                 2    t        j                  | d         S )NkeyPem)r   
import_key)groups    r   
filter_rsaz3TestVectorsWycheproof.add_tests.<locals>.filter_rsa  s    >>%/22r   c                 Z   | 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
   rN   )r   r   s     r   
filter_shaz3TestVectorsWycheproof.add_tests.<locals>.filter_sha  s    eII%m+zz511m+zz511j(i'j(i'j(i'j(g% !;i!GHHr   c                 2    | d   }|dvrt        d|z         y )Ntype)RsassaPkcs1VerifyRsassaPkcs1GeneratezUnknown type name )rN   )r   	type_names     r   filter_typez4TestVectorsWycheproof.add_tests.<locals>.filter_type   s+    fI LL !5	!ABB Mr   )r8   
wycheproofz$Wycheproof PKCS#1v1.5 signature (%s))rsa_keyhash_modr   )	group_tag)r	   )r%   filenamer   r   r   rD   s         r   r   zTestVectorsWycheproof.add_tests   sE    	3	I6	C
 ..I.6.TW_._DNEOAL9NO r   c                     | j                   S r:   )r   r$   s    r   r&   z&TestVectorsWycheproof.shortDescription-  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TestVectorsWycheproof.warn0  s4    ::$33MM488RZZPQ 4:r   c                    dt        |j                        z   | _        |j                  j	                  |j
                        }t        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 PKCS$#1 Test #)stridr   hash_moduler   rf   r   rr   rG   sigvalidr   rN   r   )r%   r   
hashed_msgrV   rJ   r\   s         r   test_verifyz!TestVectorsWycheproof.test_verify5  s    2SZ?^^''/
bff%	j"&&9I 88OIIbM  	 zzxxx	 s   #B 	C(C9CCc                 H    | j                   D ]  }| j                  |        y r:   )r   r   )r%   r   s     r   rh   zTestVectorsWycheproof.runTestD  s#    '' 	!BR 	!r   N)
r1   r2   r3   r   r   r   r&   r   r   rh   r#   r   r   r   r      s'    
22+ZR
!r   r   c                 h   | j                  d      }g }|t        t              z  }|t        t              z  }|t        t              z  }|t        t
              z  }|t        t              z  }|t        |      gz  }| j                  d      r$|t        t              z  }|t        t              z  }|S )Nr   
slow_tests)
getr   r!   rR   ra   rl   rv   r   r5   rX   )configr   testss      r   	get_testsr   I  s     **%:;E	_455E	_233E	_.//E	_677E	_344E	$%89;;Ezz,!<==!:;;Lr   __main__c                  <    t        j                  t                     S r:   )r   	TestSuiter   r#   r   r   r=   r=   [  s    H&&y{3 r   suite)defaultTest)Kjsonr   binasciir   Crypto.Util.py3compatr   Crypto.Util.numberr   Crypto.Util.strxorr   Crypto.SelfTest.st_commonr   Crypto.SelfTest.loaderr   r	   r   r
   r   r   r   r   r   r   r   r   Crypto.PublicKeyr   Crypto.Signaturer   r   Crypto.Util._file_systemr   r   r   r!   r5   test_vectors_verify	enumeratecountr   
isinstancer   hasattrrE   modulusrB   upperr   r   rf   rI   	constructr\   r*   r.   srK   rO   rD   setattrrR   rX   test_vectors_signrC   private_keyrV   r_   ra   rl   rv   r   r   r1   r   mainr;   s   0r   <module>r      st  >    & , % 5 R7 7 7   % ' : %P5h// 5	("3"3 	 ((C!5!?,7'7,7"9: @
 >@  ./ XIE2"cr3$$#BIIOO$56Krvv&H7BDD/JQa 0JKJx||J'H%-BDD - &.BDD L 
yyC+-?%-GW+-?%-GW+X02H-- 2	 1 1 	 ''B(<(D)1;(?A G EG 
 &'B(<(D)1;(?A G EGG 
 ,- DIE2"cr3$$r3#cmmrtt?T$U!]1%5$UVk*#BIIOO$56Krvv&H ( , %y5'8(C%D*0)) 0:H 1 1 H*"X.. "4f!H-- f!R  " z3EHMMg& G  K^ %Vs   +M

M
