U
    L?h.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   P/var/www/html/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st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sttd
| dddksttd| dksttd| dddkst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sttd
| dddksttd| dkst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65537Z8936505818327042395303988587447591295947962354408444794561435666999402846577625762582824202269399672579058991442587406384754958587400493169361356902030209)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st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st|dkst|dkst|dkstd}tt|||}|dksttt|||}||ks0td S )NrH   rJ   rq            )Nu  r   )r   i7  
   r   iF  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stt|	|t|	|| ||||gkst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stt ddkstt ddkst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stt| dg| dgd| d| dgkst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st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 Nd   digitf   )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stqqld S )&N                                             Y   r   e   g   k   m   q      r   r   iW  i  i9     iS( i    i  i  i+ i  iH  )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stqqpd S )NC   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			