o
     j4                     @   s\  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d Z G dd dej!Z"G dd dej!Z#edd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'j-. Z/e/0e'j1Z2e3dd e,e'j4fD Z5e0e5Z6e2e6e'j7fddZ8e2e6e'j7fd d!Z9e'j:d"kre;e#d#e& e9 qe;e#d$e& e8 qG d%d& d&ej!Z<G d'd( d(ej!Z=edd)d*d+d,d ip	g Z>e>edd-d.d+d/d ipg 7 Z>e%e>D ]R\Z&Z'e(e'e)r*qe*e'dr5e'j+Z,qe*e'd0rQe3d1d e,e'j4e'j?fD Z@e0e@ZAqe e'j-. Z/e/0e'j1Z2e2eAe'j7fd2d3ZBe;e=d4e& eB qG d5d6 d6ej!ZCG d7d8 d8ej!ZDG d9d: d:ej!ZEG d;d< d<ej!ZFi fd=d>ZGeHd?krd@d ZIejJdAdB dS dS )C    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                 C   s   t d|  t t dgS )NzCrypto.Hash.new)
__import__globalslocals)	hash_name r   h/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/Crypto/SelfTest/Signature/test_pkcs1_15.pyload_hash_by_name3   s   r   c                   @      e Zd Zdd Zdd ZdS )FIPS_PKCS1_Verify_Testsc                 C      dS )NzFIPS PKCS1 Tests (Verify)r   selfr   r   r   shortDescription9      z(FIPS_PKCS1_Verify_Tests.shortDescriptionc                 C   s,   t d }t|}| | d d S )N   F)r   generate
public_keyr   r   assertEqualcan_sign)r#   Ztest_public_keyverifierr   r   r   test_can_sign<   s   
z%FIPS_PKCS1_Verify_Tests.test_can_signN__name__
__module____qualname__r$   r,   r   r   r   r   r    7       r    c                   @      e Zd ZdS )FIPS_PKCS1_Verify_Tests_KATNr.   r/   r0   r   r   r   r   r3   B       r3   )	Signaturez
PKCS1-v1.5zSigVer15_186-3.rspzSignature Verification 186-3c                 C      | S Nr   xr   r   r   <lambda>I       r;   c                 C   s   t | S r8   )intr9   r   r   r   r;   J   s    c                 C   r7   r8   r   r9   r   r   r   r;   K   r<   )shaalgdresultnc                 C      g | ]}t |qS r   r   .0r:   r   r   r   
<listcomp>W       rE   c                 C   s   | || d S r8   )verifyr#   hash_objr+   	signaturer   r   r   positive_testZ   s   rK   c                 C   s   |  t|j|| d S r8   )ZassertRaises
ValueErrorrG   rH   r   r   r   negative_test]   s   rM   fztest_negative_%dztest_positive_%dc                   @   r   )FIPS_PKCS1_Sign_Testsc                 C   r!   )NzFIPS PKCS1 Tests (Sign)r   r"   r   r   r   r$   h   r%   z&FIPS_PKCS1_Sign_Tests.shortDescriptionc                 C   s(   t d}t|}| | d d S )Nr&   T)r   r'   r   r   r)   r*   )r#   Ztest_private_keysignerr   r   r   r,   k   s   

z#FIPS_PKCS1_Sign_Tests.test_can_signNr-   r   r   r   r   rO   f   r1   rO   c                   @   r2   )FIPS_PKCS1_Sign_Tests_KATNr4   r   r   r   r   rQ   q   r5   rQ   zSigGen15_186-2.txtzSignature Generation 186-2r>   c                 C   r7   r8   r   r9   r   r   r   r;   x   r<   zSigGen15_186-3.txtzSignature Generation 186-3c                 C   r7   r8   r   r9   r   r   r   r;   }   r<   ec                 C   rB   r   r   rC   r   r   r   rE      rF   c                 C   s   | |}| || d S r8   )signr)   )r#   rI   rP   r@   rJ   r   r   r   new_test   s   
rT   ztest_%dc                   @   s,   e Zd ZdZdZdZdZeeZdd Z	dS )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
Za287a13517f716e72fb14eea8e33a8db4a4643314607e7ca3e3e281893db74013dda8b855fd99f6fecedcb25fcb7a434f35cd0a101f8b19348e0bd7b6f152dfcc                 C   s0   t t| j}t| j}||| j d S r8   )	r   r   r   	importKeyrsakeyr
   msgrG   rJ   )r#   r+   hashedr   r   r   runTest   s   zPKCS1_15_NoParams.runTestN)
r.   r/   r0   __doc__rW   rX   Zsig_strr   rJ   rZ   r   r   r   r   rU      s    
rU   c                   @   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_v1_5
    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_v1_5r   r"   r   r   r   r$      r%   z*PKCS1_Legacy_Module_Tests.shortDescriptionc                 C   sv   t tj}td}t||}t| }| 	|
||d t|tdt| }| 	|
||d d S )N   TestT   F)r   rV   rU   rW   r
   r   r   rS   r(   r)   rG   r   r   len)r#   keyrY   Zgood_signaturer+   Zbad_signaturer   r   r   rZ      s   
