U
    ÈZjÃ=  ã                   @   sÊ  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d„ ZG dd„ deƒZG dd„ de jƒZG dd„ de jƒZG dd„ de jƒZ eddddd„ dd„ dœƒ�pg Z!e"e!ƒD �]\Z#Z$e%e$e&ƒ�r*�qe'e$dƒ�r@e$j(Z)�qe'e$dƒ�rP�qee$j* +¡ ƒZ,e, -e$j.¡Z/e 0dd „ e)e$j1fD ƒ¡Z2e$j3ed!ƒk�r¶ee$j3ƒZ4ej-e2e5e$j3ƒe4d"�Z6nej-e2d d#�Z6e/e6e$j7fd$d%„Z8e/e6e$j7fd&d'„Z9e$j:dk�re;e d(e# e8ƒ ne;e d)e# e9ƒ �qG d*d+„ d+e jƒZ<G d,d-„ d-e jƒZ=edd.d/d0d1d„ iƒ�pXg Z>e>edd2d3d0d4d„ iƒ�pvg 7 Z>e"e>ƒD ]Ú\Z#Z$e%e$e&ƒ�rš�q‚e'e$dƒ�r°e$j(Z)�q‚e'e$d5ƒ�rÞe 0d6d „ e)e$j1e$j?fD ƒ¡Z@�q‚ee$j* +¡ ƒZ,e, -e$j.¡Z/e$j3ed!ƒk�r*ee$j3ƒZ4ej-e@e5e$j3ƒe4d"�ZAnej-e@d d#�ZAe/eAe$j7fd7d8„ZBe;e=d9e# eBƒ �q‚G d:d;„ d;e jƒZCG d<d=„ d=e jƒZDd>d?„ ZEG d@dA„ dAe jƒZFi fdBdC„ZGeHdDk�rÆdEdF„ ZIe jJdFdG� dS )Hé    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                 C   s   t d|  tƒ tƒ dgƒS )NzCrypto.Hash.Únew)Ú
__import__ÚglobalsÚlocals)Ú	hash_name© r   úe/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/Crypto/SelfTest/Signature/test_pss.pyÚload_hash_by_name/   s    r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚPRNGc                 C   s   || _ d| _d S )Nr   ©ÚstreamÚidx)Úselfr   r   r   r   Ú__init__5   s    zPRNG.__init__c                 C   s(   | j | j| j| … }|  j|7  _|S ©Nr   )r    Zrnd_sizeÚresultr   r   r   Ú__call__9   s    zPRNG.__call__N)Ú__name__Ú
__module__Ú__qualname__r!   r$   r   r   r   r   r   3   s   r   c                   @   s0   e Zd ZdZdZdZdd„ Zdd„ Zd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+É¯»ìþ°¥¹P�Lî5›°k{=_ÒûR·þ}b�5Y‰~}üòlÐ1-½ëÍVélk/o5¢çQ$	=ìAB¥Pš¯£G†"Ö~ð<p5 †àó™Ç+Ïc,\)vÍÿo�ÅÑÊ†9ô5ý¢ñn£¦eÅQä@½ƒxÉ›µÇêU› ÌCÉT†/Ç•hCùb1»Ãðš>jüqkbs„bä½m(í`¤Fû�.áŒ)/_žS˜¤v¸Üþ÷/D³T—:â–sè<¢´¹ø/c                 C   s4   t  | j¡}t | j¡}t |¡}| || j¡ d S r"   )	r   Ú
import_keyÚrsa_keyr   r   Úmsgr   ÚverifyÚtag)r    ÚkeyÚhÚverifierr   r   r   Útest_positive_1E   s    
zPSS_Tests.test_positive_1c                 C   sF   t  | j¡}t | jd ¡}t |¡}t| jƒ}|  	t
|j||¡ d S )Nó   A©r   r)   r*   r   r   r+   r   Ú	bytearrayr-   ÚassertRaisesÚ
ValueErrorr,   ©r    r.   r/   r0   r-   r   r   r   Útest_negative_1K   s
    

