o
    Þý°j!5  ã                   @   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œƒpŠg Z$e%e$ƒD ]Z\Z&Z'e(e'e)ƒr™q�e*e'dƒr¢e'j+Z,q�e 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ráe;e#d#e& e9ƒ q�e;e#d$e& e8ƒ q�G 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�r¬d@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Cryptodome.Hash.Únew)Ú
__import__ÚglobalsÚlocals)Ú	hash_name© r   úž/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/Cryptodome/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_NoParamsz€Verify 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_Testsz¼Verify that the legacy module Cryptodome.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 Cryptodome.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   ÚCryptodome.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   ÚCryptodome.Util.py3compatr   ÚCryptodome.Util.numberr   ÚCryptodome.Util.strxorr   ÚCryptodome.SelfTest.st_commonr   ÚCryptodome.SelfTest.loaderr   r	   rw   r
   r   r   r   r   r   r   r   r   ÚCryptodome.PublicKeyr   ÚCryptodome.Signaturer   r   ÚCryptodome.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
þ