U
    ZÊ¹j.M  ã                   @   sì  d dl mZ d dlmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z= d dl>m?Z? d dl@mAZA d dlBmCZCmDZD d dlEmFZF d dlGmHZHmIZI d dlJmKZK d	d
„ ZLdd„ ZMdd„ ZNdd„ ZOdd„ ZPdd„ ZQdd„ ZRdd„ ZSdd„ ZTdd„ ZUdd„ ZVdd „ ZWd!d"„ ZXd#d$„ ZYd%d&„ ZZd'd(„ Z[d)d*„ Z\d+d,„ Z]d-d.„ Z^d/d0„ Z_d1d2„ Z`d3d4„ Zad5d6„ Zbd7d8„ Zcd9d:„ Zdd;d<„ Zed=d>„ Zfd?d@„ ZgdAdB„ ZhdCdD„ ZidEdF„ ZjdGdH„ ZkdIdJ„ ZldKdL„ ZmdMdN„ ZndOdP„ ZodQdR„ ZpdSdT„ ZqdUdV„ ZrdWdX„ ZsdYdZ„ Ztd[d\„ Zud]d^„ Zvd_d`„ Zwdadb„ Zxdcdd„ Zydedf„ Zzdgdh„ Z{didj„ Z|dkdl„ Z}dmdn„ Z~doS )pé    ©Úsymbols);Ú
cycle_listÚencipher_shiftÚencipher_affineÚencipher_substitutionÚcheck_and_joinÚencipher_vigenereÚdecipher_vigenereÚencipher_hillÚdecipher_hillÚencipher_bifid5Úencipher_bifid6Úbifid5_squareÚbifid6_squareÚbifid5Úbifid6Údecipher_bifid5Údecipher_bifid6Úencipher_kid_rsaÚdecipher_kid_rsaÚkid_rsa_private_keyÚkid_rsa_public_keyÚdecipher_rsaÚrsa_private_keyÚrsa_public_keyÚencipher_rsaÚlfsr_connection_polynomialÚlfsr_autocorrelationÚlfsr_sequenceÚencode_morseÚdecode_morseÚelgamal_private_keyÚelgamal_public_keyÚencipher_elgamalÚdecipher_elgamalÚdh_private_keyÚdh_public_keyÚdh_shared_keyÚdecipher_shiftÚdecipher_affineÚencipher_bifidÚdecipher_bifidÚbifid_squareÚ
padded_keyÚuniqÚdecipher_gmÚencipher_gmÚgm_public_keyÚgm_private_keyÚencipher_bgÚdecipher_bgÚbg_private_keyÚbg_public_keyÚencipher_rot13Údecipher_rot13Úencipher_atbashÚdecipher_atbashÚNonInvertibleCipherWarningÚencipher_railfenceÚdecipher_railfence)Úgcd)ÚMatrix)ÚisprimeÚis_primitive_root)ÚFF)ÚraisesÚwarns)Ú	randrangec                   C   s:   t ddƒdkst‚t ddƒdks$t‚t ddƒdks6t‚d S )Núhello worldé   úhlowrdel olé   úhorel ollwdé   úhwe olordll)r=   ÚAssertionError© rO   rO   ú]/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/crypto/tests/test_crypto.pyÚtest_encipher_railfence   s    rQ   c                   C   s:   t ddƒdkst‚t ddƒdks$t‚t ddƒdks6t‚d S )NrI   rH   rG   rK   rJ   rM   rL   )r>   rN   rO   rO   rO   rP   Útest_decipher_railfence!   s    rR   c                   C   sR   t ddƒddddgkst‚t ddƒddddgks4t‚t ddƒddddgksNt‚d S )NrJ   rL   r   é   rH   éÿÿÿÿ)r   rN   rO   rO   rO   rP   Útest_cycle_list'   s    rU   c                   C   sL   t ddƒdkst‚t ddƒdks$t‚t ddƒdks6t‚tddƒdksHt‚d S )NÚABCr   rS   ÚBCDrT   ZZAB)r   rN   r)   rO   rO   rO   rP   Útest_encipher_shift-   s    rX   c                   C   sD   t dƒdkst‚t dƒdks t‚tdƒdks0t‚tdƒdks@t‚d S )NrV   ÚNOP)r8   rN   r9   rO   rO   rO   rP   Útest_encipher_rot133   s    rZ   c                   C   sŠ   t ddƒdkst‚t ddƒdks$t‚t ddƒdks6t‚t dddd	�d
ksLt‚t dddd	�dksbt‚t ddƒdkstt‚tddƒdks†t‚d S )NrV   )rS   r   )rS   rS   rW   )rT   r   ZAZY)rT   rS   ÚABCDr   ÚBADÚ123Ú1234Z214)rJ   é   ZQTW)r   rN   r*   rO   rO   rO   rP   Útest_encipher_affine:   s    r`   c                   C   sD   t dƒdkst‚t dƒdks t‚tdƒdks0t‚tdƒdks@t‚d S )NrV   ZZYX)r:   rN   r;   rO   rO   rO   rP   Útest_encipher_atbashC   s    ra   c                   C   s,   t dddƒdkst‚t dddƒdks(t‚d S )NrV   ÚBACr]   Z1243r^   Z124)r   rN   rO   rO   rO   rP   Útest_encipher_substitutionI   s    rc   c                   C   s`   t dƒdkst‚t tdƒƒdks$t‚t d ¡ ƒdks8t‚t dddd�dksNt‚ttdd„ ƒ d S )	NÚabcZaaabczab cÚaT)Úfilterc                   S   s
   t ddƒS )NÚabre   )r   rO   rO   rO   rP   Ú<lambda>S   ó    z%test_check_and_join.<locals>.<lambda>)r   rN   r/   ÚsplitrD   Ú