z!PKCS1_Legacy_Module_Tests.runTestN)r.   r/   r0   r[   r$   rZ   r   r   r   r   r\      s    r\   c                   @   r   )PKCS1_All_Hashes_Testsc                 C   r!   )Nz8Test PKCS#1v1.5 signature in combination with all hashesr   r"   r   r   r   r$      r%   z'PKCS1_All_Hashes_Tests.shortDescriptionc                 C   s   t d}t|}d}|D ]}t|d}|| qddlm}m} dD ]}|j|dd}	||	 q'dD ]}|j|dd}
||
 q8d S )	Nr&   )ZMD2ZMD4MD5Z	RIPEMD160r
   r   r   r   r   r   r   r   r   r]   r   )BLAKE2bBLAKE2s)       0   @   )Zdigest_bytesdata)   re      rf   )	r   r'   r   r   r   rS   Crypto.Hashrc   rd   )r#   r`   rP   Z
hash_namesnamerY   rc   rd   Z	hash_sizeZhashed_bZhashed_sr   r   r   rZ      s   

zPKCS1_All_Hashes_Tests.runTestN)r.   r/   r0   r$   rZ   r   r   r   r   ra      r1   ra   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 )TestVectorsWycheproofc                 C   s   t j|  || _d| _d S )NNone)unittestTestCase__init___wycheproof_warnings_id)r#   wycheproof_warningsr   r   r   rr      s   
zTestVectorsWycheproof.__init__c                 C   s   g | _ | d | d | d | d | d | d | d | d | d	 | d
 | d | d | d | d | d | d | d | d | d | d | d | d d S )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"   r   r   r   setUp   s.   




















zTestVectorsWycheproof.setUpc                 C   s8   dd }dd }dd }t d|d| |||d	d
}|S )Nc                 S   s   t | d S )NZkeyPem)r   Z
import_key)groupr   r   r   
filter_rsa  s   z3TestVectorsWycheproof.add_tests.<locals>.filter_rsac                 S   s   | d }|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r*tS |d
kr0tS |dkr6tS |dkr<tS |dkrBtS |dkrHtS |dkrNt	S t
d| )NshazSHA-512zSHA-512/224Z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
   rL   )ry   r   r   r   r   
filter_sha  s0   z3TestVectorsWycheproof.add_tests.<locals>.filter_shac                 S   s    | d }|dvrt d| d S )Ntype)ZRsassaPkcs1VerifyZRsassaPkcs1GeneratezUnknown type name )rL   )ry   	type_namer   r   r   filter_type   s   z4TestVectorsWycheproof.add_tests.<locals>.filter_type)r6   Z
wycheproofz$Wycheproof PKCS#1v1.5 signature (%s))Zrsa_keyZhash_modr   )Z	group_tag)r	   )r#   filenamerz   r~   r   r@   r   r   r   rw      s   zTestVectorsWycheproof.add_testsc                 C   s   | j S r8   )rt   r"   r   r   r   r$   -  s   z&TestVectorsWycheproof.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))warningrs   warningswarnrt   comment)r#   rv   r   r   r   r   r   0  s   zTestVectorsWycheproof.warnc              
   C   s   dt |j | _|j|j}t|j}z	|||j	}W n" t
y@ } z|jr0W Y d }~d S |jr5J W Y d }~d S d }~ww |jsFJ | | d S )NzWycheproof RSA PKCS$#1 Test #)stridrt   hash_moduler   rX   r   r`   rG   sigrL   r   validr   )r#   rv   Z
hashed_msgrP   rJ   rR   r   r   r   test_verify5  s   
z!TestVectorsWycheproof.test_verifyc                 C   s   | j D ]}| | qd S r8   )rv   r   )r#   rv   r   r   r   rZ   D  s   
zTestVectorsWycheproof.runTestN)
r.   r/   r0   rr   rx   rw   r$   r   r   rZ   r   r   r   r   rn      s    -rn   c                 C   s~   |  d}g }|tt7 }|tt7 }|tt7 }|tt7 }|tt7 }|t|g7 }|  dr=|tt7 }|tt	7 }|S )Nru   Z
slow_tests)
getr   r    rO   rU   r\   ra   rn   r3   rQ   )configru   Ztestsr   r   r   	get_testsI  s   

r   __main__c                   C   s   t t S r8   )rp   Z	TestSuiter   r   r   r   r   r;   [  s    suite)ZdefaultTest)Kjsonrp   binasciir   ZCrypto.Util.py3compatr   ZCrypto.Util.numberr   ZCrypto.Util.strxorr   ZCrypto.SelfTest.st_commonr   ZCrypto.SelfTest.loaderr   r	   rl   r
   r   r   r   r   r   r   r   r   ZCrypto.PublicKeyr   ZCrypto.Signaturer   r   ZCrypto.Util._file_systemr   r   rq   r    r3   Ztest_vectors_verify	enumeratecountrv   
isinstancer   hasattrrA   modulusr>   upperr   r   rX   rI   Z	constructrR   r(   r+   srK   rM   r@   setattrrO   rQ   Ztest_vectors_signr?   Zprivate_keyrP   rT   rU   r\   ra   rn   r   r.   r   mainr   r   r   r   <module>   s   ,






i