zPSS_Tests.test_negative_1c                 C   sF   t  | j¡}t | j¡}tj|dd�}t| jƒ}|  	t
|j||¡ d S )Niè  ©Ú
salt_bytesr3   r7   r   r   r   Útest_negative_2R   s
    
zPSS_Tests.test_negative_2N)	r%   r&   r'   r*   r+   r-   r1   r8   r;   r   r   r   r   r(   ?   s   r(   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚFIPS_PKCS1_Verify_Testsc                 C   s   dS )NzFIPS PKCS1 Tests (Verify)r   ©r    r   r   r   ÚshortDescription\   s    z(FIPS_PKCS1_Verify_Tests.shortDescriptionc           	      C   s6   t |ƒ}| |¡}tj|t|ƒ|d�}| ||¡ d S ©N©r:   Z	rand_func)r   r   r   Úlenr,   ©	r    ZhashmodÚmessageÚ
public_keyÚsaltÚ	signatureÚprngÚhashedr0   r   r   r   Úverify_positive_   s    
z'FIPS_PKCS1_Verify_Tests.verify_positivec           	      C   s<   t |ƒ}| |¡}tj|t|ƒ|d�}|  t|j||¡ d S r?   )r   r   r   rA   r5   r6   r,   rB   r   r   r   Úverify_negativee   s    
z'FIPS_PKCS1_Verify_Tests.verify_negativec                 C   s,   t  d¡ ¡ }t |¡}|  | ¡ d¡ d S )Né   F)r   ÚgeneraterD   r   r   ÚassertEqualÚcan_sign)r    Ztest_public_keyr0   r   r   r   Útest_can_signk   s    
z%FIPS_PKCS1_Verify_Tests.test_can_signN)r%   r&   r'   r>   rI   rJ   rO   r   r   r   r   r<   Z   s   r<   c                   @   s   e Zd ZdS )ÚFIPS_PKCS1_Verify_Tests_KATN©r%   r&   r'   r   r   r   r   rP   q   s   rP   )Ú	Signaturez	PKCS1-PSSzSigVerPSS_186-3.rspzSignature Verification 186-3c                 C   s   | S r"   r   ©Úxr   r   r   Ú<lambda>x   ó    rU   c                 C   s   | S r"   r   rS   r   r   r   rU   y   rV   )Úshaalgr#   ÚnÚpc                 C   s   g | ]}t |ƒ‘qS r   r   ©Ú.0rT   r   r   r   Ú
<listcomp>‡   s     r\   ú r@   r9   c                 C   s   |  ||¡ d S r"   )r,   ©r    Úhash_objr0   rF   r   r   r   Úpositive_testŽ   s    r`   c                 C   s   |   t|j||¡ d S r"   )r5   r6   r,   r^   r   r   r   Únegative_test‘   s    ra   ztest_positive_%dztest_negative_%dc                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚFIPS_PKCS1_Sign_Testsc                 C   s   dS )NzFIPS PKCS1 Tests (Sign)r   r=   r   r   r   r>   œ   s    z&FIPS_PKCS1_Sign_Tests.shortDescriptionc                 C   s(   t  d¡}t |¡}|  | ¡ d¡ d S )NrK   T)r   rL   r   r   rM   rN   )r    Ztest_private_keyÚsignerr   r   r   rO   Ÿ   s    

