o
    5h=                     @   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pg Z!e"e!D ]z\Z#Z$e%e$e&rqe'e$dre$j(Z)qe'e$drqee$j*+ Z,e,-e$j.Z/e0dd  e)e$j1fD Z2e$j3ed!kre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re;e d(e# e8 qe;e d)e# e9 qG d*d+ d+e jZ<G d,d- d-e jZ=edd.d/d0d1d ip!g Z>e>edd2d3d0d4d ip0g 7 Z>e"e>D ]m\Z#Z$e%e$e&rBq6e'e$drMe$j(Z)q6e'e$d5rde0d6d  e)e$j1e$j?fD Z@q6ee$j*+ Z,e,-e$j.Z/e$j3ed!kree$j3Z4ej-e@e5e$j3e4d"ZAnej-e@d d#ZAe/eAe$j7fd7d8ZBe;e=d9e# eB q6G d:d; d;e jZCG d<d= d=e jZDd>d? ZEG d@dA dAe jZFi fdBdCZGeHdDkrdEdF ZIe jJdFdG dS 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   v/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/Crypto/SelfTest/Signature/test_pss.pyload_hash_by_name/   s   r   c                   @      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!   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+ɯ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                 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!   r0   r1   r2   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_bytesr5   r9   r   r   r   test_negative_2R   s
   
zPSS_Tests.test_negative_2N)	r'   r(   r)   r,   r-   r/   r3   r:   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      dS )NzFIPS PKCS1 Tests (Verify)r   r!   r   r   r   shortDescription\      z(FIPS_PKCS1_Verify_Tests.shortDescriptionc           	      C   s6   t |}||}tj|t||d}||| d S Nr<   	rand_func)r   r   r   lenr.   	r!   hashmodmessage
public_keysalt	signatureprnghashedr2   r   r   r   verify_positive_   s   
z'FIPS_PKCS1_Verify_Tests.verify_positivec           	      C   s<   t |}||}tj|t||d}| t|j|| d S rC   )r   r   r   rF   r7   r8   r.   rG   r   r   r   verify_negativee   s   
z'FIPS_PKCS1_Verify_Tests.verify_negativec                 C   s,   t d }t|}| | d d S )N   F)r   generaterJ   r   r   assertEqualcan_sign)r!   test_public_keyr2   r   r   r   test_can_signk   s   
z%FIPS_PKCS1_Verify_Tests.test_can_signN)r'   r(   r)   rA   rO   rP   rV   r   r   r   r   r>   Z   s
    r>   c                   @      e Zd ZdS )FIPS_PKCS1_Verify_Tests_KATNr'   r(   r)   r   r   r   r   rX   q       rX   )	Signaturez	PKCS1-PSSzSigVerPSS_186-3.rspzSignature Verification 186-3c                 C      | S r#   r   xr   r   r   <lambda>x       r_   c                 C   r\   r#   r   r]   r   r   r   r_   y   r`   )shaalgr%   npc                 C      g | ]}t |qS r   r   .0r^   r   r   r   
<listcomp>       rg    rD   r;   c                 C   s   | || d S r#   )r.   r!   hash_objr2   rL   r   r   r   positive_test   s   rl   c                 C   s   |  t|j|| d S r#   )r7   r8   r.   rj   r   r   r   negative_test   s   rm   ztest_positive_%dztest_negative_%dc                   @   r   )FIPS_PKCS1_Sign_Testsc                 C   r?   )NzFIPS PKCS1 Tests (Sign)r   r@   r   r   r   rA      rB   z&FIPS_PKCS1_Sign_Tests.shortDescriptionc                 C   s(   t d}t|}| | d d S )NrQ   T)r   rR   r   r   rS   rT   )r!   test_private_keysignerr   r   r   rV      s   

