o
    Mf4                     @   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/humari/django-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#   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/   r0   r1   r   r   r   r   r4   B       r4   )	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 r9   )intr:   r   r   r   r<   J   s    c                 C   r8   r9   r   r:   r   r   r   r<   K   r=   )shaalgdresultnc                 C      g | ]}t |qS r   r   .0r;   r   r   r   
<listcomp>W       rF   c                 C   s   | || d S r9   )verifyr#   hash_objr,   	signaturer   r   r   positive_testZ   s   rL   c                 C   s   |  t|j|| d S r9   )assertRaises
ValueErrorrH   rI   r   r   r   negative_test]   s   rO   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#   test_private_keysignerr   r   r   r-   k   s   

z#FIPS_PKCS1_Sign_Tests.test_can_signNr.   r   r   r   r   rQ   f   r2   rQ   c                   @   r3   )FIPS_PKCS1_Sign_Tests_KATNr5   r   r   r   r   rT   q   r6   rT   zSigGen15_186-2.txtzSignature Generation 186-2r?   c                 C   r8   r9   r   r:   r   r   r   r<   x   r=   zSigGen15_186-3.txtzSignature Generation 186-3c                 C   r8   r9   r   r:   r   r   r   r<   }   r=   ec                 C   rC   r   r   rD   r   r   r   rF      rG   c                 C   s   | |}| || d S r9   )signr)   )r#   rJ   rS   rA   rK   r   r   r   new_test   s   
rW   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
ڀa287a13517f716e72fb14eea8e33a8db4a4643314607e7ca3e3e281893db74013dda8b855fd99f6fecedcb25fcb7a434f35cd0a101f8b19348e0bd7b6f152dfcc                 C   s0   t t| j}t| j}||| j d S r9   )	r   r   r   	importKeyrsakeyr
   msgrH   rK   )r#   r,   hashedr   r   r   runTest   s   zPKCS1_15_NoParams.runTestN)
r/   r0   r1   __doc__r[   r\   sig_strr   rK   r^   r   r   r   r   rX      s    
rX   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   rZ   rX   r[   r
   r   r   rV   r(   r)   rH   r   r   len)r#   keyr]   good_signaturer,   bad_signaturer   r   r   r^      s   
z!PKCS1_Legacy_Module_Tests.runTestN)r/   r0   r1   r_   r$   r^   r   r   r   r   ra      s    ra   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&   )MD2MD4MD5	RIPEMD160r
   r   r   r   r   r   r   r   r   rb   r   )BLAKE2bBLAKE2s)       0   @   )digest_bytesdata)   ro      rp   )	r   r'   r   r   r   rV   Crypto.Hashrm   rn   )r#   re   rS   
hash_namesnamer]   rm   rn   	hash_sizehashed_bhashed_sr   r   r   r^      s   

zPKCS1_All_Hashes_Tests.runTestN)r/   r0   r1   r$   r^   r   r   r   r   rh      r2   rh   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   r      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 )NkeyPem)r   
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/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   r   r   r   
filter_sha  s0   z3TestVectorsWycheproof.add_tests.<locals>.filter_shac                 S   s    | d }|dvrt d| d S )Ntype)RsassaPkcs1VerifyRsassaPkcs1GeneratezUnknown type name )rN   )r   	type_namer   r   r   filter_type   s   z4TestVectorsWycheproof.add_tests.<locals>.filter_type)r7   
wycheproofz$Wycheproof PKCS#1v1.5 signature (%s))rsa_keyhash_modr   )	group_tag)r	   )r#   filenamer   r   r   rA   r   r   r   r      s   zTestVectorsWycheproof.add_testsc                 C   s   | j S r9   )r   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))warningr   warningswarnr   comment)r#   r   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idr   hash_moduler   r\   r   re   rH   sigrN   r   validr   )r#   r   
hashed_msgrS   rK   rU   r   r   r   test_verify5  s   
z!TestVectorsWycheproof.test_verifyc                 C   s   | j D ]}| | qd S r9   )r   r   )r#   r   r   r   r   r^   D  s   
zTestVectorsWycheproof.runTestN)
r/   r0   r1   r   r   r   r$   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 }|t|g7 }|  dr=|tt7 }|tt	7 }|S )Nr   
slow_tests)
getr   r    rQ   rX   ra   rh   r}   r4   rT   )configr   testsr   r   r   	get_testsI  s   

r   __main__c                   C   s   t t S r9   )r   	TestSuiter   r   r   r   r   r<   [  s    suite)defaultTest)Kjsonr   binasciir   Crypto.Util.py3compatr   Crypto.Util.numberr   Crypto.Util.strxorr   Crypto.SelfTest.st_commonr   Crypto.SelfTest.loaderr   r	   rw   r
   r   r   r   r   r   r   r   r   Crypto.PublicKeyr   Crypto.Signaturer   r   Crypto.Util._file_systemr   r   r   r    r4   test_vectors_verify	enumeratecountr   
isinstancer   hasattrrB   modulusr?   upperr   r   r\   rJ   	constructrU   r(   r,   srL   rO   rA   setattrrQ   rT   test_vectors_signr@   private_keyrS   rW   rX   ra   rh   r}   r   r/   r   mainr   r   r   r   <module>   s   ,






i