z#FIPS_PKCS1_Sign_Tests.test_can_signN)r%   r&   r'   r>   rO   r   r   r   r   rb   š   s   rb   c                   @   s   e Zd ZdS )ÚFIPS_PKCS1_Sign_Tests_KATNrQ   r   r   r   r   rd   ¥   s   rd   zSigGenPSS_186-2.txtzSignature Generation 186-2rW   c                 C   s   | S r"   r   rS   r   r   r   rU   ¬   rV   zSigGenPSS_186-3.txtzSignature Generation 186-3c                 C   s   | S r"   r   rS   r   r   r   rU   ±   rV   Úec                 C   s   g | ]}t |ƒ‘qS r   r   rZ   r   r   r   r\   º   s     c                 C   s   |  |¡}|  ||¡ d S r"   )ÚsignrM   )r    r_   rc   r#   rF   r   r   r   Únew_testÅ   s    
rg   ztest_%dc                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚPKCS1_Legacy_Module_Testsz·Verify 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                 C   s   dS )Nz&Test legacy Crypto.Signature.PKCS1_PSSr   r=   r   r   r   r>   Ñ   s    z*PKCS1_Legacy_Module_Tests.shortDescriptionc                 C   sx   t  d¡}t tdƒ¡}t |¡ |¡}t | ¡ ¡}|  | 	||¡d¡ t
|tdƒt|ƒ ƒ}|  | 	||¡d¡ d S )NrK   ÚTestTé   F)r   rL   r
   r   r   r   rf   rD   rM   r,   r   r   rA   )r    r.   rH   Zgood_signaturer0   Zbad_signaturer   r   r   ÚrunTestÔ   s    
z!PKCS1_Legacy_Module_Tests.runTestN)r%   r&   r'   Ú__doc__r>   rk   r   r   r   r   rh   Ì   s   rh   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚPKCS1_All_Hashes_Testsc                 C   s   dS )Nz8Test PKCS#1 PSS signature in combination with all hashesr   r=   r   r   r   r>   ã   s    z'PKCS1_All_Hashes_Tests.shortDescriptionc                 C   sž   t  d¡}t |¡}d}|D ] }t|ƒ tdƒ¡}| |¡ qddlm}m	} dD ] }|j|tdƒd�}	| |	¡ qRdD ] }|j|tdƒd�}
| |
¡ qxd S )	Ni   )ZMD2ZMD4ÚMD5Z	RIPEMD160r
   r   r   r   r   ZSHA3_224ZSHA3_256ZSHA3_384ZSHA3_512ri   r   )ÚBLAKE2bÚBLAKE2s)é   é    é0   é@   )Zdigest_bytesÚdata)é   rq   é   rr   )
r   rL   r   r   r   r   rf   ÚCrypto.Hashro   rp   )r    r.   rc   Z
hash_namesÚnamerH   ro   rp   Z	hash_sizeZhashed_bZhashed_sr   r   r   rk   æ   s    

zPKCS1_All_Hashes_Tests.runTestN)r%   r&   r'   r>   rk   r   r   r   r   rm   á   s   rm   c                 C   s‚   | dkrt }np| dkr$t jdd�}nZ| dkr:t jdd�}nD| dkrHt}n6| dkrVt}n(| d	krdt}n| d
krrt}ntd|  ƒ‚|S )NzSHA-512zSHA-512/224Z224)ÚtruncatezSHA-512/256Ú256zSHA-384zSHA-256zSHA-224zSHA-1zUnknown hash algorithm: )r   r   r   r   r   r
   r6   )r   Úhash_moduler   r   r   Úget_hash_moduleû   s     r}   c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTestVectorsPSSWycheproofc                 C   s   t j | ¡ || _d| _d S )NÚNone)ÚunittestÚTestCaser!   Ú_wycheproof_warningsÚ_id)r    Úwycheproof_warningsr   r   r   r!     s    z!TestVectorsPSSWycheproof.__init__c              
   C   sL   dd„ }dd„ }dd„ }dd„ }d	d
