a
    <b3M                     @   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@mAZAmBZB d dlCmDZD d dlEmFZFmGZG d dlHmIZI dd	 ZJd
d ZKd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]d0d1 Z^d2d3 Z_d4d5 Z`d6d7 Zad8d9 Zbd:d; Zcd<d= Zdd>d? Zed@dA ZfdBdC ZgdDdE ZhdFdG ZidHdI ZjdJdK ZkdLdM ZldNdO ZmdPdQ ZndRdS ZodTdU ZpdVdW ZqdXdY ZrdZd[ Zsd\d] Ztd^d_ Zud`da Zvdbdc Zwddde Zxdfdg Zydhdi Zzdjdk Z{dldm Z|dnS )o    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)Matrix)isprimeis_primitive_root)FF)raiseswarns)	randrangec                   C   s:   t dddksJ t dddks$J t dddks6J d S )Nhello world   hlowrdel ol   horel ollwd   hwe olordll)r=    rM   rM   n/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/sympy/crypto/tests/test_crypto.pytest_encipher_railfence   s    rO   c                   C   s:   t dddksJ t dddks$J t dddks6J d S )NrH   rG   rF   rJ   rI   rL   rK   )r>   rM   rM   rM   rN   test_decipher_railfence    s    rP   c                   C   sF   t ddg dksJ t ddg dks,J t ddg dksBJ d S )NrI   rK   )rI   r      rG   rQ   )rQ   rG   rI   r   )r   rM   rM   rM   rN   test_cycle_list&   s    rS   c                   C   sL   t dddksJ t dddks$J t dddks6J tdddksHJ d S )NABCr   rQ   BCDrR   ZZAB)r   r)   rM   rM   rM   rN   test_encipher_shift,   s    rV   c                   C   sD   t ddksJ t ddks J tddks0J tddks@J d S )NrT   NOP)r8   r9   rM   rM   rM   rN   test_encipher_rot132   s    rX   c                   C   s   t dddksJ t dddks$J t dddks6J t dddd	d
ksLJ t dddd	dksbJ t dddkstJ tdddksJ d S )NrT   )rQ   r   )rQ   rQ   rU   )rR   r   ZAZY)rR   rQ   ABCDr   BAD1231234Z214)rI      ZQTW)r   r*   rM   rM   rM   rN   test_encipher_affine9   s    r^   c                   C   sD   t ddksJ t ddks J tddks0J tddks@J d S )NrT   ZZYX)r:   r;   rM   rM   rM   rN   test_encipher_atbashB   s    r_   c                   C   s,   t ddddksJ t ddddks(J d S )NrT   BACr[   Z1243r\   Z124)r   rM   rM   rM   rN   test_encipher_substitutionH   s    ra   c                   C   s`   t ddksJ t tddks$J t d dks8J t dddddksNJ ttdd  d S )	NabcZaaabczab caT)filterc                   S   s
   t ddS )Nabrc   )r   rM   rM   rM   rN   <lambda>R       z%test_check_and_join.<locals>.<lambda>)r   r/   splitrC   
ValueErrorrM   rM   rM   rN   test_check_and_joinM   s
    rj   c                   C   sn   t dddksJ t dddddks(J t dddddks>J t dddddksTJ t d	dddd	ksjJ d S )
NrT   ZACErY   r   ZACAABZACCZACA)r	   rM   rM   rM   rN   test_encipher_vigenereU   s
    rm   c                   C   sn   t dddksJ t dddddks(J t dddddks>J t dddddksTJ t dddddksjJ d S )	NrT   ZAAArY   r   rk   ZAACZAArl   )r
   rM   rM   rM   rN   test_decipher_vigenere]   s
    rn   c                  C   s   t ddg d} td| dks"J t ddg d} td| dksDJ td| dddksZJ t ddg d} td| dddksJ td| ddd	ksJ td
| dksJ td
| dddksJ d S )NrG   rQ   rG   rI      rY   CFIVrQ   r   r   rQ   r   CBABrk   CBZABAZCFGCZ)padZCFYV)r?   r   rl   rM   rM   rN   test_encipher_hille   s    rx   c                  C   s   t ddg d} td| dks"J t ddg d} td| dksDJ td| dddksZJ t ddg d} td| dddksJ td| ddd	ksJ td
| dksJ d S )NrG   ro   rq   rY   rr   r   rs   rt   rk   ZCFAZABAA)r?   r   rw   rM   rM   rN   test_decipher_hillt   s    ry   c                   C   sL   t dddksJ t dddks$J t dddks6J t ddd	ksHJ d S )
Nrk   CDCOre   cZCHa bcbr`   )r   rM   rM   rM   rN   test_encipher_bifid5   s    r   c                     s0   t   fdd} tdd| }td|ks,J d S )Nc                    s   t  d|  |  S )Nrp   r   ijrw   rM   rN   rf      rg   z$test_bifid5_square.<locals>.<lambda>rp    )r   r?   r   fMrM   rw   rN   test_bifid5_square   s    r   c                   C   sL   t dddksJ t dddks$J t dddks6J t dddksHJ d S )	Nrk   r{   rz   chr|   b acr~   rT   )r   rM   rM   rM   rN   test_decipher_bifid5   s    r   c                   C   sL   t dddksJ t dddks$J t dddks6J t ddd	ksHJ d S )
Nrk   rz   CPre   r|   CIr}   r~   r`   )r   rM   rM   rM   rN   test_encipher_bifid6   s    r   c                   C   sL   t dddksJ t dddks$J t dddks6J t dddksHJ d S )	Nrk   r   rz   cir|   r   r~   rT   )r   rM   rM   rM   rN   test_decipher_bifid6   s    r   c                     s0   t   fdd} tdd| }td|ks,J d S )Nc                    s   t  d|  |  S )N   r   r   rw   rM   rN   rf      rg   z$test_bifid6_square.<locals>.<lambda>r   r   )r   r?   r   r   rM   rw   rN   test_bifid6_square   s    r   c                   C   s|   t ddddksJ t ddddks(J tt8 t ddddksFJ t dddd	u sZJ W d    n1 sn0    Y  d S )
NrG   rI   rQ   r   rQ   rp      rI   rK   rQ      F)r   rD   r<   rM   rM   rM   rN   test_rsa_public_key   s
    
r   c                   C   s   t ddddksJ t ddddks(J t dddd	ks<J tt8 t dddd
ksZJ t ddddu snJ W d    n1 s0    Y  d S )NrG   rI   rQ   r   rp   r         )i  i  r   r   F)r   rD   r<   rM   rM   rM   rN   test_rsa_private_key   s    
r   c                  C   s\   t d} t d}t d}t d}t| ||| | |fks<J t| ||| | |fksXJ d S )NZN101565610013301240713207239558950144682174355406589305284428666903702505233009ZM89468719188754548893545560595594841381237600305314352142924213312069293984003Z65537Z8936505818327042395303988587447591295947962354408444794561435666999402846577625762582824202269399672579058991442587406384754958587400493169361356902030209)intr   r   )pqedrM   rM   rN   test_rsa_large_key   s    r   c                  C   s   t ddd} td| dksJ t ddd} td| dks<J tt. t ddd} td| dksdJ W d    n1 sx0    Y  d S NrG   rI   rQ   rp   r   )r   r   rD   r<   )pukrM   rM   rN   test_encipher_rsa   s    
r   c                  C   s   t ddd} td| dksJ t ddd} td| dks<J tt. t ddd} td| dksdJ W d    n1 sx0    Y  d S r   )r   r   rD   r<   )prkrM   rM   rN   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s4J |dks@J d	}td| d
 | }|dksbJ t||d
 d }||ksJ 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sJ |dksJ |dksJ |dksJ d}tt|||}|dksJ tt|||}||ks0J d S )NrG   rI   rp            )Nu  r   )r   i7  
   r   iF  5   )   +   /   a   )C r   )r   i| )r   r   )r   i! i!0  i )r   r   r   r   )	r   r   msg	encrypted	decryptedZpuk1Zprk1Zpuk2Zprk2rM   rM   rN   !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sJ t|	|t|	|| ||||gksJ d S )NA5  101771576071542450680238615036930821209064871437250622834065015408225822620404699983829716714082136463818069719487950024555765445186962893346463841419427008800341257468600224049986260471922572481630144688417254769186394157267097360778136329612909110256421232977833028677441206049309220354796014376698325101693A4  28752342353095132872290181526607275886182793241660805077850801756895127977542869729522735531281818618305768362897386687452503402819969112887067641411845844290003577887448262476551386164327966696316822188398336199002306588703902894100476186823849595103239410527279605442148285816149368667083114802852804976893A5  176982292598688257768795007363501868388509619359563101343782618977186218671746306754136969481624522529192113803880017112559607315449521981157084370187887650624061033066022458512942411841187478937899723152771600850861641198795360418753353848448205660287479617671726408053319619892052000850883994343378882717849A4  68925428438585431029269182233502611027091755064643742383515623643213105828968933955293670749428083531871387944227457184196452829123186515721260426690367759918078989691645612028911275283598502265889669730331688206825220074713977607415178738015831030364290585369150502819743827343552098197095520550865360159439A4  69035483433453632820551311892368908779778144568711455301541094314870476423226953576968609257479231896350331830698238209105217117290910679774888326149322416241405010692044244589681980660015448444826108008217972129130625571421904893252804729877353352739420480574842850202181462656251626522910618936534699566291i  i  )r   r   r   r   r   )r   r   rstr   r   r   	plaintextZciphertext_1Zciphertext_2rM   rM   rN   test_rsa_crt_extreme  s2    
r   c               
   C   s   d\} }d}t | ||dd}t| ||dd}t|d D ]N}t||}t||}z||ks^J W q8 ty   td|||Y q80 q8d S )N)=   r      
Carmichael)totientr   RThe RSA is not correctly decrypted (Original : {}, Encrypted : {}, Decrypted : {})r   r   ranger   r   AssertionErrorformat)r   r   r   r   r   r   r   r   rM   rM   rN   test_rsa_exhaustive6  s    

r   c            	   
   C   s   g d} d}| |g }t |ddi}t|ddi}|d }t|D ]N}t||}t||}z||kshJ W qB ty   td|||Y qB0 qBd S )N)rI   rp   r   r   r   r   r   r   r   r   )	primesr   argsr   r   nr   r   r   rM   rM   rN   test_rsa_multiprime_exhanstiveI  s"    


r   c            
   
   C   s   ddl m}  g d}d}||g }t|ddi}t|ddi}|d }t|D ]^}| ||dkrbqNt||}t||}	z|	|ksJ W qN ty   td|||	Y qN0 qNd S )	Nr   )igcd)rp   rp   r   r   Z
multipowerTrQ   r   )	Zsympy.core.numbersr   r   r   r   r   r   r   r   )
r   r   r   r   r   r   r   r   r   r   rM   rM   rN   test_rsa_multipower_exhanstive^  s(    


r   c                   C   sF   t dddddksJ t dddddks,J t dddddksBJ d S )NrQ   rG   rp   rG   r   rI   r   rG   )r   rM   rM   rM   rN   test_kid_rsa_public_keyw  s    r   c                   C   sF   t dddddksJ t dddddks,J t dddddksBJ d S )NrQ   rG   rp   rI   r   r   rK   )r   rM   rM   rM   rN   test_kid_rsa_private_key}  s    r   c                   C   s:   t dddksJ t dddks$J t dddks6J d S )NrQ   r   rG   r   rI   r   )r   rM   rM   rM   rN   test_encipher_kid_rsa  s    r   c                   C   s:   t dddksJ t dddks$J t dddks6J d S )NrG   r   rQ   rI   r   r   )r   rM   rM   rM   rN   test_decipher_kid_rsa  s    r   c                   C   s   t ddksJ t ddks J t ddks0J t ddks@J t ddksPJ t dd	d
dksdJ t ddd
dksxJ t ddksJ t ddksJ t ddksJ d S )NrT   z.-|-...|-.-.zSMS z...|--|...||zSMS
r    z||`)sepz``z````z!@#$%^&*()_+z/-.-.--|.--.-.|...-..-|-.--.|-.--.-|..--.-|.-.-.Z12345z.----|..---|...--|....-|.....Z67890z-....|--...|---..|----.|-----)r    rM   rM   rM   rN   test_encode_morse  s    r   c                   C   s2   t ddksJ t ddks J ttdd  d S )Nz
-.-|.|-.--ZKEYz.-.|..-|-.||ZRUNc                   S   s   t dS )Nz	.....----)r!   rM   rM   rM   rN   rf     rg   z#test_decode_morse.<locals>.<lambda>)r!   rC   KeyErrorrM   rM   rM   rN   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sPJ t| dg| dgd| d| dgks|J td} t| dg| dgd| d| dgksJ t| dg| dgd| d| dgksJ t| dg| dgd| d| dgks
J d S )Nc                   S   s   t ddgdS NrQ   r   rM   rM   rM   rN   rf     rg   z$test_lfsr_sequence.<locals>.<lambda>c                   S   s   t dgddS r   r   rM   rM   rM   rN   rf     rg   rG   rQ   r   rI   )rC   	TypeErrorrB   r   )FrM   rM   rN   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sNJ t|dddksbJ d S )Nc                   S   s   t dddS )NrQ   rG   rI   )r   rM   rM   rM   rN   rf     rg   z+test_lfsr_autocorrelation.<locals>.<lambda>rG   rQ   r   rp   rR   )rC   r   rB   r   r   )r   r   rM   rM   rN   test_lfsr_autocorrelation  s
    $r   c                  C   s   t d} td}t| d| dg| d| dgd}t||d d ksLJ t| d| dg| d| dgd}t||d | d ksJ d S )NrG   xrQ   r   rp   )rB   r   r   r   )r   r   r   rM   rM   rN   test_lfsr_connection_polynomial  s    $$r   c                  C   sB   t dd\} }}t| sJ t|| s*J tt| dks>J d S Nd   digitf   )r"   r@   rA   lenbin)rc   r~   _rM   rM   rN   test_elgamal_private_key  s    r   c                     sb   t dt} | d   d tt d | ks8J tt fdd ttfdd d S )Nrp   r   rQ   c                      s
   t  S )Nr$   rM   PdkrM   rN   rf     rg   ztest_elgamal.<locals>.<lambda>c                      s
   t d S )NrR   r   rM   )r   rM   rN   rf     rg   )r"   r#   r%   r$   rC   ri   )ZekrM   r   rN   test_elgamal  s     r   c                  C   sB   t dd\} }}t| sJ t|| s*J tt| dks>J d S r   )r&   r@   rA   r   r   )r   gr   rM   rM   rN   test_dh_private_key  s    r   c                  C   sT   t dd\} }}t| ||f\}}}| |ks0J ||ks<J |t||| ksPJ d S )Nr   r   )r&   r'   pow)p1Zg1rc   p2Zg2garM   rM   rN   test_dh_public_key  s
    r   c                  C   sX   t dd} t| \}}}td|}t|||f|}|t|||ksFJ ttdd  d S )Nr   r   rG   c                   S   s
   t ddS )N)i     i5  i  )r(   rM   rM   rM   rN   rf     rg   z$test_dh_shared_key.<locals>.<lambda>)r&   r'   rE   r(   r   rC   ri   )r   r   r   r   r~   skrM   rM   rN   test_dh_shared_key  s    