z#FIPS_PKCS1_Sign_Tests.test_can_signN)r'   r(   r)   rA   rV   r   r   r   r   rn          rn   c                   @   rW   )FIPS_PKCS1_Sign_Tests_KATNrY   r   r   r   r   rr      rZ   rr   zSigGenPSS_186-2.txtzSignature Generation 186-2ra   c                 C   r\   r#   r   r]   r   r   r   r_      r`   zSigGenPSS_186-3.txtzSignature Generation 186-3c                 C   r\   r#   r   r]   r   r   r   r_      r`   ec                 C   rd   r   r   re   r   r   r   rg      rh   c                 C   s   | |}| || d S r#   )signrS   )r!   rk   rp   r%   rL   r   r   r   new_test   s   
ru   ztest_%dc                   @   s    e Zd ZdZdd Zdd ZdS )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                 C   r?   )Nz&Test legacy Crypto.Signature.PKCS1_PSSr   r@   r   r   r   rA      rB   z*PKCS1_Legacy_Module_Tests.shortDescriptionc                 C   sx   t d}ttd}t||}t| }| |	||d t
|tdt| }| |	||d d S )NrQ   TestT   F)r   rR   r
   r   r   r   rt   rJ   rS   r.   r   r   rF   )r!   r0   rN   good_signaturer2   bad_signaturer   r   r   runTest   s   
z!PKCS1_Legacy_Module_Tests.runTestN)r'   r(   r)   __doc__rA   r{   r   r   r   r   rv      s    rv   c                   @   r   )PKCS1_All_Hashes_Testsc                 C   r?   )Nz8Test PKCS#1 PSS signature in combination with all hashesr   r@   r   r   r   rA      rB   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}	||	 q)dD ]}|j|tdd}
||
 q<d S )	Ni   )MD2MD4MD5	RIPEMD160r
   r   r   r   r   SHA3_224SHA3_256SHA3_384SHA3_512rw   r   )BLAKE2bBLAKE2s)       0   @   )digest_bytesdata)   r      r   )
r   rR   r   r   r   r   rt   Crypto.Hashr   r   )r!   r0   rp   
hash_namesnamerN   r   r   	hash_sizehashed_bhashed_sr   r   r   r{      s   

zPKCS1_All_Hashes_Tests.runTestN)r'   r(   r)   rA   r{   r   r   r   r   r}      rq   r}   c                 C   s   | dkrt }|S | dkrt jdd}|S | dkr t jdd}|S | dkr(t}|S | dkr0t}|S | d	kr8t}|S | d
kr@t}|S td|  )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
   r8   )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 )N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     z6TestVectorsPSSWycheproof.add_tests.<locals>.filter_shac                 S   s    | d }|dvrt d| d S )Ntype)RsassaPssVerifyzUnknown type name )r8   )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vrt d| t| d }|fdd}|S )Nmgfr   zUnknown MGF mgfShac                 S   s   t | ||S r#   r   )r^   ymhr   r   r   r   ,  r   zCTestVectorsPSSWycheproof.add_tests.<locals>.filter_mgf.<locals>.mgf)r8   r   )r   r   	mgf1_hashr   r   r   
filter_mgf&  s   z6TestVectorsPSSWycheproof.add_tests.<locals>.filter_mgf)r[   
wycheproofzWycheproof PSS signature (%s))r0   r   r   r   r   )	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   rA   G  s   z)TestVectorsPSSWycheproof.shortDescriptionc                 C   s6   |j r| jrdd l}|d| j|jf  d S d S 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yF } z|jr6W Y d }~d S |jr;J W Y d }~d S d }~ww |jsLJ | | d S )Nz Wycheproof RSA PSS Test #%d (%s))	mask_funcr<   )idr   r   r   r   r-   r   r0   r   r   r.   sigr8   r   validr   )r!   r   
hashed_msgrp   rL   rs   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   r{   ^  s   
z TestVectorsPSSWycheproof.runTestN)
r'   r(   r)   r"   r   r   rA   r   r   r{   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r6|tt7 }|tt7 }|t	|g7 }|S )Nr   
slow_tests)
getr   r*   r>   rn   rv   r}   rX   rr   r   )configr   testsr   r   r   	get_testsc  s   

r   __main__c                   C   s   t t S r#   )r   	TestSuiter   r   r   r   r   suitew  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*   r>   rX   test_vectors_verify	enumeratecountr   
isinstancestrhasattrrb   modulusra   upperr   r   r-   rk   	constructrs   rJ   saltvalrM   rF   r2   srl   rm   r%   setattrrn   rr   test_vectors_signdprivate_keyrp   ru   rv   r}   r   r   r   r'   r   mainr   r   r   r   <module>   s   







T
