o
    Þý°jû=  ã                   @   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#Z$e%e$e&ƒr‘q‡e'e$dƒrše$j(Z)q‡e'e$dƒr 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ƒ q‡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ƒ�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�rŠe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�rÚdEdF„ 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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_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+É¯»ìþ°¥¹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!   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_Testsz»Verify that the legacy module Cryptodome.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 Cryptodome.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   ÚCryptodome.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�   ÚCryptodome.Util.py3compatr   r   ÚCryptodome.Util.numberr   ÚCryptodome.Util.strxorr   ÚCryptodome.SelfTest.st_commonr   ÚCryptodome.SelfTest.loaderr   r	   r�   r
   r   r   r   r   ÚCryptodome.PublicKeyr   ÚCryptodome.Signaturer   r   ÚCryptodome.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
ý