r   c                   C   s2   t dddksJ ttdd  ttdd  d S )Nr~   re   bac                   S   s
   t ddS )Nre   Zacer.   rM   rM   rM   rN   rf     rg   z!test_padded_key.<locals>.<lambda>c                   S   s
   t ddS )Nre   Zabbar   rM   rM   rM   rN   rf     rg   )r.   rC   ri   rM   rM   rM   rN   test_padded_key  s    r   c                   C   s~   t tdd  tddddks"J t tdd  tddddksDJ t tdd  td	td
ksfJ tdtdkszJ d S )Nc                   S   s   t dddS )Nrb   r~   abcde)r+   rM   rM   rM   rN   rf     rg   ztest_bifid.<locals>.<lambda>rb   r~   Zabcdbdbc                   S   s   t dddS )Nr   r~   r   )r,   rM   rM   rM   rN   rf     rg   c                   S   s   t dS )Nr   )r-   rM   rM   rM   rN   rf     rg   BZBACDEFGHIKLMNOPQRSTUVWXYZB0Z$B0ACDEFGHIJKLMNOPQRSTUVWXYZ123456789)rC   ri   r+   r   r   rM   rM   rM   rN   
test_bifid  s    r   c            
      C   sn   g d} g d}g d}t | |D ]F\}}t||}|D ].}t||}t||}t||}	|	|ks8J q8q"d S )N)                                             )Y   r   e   g   k   m   q      r  r  r  r  r  r  r   )r   iW  i  i9     iS( i    i  i  i+ i  iH  )zipr3   r2   r1   r0   