ValueErrorrO   rO   rO   rP   Útest_check_and_joinN   s
    rl   c                   C   sn   t ddƒdkst‚t dddd�dks(t‚t dddd�dks>t‚t dddd�dksTt‚t d	ddd�d	ksjt‚d S )
NrV   ZACEr[   r   ZACAÚABZACCZACÚA)r	   rN   rO   rO   rO   rP   Útest_encipher_vigenereV   s
    ro   c                   C   sn   t ddƒdkst‚t dddd�dks(t‚t dddd�dks>t‚t dddd�dksTt‚t dddd�dksjt‚d S )	NrV   ZAAAr[   r   rm   ZAACZAArn   )r
   rN   rO   rO   rO   rP   Útest_decipher_vigenere^   s
    rp   c                  C   sÎ   t ddddddgƒ} td| ƒdks&t‚t ddddddgƒ} td| ƒdksLt‚td| dd�dksbt‚t ddddddgƒ} td| dd�d	ksŒt‚td
| dd�dks¢t‚td| ƒdks´t‚td| dd�dksÊt‚d S )NrH   rS   rJ   é   r[   ÚCFIVr   r   ÚCBABrm   ÚCBZABAZCFGCÚZ)ÚpadZCFYV)r@   r   rN   ©rn   rO   rO   rP   Útest_encipher_hillf   s    rx   c                  C   s¸   t ddddddgƒ} td| ƒdks&t‚t ddddddgƒ} td| ƒdksLt‚td| dd�dksbt‚t ddddddgƒ} td	| dd�dksŒt‚td
| dd�dks¢t‚td| ƒdks´t‚d S )NrH   rS   rJ   rq   rr   r[   r   r   rs   rt   rm   ZCFAZABAA)r@   r   rN   rw   rO   rO   rP   Útest_decipher_hillu   s    ry   c                   C   sL   t ddƒdkst‚t ddƒdks$t‚t ddƒdks6t‚t ddƒd	ksHt‚d S )
Nrm   ÚCDÚCOrg   ÚcZCHúa bcÚbrb   )r   rN   rO   rO   rO   rP   Útest_encipher_bifid5‚   s    r   c                     s0   t ‰ ‡ fdd„} tdd| ƒ}tdƒ|ks,t‚d S )Nc                    s   t ˆ d|  |  ƒS )Nrq   r   ©ÚiÚjrw   rO   rP   rh   ‹   ri   z$test_bifid5_square.<locals>.<lambda>rq   Ú )r   r@   r   rN   ©ÚfÚMrO   rw   rP   Útest_bifid5_square‰   s    r‡   c                   C   sL   t ddƒdkst‚t ddƒdks$t‚t ddƒdks6t‚t ddƒdksHt‚d S )	Nrm   r{   rz   Úchr|   úb acr~   rV   )r   rN   rO   rO   rO   rP   Útest_decipher_bifid5�   s    rŠ   c                   C   sL   t ddƒdkst‚t ddƒdks$t‚t ddƒdks6t‚t ddƒd	ksHt‚d S )
Nrm   rz   ÚCPrg   r|   ÚCIr}   r~   rb   )r   rN   rO   rO   rO   rP   Útest_encipher_bifid6—   s    r�   c                   C   sL   t ddƒdkst‚t ddƒdks$t‚t ddƒdks6t‚t ddƒdksHt‚d S )	Nrm   r‹   rz   Úcir|   r‰   r~   rV   )r   rN   rO   rO   rO   rP   Útest_decipher_bifid6ž   s    r�   c                     s0   t ‰ ‡ fdd„} tdd| ƒ}tdƒ|ks,t‚d S )Nc                    s   t ˆ d|  |  ƒS )Né   r   r€   rw   rO   rP   rh   §   ri   z$test_bifid6_square.<locals>.<lambda>r�   rƒ   )r   r@   r   rN   r„   rO   rw   rP   Útest_bifid6_square¥   s    r‘   c                	   C   sh   t dddƒdkst‚t dddƒdks(t‚ttƒ�. t dddƒdksFt‚t dddƒd	ksZt‚W 5 Q R X d S )
NrH   rJ   rS   ©r�   rS   rq   ©é   rJ   ©rL   rS   é   F)r   rN   rE   r<   rO   rO   rO   rP   Útest_rsa_public_key¬   s
    