„ }t d|d| |||||dœd�}|S )Nc                 S   s   t  | d ¡S )NZkeyPem)r   r)   ©Úgroupr   r   r   Ú
filter_rsa  s    z6TestVectorsPSSWycheproof.add_tests.<locals>.filter_rsac                 S   s   t | d ƒS )NÚsha)r}   r…   r   r   r   Ú
filter_sha  s    z6TestVectorsPSSWycheproof.add_tests.<locals>.filter_shac                 S   s    | d }|dkrt d| ƒ‚d S )NÚtype)ZRsassaPssVerifyzUnknown type name )r6   )r†   Ú	type_namer   r   r   Úfilter_type  s    z7TestVectorsPSSWycheproof.add_tests.<locals>.filter_typec                 S   s   | d S )NÚsLenr   r…   r   r   r   Úfilter_slen#  s    z7TestVectorsPSSWycheproof.add_tests.<locals>.filter_slenc                 S   s8   | d }|dkrt d| ƒ‚t| d ƒ}|fdd„}|S )NÚmgfr   zUnknown MGF ZmgfShac                 S   s   t | ||ƒS r"   r   )rT   ÚyÚmhr   r   r   r�   ,  s    zCTestVectorsPSSWycheproof.add_tests.<locals>.filter_mgf.<locals>.mgf)r6   r}   )r†   r�   Z	mgf1_hashr   r   r   Ú
filter_mgf&  s    z6TestVectorsPSSWycheproof.add_tests.<locals>.filter_mgf)rR   Z
wycheproofzWycheproof PSS signature (%s))r.   r|   r�   r�   rŠ   )Z	group_tag)r	   )r    Úfilenamer‡   r‰   rŒ   rŽ   r’   r#   r   r   r   Ú	add_tests  s     üýz"TestVectorsPSSWycheproof.add_testsc                 C   sd   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”   r=   r   r   r   ÚsetUp;  s    







zTestVectorsPSSWycheproof.setUpc                 C   s   | j S r"   )rƒ   r=   r   r   r   r>   G  s    z)TestVectorsPSSWycheproof.shortDescriptionc                 C   s.   |j r*| jr*dd l}| d| j|jf ¡ d S )Nr   zWycheproof warning: %s (%s))Úwarningr‚   ÚwarningsÚwarnrƒ   Úcomment)r    r•   r˜   r   r   r   r™   J  s    zTestVectorsPSSWycheproof.warnc              
   C   sž   d|j |jf | _|j |j¡}tj|j|j|j	d�}z| 
||j¡}W n< tk
r„ } z|jrjW Y ¢d S |jrtt‚W 5 d }~X Y nX |js�t‚|  |¡ d S )Nz Wycheproof RSA PSS Test #%d (%s))Z	mask_funcr:   )Úidrš   rƒ   r|   r   r+   r   r.   r�   r�   r,   Úsigr6   r—   ZvalidÚAssertionErrorr™   )r    r•   Z
hashed_msgrc   rF   re   r   r   r   Útest_verifyO  s    

z$TestVectorsPSSWycheproof.test_verifyc                 C   s   | j D ]}|  |¡ qd S r"   )r•   rž   )r    r•   r   r   r   rk   ^  s    
z TestVectorsPSSWycheproof.runTestN)
r%   r&   r'   r!   r”   r–   r>   r™   rž   rk   r   r   r   r   r~     s   %r~   c                 C   s~   |   d¡}g }|ttƒ7 }|ttƒ7 }|ttƒ7 }|ttƒ7 }|ttƒ7 }|   d¡rl|ttƒ7 }|ttƒ7 }|t	|ƒg7 }|S )Nr„   Z
slow_tests)
Úgetr   r(   r<   rb   rh   rm   rP   rd   r~   )Úconfigr„   Ztestsr   r   r   Ú	get_testsc  s    

r¡   Ú__main__c                   C   s   t  tƒ ¡S r"   )r€   Z	TestSuiter¡   r   r   r   r   Úsuitew  s    r£   )ZdefaultTest)Kr€   ZCrypto.Util.py3compatr   r   ZCrypto.Util.numberr   ZCrypto.Util.strxorr   ZCrypto.SelfTest.st_commonr   ZCrypto.SelfTest.loaderr   r	   rx   r
   r   r   r   r   ZCrypto.PublicKeyr   ZCrypto.Signaturer   r   ZCrypto.Signature.pssr   r   Úobjectr   r�   r(   r<   rP   Ztest_vectors_verifyÚ	enumerateÚcountr•   Ú
isinstanceÚstrÚhasattrrX   ÚmodulusrW   Úupperr|   r   r+   r_   Z	constructre   rD   ZsaltvalrG   rA   r0   Úsr`   ra   r#   Úsetattrrb   rd   Ztest_vectors_signÚdZprivate_keyrc   rg   rh   rm   r}   r~   r¡   r%   r£   Úmainr   r   r   r   Ú<module>   sª   ÿýü

ýý
ýý
T