Zpsqsmessagesr   r   prir   ZpubencdecrM   rM   rN   test_encipher_decipher_gm  s    



r   c                   C   sD   t tdd  t tdd  t tdd  ds@J dtddkd S )Nc                   S   s
   t ddS )Nr   r   r2   rM   rM   rM   rN   rf     rg   z%test_gm_private_key.<locals>.<lambda>c                   S   s
   t ddS )Nr   r!  rM   rM   rM   rN   rf     rg   c                   S   s
   t ddS )Nr   rp   r!  rM   rM   rM   rN   rf     rg   r      )rC   ri   r2   rM   rM   rM   rN   test_gm_private_key  s    r#  c                   C   s>   dt ddd ksJ dt ddd ks,J ttdd	  d S )
NiC  r   r"  rQ   r   rI   rp   c                   S   s
   t ddS )Nr   r"  r!  rM   rM   rM   rN   rf     rg   z$test_gm_public_key.<locals>.<lambda>)r2   rC   ri   rM   rM   rM   rN   test_gm_public_key  s    r$  c            
      C   sr   g d} g d }}g d}t | |D ]F\}}t||}|D ].}t||}t||}t||}	|	|ks<J q<q&d S )N)C   r   G   r  r   r   r  r   O   r"  S   r   ;   r     )r   r&  r  r   r   r  r   r'  r"  r(  r   r)  r  r*  r%  )r   iH  iW     r  i  i  r  i[  i  i  ij     )r  r6   r7   r4   r5   r  rM   rM   rN   test_encipher_decipher_bg  s    



r-  c                   C   sD   t tdd  t tdd  t tdd  ds@J dtddkd S )Nc                   S   s
   t ddS )Nr   r]   r6   rM   rM   rM   rN   rf   *  rg   z%test_bg_private_key.<locals>.<lambda>c                   S   s
   t ddS )Nr   r.  rM   rM   rM   rN   rf   +  rg   c                   S   s
   t ddS Nr   r   r.  rM   rM   rM   rN   rf   ,  rg   r   r*  )rC   ri   r6   rM   rM   rM   rN   test_bg_private_key)  s    r0  c                   C   s6   dt ddksJ dt ddks$J ttdd  d S )	Ni  r%  r'  i  r   r*  c                   S   s
   t ddS r/  r.  rM   rM   rM   rN   rf   2  rg   z$test_bg_public_key.<locals>.<lambda>)r7   rC   ri   rM   rM   rM   rN   test_bg_public_key/  s    r1  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.matricesr?   Zsympy.ntheoryr@   rA   Zsympy.polys.domainsrB   Zsympy.testing.pytestrC   rD   Zsympy.core.randomrE   rO   rP   rS   rV   rX   r^   r_   ra   rj   rm   rn   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-  r0  r1  rM   rM   rM   rN   <module>   sr   		
!2			