r—   c                	   C   s|   t dddƒdkst‚t dddƒdks(t‚t dddƒd	ks<t‚ttƒ�. t dddƒd
ksZt‚t dddƒdksnt‚W 5 Q R X d S )NrH   rJ   rS   r’   rq   r“   é   é   )i›  ií  r•   r–   F)r   rN   rE   r<   rO   rO   rO   rP   Útest_rsa_private_keyµ   s    
rš   c                  C   s\   t dƒ} t dƒ}t dƒ}t dƒ}t| ||ƒ| | |fks<t‚t| ||ƒ| | |fksXt‚d S )NZN101565610013301240713207239558950144682174355406589305284428666903702505233009ZM89468719188754548893545560595594841381237600305314352142924213312069293984003Z65537Zš8936505818327042395303988587447591295947962354408444794561435666999402846577625762582824202269399672579058991442587406384754958587400493169361356902030209)Úintr   rN   r   )ÚpÚqÚeÚdrO   rO   rP   Útest_rsa_large_key¿   s    r    c               	   C   sr   t dddƒ} td| ƒdkst‚t dddƒ} td| ƒdks<t‚ttƒ�$ t dddƒ} td| ƒdksdt‚W 5 Q R X d S ©NrH   rJ   rS   rq   r–   )r   r   rN   rE   r<   )ÚpukrO   rO   rP   Útest_encipher_rsaÎ   s    
r£   c               	   C   sr   t dddƒ} td| ƒdkst‚t dddƒ} td| ƒdks<t‚ttƒ�$ t dddƒ} td| ƒdksdt‚W 5 Q R X d S r¡   )r   r   rN   rE   r<   )ÚprkrO   rO   rP   Útest_decipher_rsaÙ   s    
r¥   c            	      C   s4  t dddddddƒ} tdddddddƒ}| dks4t‚|dks@t‚d	}td| d
 | ƒ}|dksbt‚t||ƒd
 d }||ks€t‚t dddddƒ}tdddddƒ}t dddddƒ}tdddddƒ}|dksÌt‚|dksØt‚|dksät‚|dksðt‚d}tt||ƒ|ƒ}|dk�st‚tt||ƒ|ƒ}||k�s0t‚d S )NrH   rJ   rq   é   é   é   )éNu  r¦   )r©   i7  é
   r”   i‘F  é5   é)   é+   é/   éa   )éÑC r¬   )r°   i™| )r°   r¯   )r°   i!ô i!0  iô€ )r   r   rN   r   r   )	r¢   r¤   ÚmsgÚ	encryptedÚ	decryptedZpuk1Zprk1Zpuk2Zprk2rO   rO   rP   Ú!test_mutltiprime_rsa_full_exampleä   s,    r´   c               	   C   s¨   t dƒ} t dƒ}t dƒ}t dƒ}t dƒ}d}t| |||||ƒ}t| |||||ƒ}d}t||ƒ}	t||| ||||gƒ}
|	|
ks€t‚t|	|ƒt|	|| ||||gƒks¤t‚d S )NA5  101771576071542450680238615036930821209064871437250622834065015408225822620404699983829716714082136463818069719487950024555765445186962893346463841419427008800341257468600224049986260471922572481630144688417254769186394157267097360778136329612909110256421232977833028677441206049309220354796014376698325101693A4  28752342353095132872290181526607275886182793241660805077850801756895127977542869729522735531281818618305768362897386687452503402819969112887067641411845844290003577887448262476551386164327966696316822188398336199002306588703902894100476186823849595103239410527279605442148285816149368667083114802852804976893A5  176982292598688257768795007363501868388509619359563101343782618977186218671746306754136969481624522529192113803880017112559607315449521981157084370187887650624061033066022458512942411841187478937899723152771600850861641198795360418753353848448205660287479617671726408053319619892052000850883994343378882717849A4  68925428438585431029269182233502611027091755064643742383515623643213105828968933955293670749428083531871387944227457184196452829123186515721260426690367759918078989691645612028911275283598502265889669730331688206825220074713977607415178738015831030364290585369150502819743827343552098197095520550865360159439A4  69035483433453632820551311892368908779778144568711455301541094314870476423226953576968609257479231896350331830698238209105217117290910679774888326149322416241405010692044244589681980660015448444826108008217972129130625571421904893252804729877353352739420480574842850202181462656251626522910618936534699566291i  iè  )r›   r   r   r   rN   r   )rœ   r�   ÚrÚsÚtrž   r¢   r¤   Z	plaintextZciphertext_1Zciphertext_2rO   rO   rP   Útest_rsa_crt_extreme  s2    ÿÿÿÿÿ
ÿr¸   c               
   C   sŽ   d\} }d}t | ||dd�}t| ||dd�}t|d ƒD ]P}t||ƒ}t||ƒ}z||ks^t‚W q8 tk
r†   td |||¡ƒ‚Y q8X q8d S )N)é=   r«   é   Ú
Carmichael)Útotientr   úRThe RSA is not correctly decrypted (Original : {}, Encrypted : {}, Decrypted : {})©r   r   Úranger   r   rN   Úformat)rœ   r�   rž   r¢   r¤   r±   r²   r³   rO   rO   rP   Útest_rsa_exhaustive7  s"    

  þÿrÁ   c            	   
   C   sœ   ddddg} d}| |g }t |ddiŽ}t|ddiŽ}|d }t|ƒD ]P}t||ƒ}t||ƒ}z||kslt‚W qF tk
r”   td |||¡ƒ‚Y qFX qFd S )	NrJ   rq   r¦   r§   r¼   r»   r   r½   r¾   ©	Zprimesrž   Úargsr¢   r¤   Únr±   r²   r³   rO   rO   rP   Útest_rsa_multiprime_exhanstiveJ  s&    


  þÿrÅ   c            	   
   C   sª   dddg} d}| |g }t |ddiŽ}t|ddiŽ}|d }t|ƒD ]`}t||ƒdkrXqDt||ƒ}t||ƒ}z||kszt‚W qD tk
r¢   td |||¡ƒ‚Y qDX qDd S )Nrq   r¦   Z
multipowerTr   rS   r½   )r   r   r¿   r?   r   r   rN   rÀ   rÂ   rO   rO   rP   Útest_rsa_multipower_exhanstive_  s*    



  þÿrÆ   c                   C   sF   t ddddƒdkst‚t ddddƒdks,t‚t ddddƒdksBt‚d S )NrS   rH   ©rq   rH   ©r–   rJ   ©r¦   rH   )r   rN   rO   rO   rO   rP   Útest_kid_rsa_public_keyw  s    rÊ   c                   C   sF   t ddddƒdkst‚t ddddƒdks,t‚t ddddƒdksBt‚d S )NrS   rH   ©rq   rJ   rÈ   ©r¦   rL   )r   rN   rO   rO   rO   rP   Útest_kid_rsa_private_key}  s    rÍ   c                   C   s:   t ddƒdkst‚t ddƒdks$t‚t ddƒdks6t‚d S )NrS   rÇ   rH   rÈ   rJ   rÉ   )r   rN   rO   rO   rO   rP   Útest_encipher_kid_rsaƒ  s    rÎ   c                   C   s:   t ddƒdkst‚t ddƒdks$t‚t ddƒdks6t‚d S )NrH   rË   rS   rJ   rÈ   rÌ   )r   rN   rO   rO   rO   rP   Útest_decipher_kid_rsa‰  s    rÏ   c                   C   s¬   t dƒdkst‚t dƒdks t‚t dƒdks0t‚t dƒdks@t‚t dƒdksPt‚t dd	d
�dksdt‚t ddd
�dksxt‚t dƒdksˆt‚t dƒdks˜t‚t dƒdks¨t‚d S )NrV   z.-|-...|-.-.zSMS z...|--|...||zSMS
rƒ   ú z||ú`)Úsepz``z````z!@#$%^&*()_+z/-.-.--|.--.-.|...-..-|-.--.|-.--.-|..--.-|.-.-.Z12345z.----|..---|...--|....-|.....Z67890z-....|--...|---..|----.|-----)r    rN   rO   rO   rO   rP   Útest_encode_morse�  s    rÓ   c                   C   s2   t dƒdkst‚t dƒdks t‚ttdd„ ƒ d S )Nz
-.-|.|-.--ZKEYz.-.|..-|-.||ZRUNc                   S   s   t dƒS )Nz	.....----)r!   rO   rO   rO   rP   rh   Ÿ  ri   z#test_decode_morse.<locals>.<lambda>)r!   rN   rD   ÚKeyErrorrO   rO   rO   rP   Útest_decode_morseœ  s    rÕ   c                  C   s  t tdd„ ƒ t tdd„ ƒ tdƒ} t| dƒg| dƒgdƒ| dƒ| dƒgksPt‚t| dƒg| dƒgdƒ| dƒ| dƒgks|t‚tdƒ} t| dƒg| dƒgdƒ| dƒ| dƒgks°t‚t| dƒg| dƒgdƒ| dƒ| dƒgksÜt‚t| dƒg| dƒgdƒ| dƒ| dƒgk�s
t‚d S )Nc                   S   s   t ddgdƒS ©NrS   ©r   rO   rO   rO   rP   rh   £  ri   z$test_lfsr_sequence.<locals>.<lambda>c                   S   s   t dgddƒS rÖ   r×   rO   rO   rO   rP   rh   ¤  ri   rH   rS   r   rJ   )rD   Ú	TypeErrorrC   r   rN   )ÚFrO   rO   rP   Útest_lfsr_sequence¢  s    ,,,,rÚ   c                  C   sf   t tdd„ ƒ tdƒ} t| dƒ| dƒg| dƒ| dƒgdƒ}t|ddƒdksNt‚t|ddƒdksbt‚d S )Nc                   S   s   t dddƒS )NrS   rH   rJ   )r   rO   rO   rO   rP   rh   ¯  ri   z+test_lfsr_autocorrelation.<locals>.<lambda>rH   rS   r   rq   rT   )rD   rØ   rC   r   r   rN   )rÙ   r¶   rO   rO   rP   Útest_lfsr_autocorrelation®  s
    $rÛ   c                  C   s�   t dƒ} tdƒ}t| dƒ| dƒg| dƒ| dƒgdƒ}t|ƒ|d d ksLt‚t| dƒ| dƒg| dƒ| dƒgdƒ}t|ƒ|d | d ksŒt‚d S )NrH   ÚxrS   r   rq   )rC   r   r   r   rN   )rÙ   rÜ   r¶   rO   rO   rP   Útest_lfsr_connection_polynomial¶  s    $$rÝ   c                  C   sB   t dd�\} }}t| ƒst‚t|| ƒs*t‚tt| ƒƒdks>t‚d S ©Néd   ©Údigitéf   )r"   rA   rN   rB   ÚlenÚbin)re   r~   Ú_rO   rO   rP   Útest_elgamal_private_key¿  s    ræ   c                     sb   t dƒ‰tˆƒ} | d ‰ ˆ d ttˆ d | ƒˆƒks8t‚tt‡ ‡fdd„ƒ tt‡fdd„ƒ d S )Nrq   r   rS   c                      s
   t ˆ ˆƒS )N©r$   rO   ©ÚPÚdkrO   rP   rh   Ë  ri   ztest_elgamal.<locals>.<lambda>c                      s
   t dˆ ƒS )NrT   rç   rO   )rê   rO   rP   rh   Ì  ri   )r"   r#   r%   r$   rN   rD   rk   )ZekrO   rè   rP   Útest_elgamalÆ  s     rë   c                  C   sB   t dd�\} }}t| ƒst‚t|| ƒs*t‚tt| ƒƒdks>t‚d S rÞ   )r&   rA   rN   rB   rã   rä   )rœ   Úgrå   rO   rO   rP   Útest_dh_private_keyÏ  s    rí   c                  C   sT   t dd�\} }}t| ||fƒ\}}}| |ks0t‚||ks<t‚|t||| ƒksPt‚d S )Nrß   rà   )r&   r'   rN   Úpow)Úp1Úg1re   Zp2Úg2ÚgarO   rO   rP   Útest_dh_public_keyÖ  s
    ró   c                  C   sX   t dd�} t| ƒ\}}}td|ƒ}t|||f|ƒ}|t|||ƒksFt‚ttdd„ ƒ d S )Nrß   rà   rH   c                   S   s
   t ddƒS )N)i  é   i5  iÐ  )r(   rO   rO   rO   rP   rh   ä  ri   z$test_dh_shared_key.<locals>.<lambda>)r&   r'   rF   r(   rî   rN   rD   rk   )r¤   rœ   rå   rò   r~   ÚskrO   rO   rP   Útest_dh_shared_keyÞ  s    

rö   c                   C   s2   t ddƒdkst‚ttdd„ ƒ ttdd„ ƒ d S )Nr~   rg   Úbac                   S   s
   t ddƒS )Nrg   Zace©r.   rO   rO   rO   rP   rh   é  ri   z!test_padded_key.<locals>.<lambda>c                   S   s
   t ddƒS )Nrg   Zabbarø   rO   rO   rO   rP   rh   ê  ri   )r.   rN   rD   rk   rO   rO   rO   rP   Útest_padded_keyç  s    rù   c                   C   s~   t tdd„ ƒ tdddƒdks"t‚t tdd„ ƒ tdddƒdksDt‚t tdd„ ƒ td	ƒtd
ƒksft‚tdƒtdƒkszt‚d S )Nc                   S   s   t dddƒS )Nrd   r~   Úabcde)r+   rO   rO   rO   rP   rh   î  ri   ztest_bifid.<locals>.<lambda>rd   r~   ÚabcdÚbdbc                   S   s   t dddƒS )Nrü   r~   rú   )r,   rO   rO   rO   rP   rh   ð  ri   c                   S   s   t dƒS )Nrú   )r-   rO   rO   rO   rP   rh   ò  ri   ÚBZBACDEFGHIKLMNOPQRSTUVWXYZÚB0Z$B0ACDEFGHIJKLMNOPQRSTUVWXYZ123456789)rD   rk   r+   rN   r   r   rO   rO   rO   rP   Ú
test_bifidí  s    ÿÿrÿ   c            
      C   s¸   ddddddddd	d
dddddg} dddddddddddddddg}dddddddd d!d"d#d$d%g}t | |ƒD ]F\}}t||ƒ}|D ].}t||ƒ}t||ƒ}t||ƒ}	|	|ks‚t‚q‚qld S )&Néƒ   é‰   é‹   é•   é—   é�   é£   é§   é­   é³   éµ   é¿   éÁ   éÅ   éÇ   éY   r¯   ée   ég   ék   ém   éq   é   r®   r   iW€  iÿ…  iÕ9  é   iS( ià•  éÔ  iÄë  iÛÉ  i™+ ižñ  iåH  )Úzipr3   r2   r1   r0   rN   ©
ZpsÚqsÚmessagesrœ   r�   Úprir±   ZpubÚencÚdecrO   rO   rP   Útest_encipher_decipher_gmù  sN          ÿ      ÿ           þ



r  c                   C   sD   t tdd„ ƒ t tdd„ ƒ t tdd„ ƒ ds@tdtddƒkƒ‚d S )Nc                   S   s
   t ddƒS )Nr¨   r”   ©r2   rO   rO   rO   rP   rh     ri   z%test_gm_private_key.<locals>.<lambda>c                   S   s
   t ddƒS )Nr   r   rO   rO   rO   rP   rh     ri   c                   S   s
   t ddƒS )Nr   rq   r   rO   rO   rO   rP   rh     ri   rº   é   )rD   rk   rN   r2   rO   rO   rO   rP   Útest_gm_private_key  s    r"  c                   C   s>   dt ddƒd kst‚dt ddƒd ks,t‚ttdd	„ ƒ d S )
NiC  rº   r!  rS   r”   rJ   rq   c                   S   s
   t ddƒS )Nr”   r!  r   rO   rO   rO   rP   rh     ri   z$test_gm_public_key.<locals>.<lambda>)r2   rN   rD   rk   rO   rO   rO   rP   Útest_gm_public_key  s    r#  c            
      C   s¼   ddddddddd	d
dddddg} dddddddd	d
ddddddg }}dddddddddddddg}t | |ƒD ]F\}}t||ƒ}|D ].}t||ƒ}t||ƒ}t||ƒ}	|	|ks†t‚q†qpd S )NéC   r¦   éG   r  r§   r­   r  r®   éO   r!  éS   r˜   é;   r  é   r   iH  iW  é”   r  iö  i  r  i[  i  iþ  ij  éº   )r  r6   r7   r4   r5   rN   r  rO   rO   rP   Útest_encipher_decipher_bg  sP          ÿ       ÿ           þ



r,  c                   C   sD   t tdd„ ƒ t tdd„ ƒ t tdd„ ƒ ds@tdtddƒkƒ‚d S )Nc                   S   s
   t ddƒS )Nr–   r_   ©r6   rO   rO   rO   rP   rh   *  ri   z%test_bg_private_key.<locals>.<lambda>c                   S   s
   t ddƒS )Nr–   r-  rO   rO   rO   rP   rh   +  ri   c                   S   s
   t ddƒS ©Nr¨   rº   r-  rO   rO   rO   rP   rh   ,  ri   r˜   r)  )rD   rk   rN   r6   rO   rO   rO   rP   Útest_bg_private_key)  s    r/  c                   C   s6   dt ddƒkst‚dt ddƒks$t‚ttdd„ ƒ d S )	Ni­  r$  r&  iÉ  r˜   r)  c                   S   s
   t ddƒS r.  r-  rO   rO   rO   rP   rh   2  ri   z$test_bg_public_key.<locals>.<lambda>)r7   rN   rD   rk   rO   rO   rO   rP   Útest_bg_public_key/  s    r0  N)Z
sympy.corer   Zsympy.crypto.cryptor   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   Zsympy.external.gmpyr?   Zsympy.matricesr@   Zsympy.ntheoryrA   rB   Zsympy.polys.domainsrC   Zsympy.testing.pytestrD   rE   Zsympy.core.randomrF   rQ   rR   rU   rX   rZ   r`   ra   rc   rl   ro   rp   rx   ry   r   r‡   rŠ   r�   r�   r‘   r—   rš   r    r£   r¥   r´   r¸   rÁ   rÅ   rÆ   rÊ   rÍ   rÎ   rÏ   rÓ   rÕ   rÚ   rÛ   rÝ   ræ   rë   rí   ró   rö   rù   rÿ   r  r"  r#  r,  r/  r0  rO   rO   rO   rP   Ú<module>   st   ô		
!2			