
    g.M                        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	 ZLd
 ZMd ZNd ZOd ZPd ZQd ZRd ZSd ZTd ZUd ZVd ZWd ZXd ZYd ZZd Z[d Z\d Z]d Z^d Z_d Z`d Zad Zbd  Zcd! Zdd" Zed# Zfd$ Zgd% Zhd& Zid' Zjd( Zkd) Zld* Zmd+ Znd, Zod- Zpd. Zqd/ Zrd0 Zsd1 Ztd2 Zud3 Zvd4 Zwd5 Zxd6 Zyd7 Zzd8 Z{d9 Z|d: Z}d; Z~d<S )=    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                      t          dd          dk    sJ t          dd          dk    sJ t          dd          dk    sJ d S )Nhello world   hlowrdel ol   horel ollwd   hwe olordll)r>        Z/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/crypto/tests/test_crypto.pytest_encipher_railfencerS      Y    mA..-????mA..-????mA..-??????rQ   c                      t          dd          dk    sJ t          dd          dk    sJ t          dd          dk    sJ d S )NrK   rJ   rI   rM   rL   rO   rN   )r?   rP   rQ   rR   test_decipher_railfencerV   !   rT   rQ   c                      t          dd          g dk    sJ t          dd          g dk    sJ t          dd          g dk    sJ d S )NrL   rN   )rL   r      rJ   rX   )rX   rJ   rL   r   )r   rP   rQ   rR   test_cycle_listrZ   '   se    a|||++++b!,,,,a|||++++++rQ   c                      t          dd          dk    sJ t          dd          dk    sJ t          dd          dk    sJ t          dd          dk    sJ d S )NABCr   rX   BCDrY   ZAB)r   r*   rP   rQ   rR   test_encipher_shiftr_   -   st    %##u,,,,%##u,,,,%$$----%$$------rQ   c                      t          d          dk    sJ t          d          dk    sJ t          d          dk    sJ t          d          dk    sJ d S )Nr\   NOP)r9   r:   rP   rQ   rR   test_encipher_rot13rb   3   sl    %  E))))%  E))))%  E))))%  E))))))rQ   c                  B   t          dd          dk    sJ t          dd          dk    sJ t          dd          dk    sJ t          ddd	          d
k    sJ t          ddd	          dk    sJ t          dd          dk    sJ t          dd          dk    sJ d S )Nr\   )rX   r   )rX   rX   r]   )rY   r   AZY)rY   rX   ABCDr   BAD1231234214)rL      QTW)r   r+   rP   rQ   rR   test_encipher_affinerl   :   s    5&))U22225&))U22225'**e33335'6:::eCCCC5'6:::eCCCC5'**e33335'**e333333rQ   c                      t          d          dk    sJ t          d          dk    sJ t          d          dk    sJ t          d          dk    sJ d S )Nr\   ZYX)r;   r<   rP   rQ   rR   test_encipher_atbashro   C   sl    5!!U****5!!U****5!!U****5!!U******rQ   c                  b    t          ddd          dk    sJ t          ddd          dk    sJ d S )Nr\   BACrg   1243rh   124)r   rP   rQ   rR   test_encipher_substitutionrt   I   sB     u55>>>> 775@@@@@@rQ   c                     t          d          dk    sJ t          t          d                    dk    sJ t          d                                          dk    sJ t          ddd          dk    sJ t          t          d            d S )Nabcaaabczab caT)filterc                  "    t          dd          S )Nabrx   )r	   rP   rQ   rR   <lambda>z%test_check_and_join.<locals>.<lambda>S   s    ~dC88 rQ   )r	   r0   splitrE   
ValueErrorrP   rQ   rR   test_check_and_joinr   N   s    %  E))))$w--((E1111&,,..))U2222%T222c9999
:8899999rQ   c                      t          dd          dk    sJ 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          d	dd          d	k    sJ d S )
Nr\   ACEre   r   ACAABACCACA)r
   rP   rQ   rR   test_encipher_vigenerer   V       UE**e3333UE6:::eCCCCUD&999UBBBBT5&999TAAAAS%888C??????rQ   c                      t          dd          dk    sJ 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          ddd          dk    sJ d S )	Nr\   AAAre   r   r   AACAAr   )r   rP   rQ   rR   test_decipher_vigenerer   ^   r   rQ   c                     t          ddg d          } t          d|           dk    sJ t          ddg d          } t          d|           dk    sJ t          d| d          dk    sJ t          ddg d          } t          d| d          dk    sJ t          d| d          d	k    sJ t          d
|           dk    sJ t          d
| d          dk    sJ d S )NrJ   rX   rJ   rL      re   CFIVrX   r   r   rX   r   CBABr   CBABACFGCZ)padCFYV)rA   r   r   s    rR   test_encipher_hillr   f   s   q!\\\""A##v----q!\\\""A##v----F333v====q!\\\""AF333v====q&111T9999 ""f,,,,s+++v555555rQ   c                     t          ddg d          } t          d|           dk    sJ t          ddg d          } t          d|           dk    sJ t          d| d          dk    sJ t          ddg d          } t          d| d          dk    sJ t          d| d          d	k    sJ t          d
|           dk    sJ d S )NrJ   r   r   re   r   r   r   r   r   CFAABAA)rA   r   r   s    rR   test_decipher_hillr   u   s    q!\\\""A##v----q!\\\""A##v----F333v====q!\\\""AF333v====q&111T9999""f,,,,,,rQ   c                      t          dd          dk    sJ t          dd          dk    sJ t          dd          dk    sJ t          dd          d	k    sJ d S )
Nr   CDCOr{   cCHa bcbrq   )r   rP   rQ   rR   test_encipher_bifid5r      t    4&&$....4&&$....4%%----63''5000000rQ   c                  l    t           fd} t          dd|           }t          d          |k    sJ d S )Nc                 :    t          d| z  |z                      S )Nr   r   ijr   s     rR   r|   z$test_bifid5_square.<locals>.<lambda>       WQqsQwZ(( rQ   r    )r   rA   r   fMr   s     @rR   test_bifid5_squarer      D    A((((Aq!QA!!!!!!rQ   c                      t          dd          dk    sJ t          dd          dk    sJ t          dd          dk    sJ t          dd          dk    sJ d S )	Nr   r   r   chr   b acr   r\   )r   rP   rQ   rR   test_decipher_bifid5r      r   rQ   c                      t          dd          dk    sJ t          dd          dk    sJ t          dd          dk    sJ t          dd          d	k    sJ d S )
Nr   r   CPr{   r   CIr   r   rq   )r   rP   rQ   rR   test_encipher_bifid6r      r   rQ   c                      t          dd          dk    sJ t          dd          dk    sJ t          dd          dk    sJ t          dd          dk    sJ d S )	Nr   r   r   cir   r   r   r\   )r   rP   rQ   rR   test_decipher_bifid6r      r   rQ   c                  l    t           fd} t          dd|           }t          d          |k    sJ d S )Nc                 :    t          d| z  |z                      S )N   r   r   s     rR   r|   z$test_bifid6_square.<locals>.<lambda>   r   rQ   r   r   )r   rA   r   r   s     @rR   test_bifid6_squarer      r   rQ   c                     t          ddd          dk    sJ t          ddd          dk    sJ t          t                    5  t          ddd          dk    sJ t          ddd          d	u sJ 	 d d d            d S # 1 swxY w Y   d S )
NrJ   rL   rX   r   rX   r      rL   rN   rX      F)r   rF   r=   rP   rQ   rR   test_rsa_public_keyr      s    !Q""f,,,,!Q""g----	)	*	* 0 0aA&&&0000aA&&%/////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s   -A>>BBc                  D   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                    5  t          ddd          d
k    sJ t          ddd          du sJ 	 d d d            d S # 1 swxY w Y   d S )NrJ   rL   rX   r   r   r         )i  i  r   r   F)r   rF   r=   rP   rQ   rR   test_rsa_private_keyr      s	   1a##v----1a##w....2b##y0000	)	*	* 1 1q!Q''61111q!Q''5000001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1s   -BBBc                      t          d          } t          d          }t          d          }t          d          }t          | ||          | |z  |fk    sJ t          | ||          | |z  |fk    sJ d S )NN101565610013301240713207239558950144682174355406589305284428666903702505233009M8946871918875454889354556059559484138123760030531435214292421331206929398400365537ښ8936505818327042395303988587447591295947962354408444794561435666999402846577625762582824202269399672579058991442587406384754958587400493169361356902030209)intr   r   )pqeds       rR   test_rsa_large_keyr      s     	  	 	A  	 	AGA # 	$ 	$A !Q""qsAh....1a##!Qx//////rQ   c                  L   t          ddd          } t          d|           dk    sJ t          ddd          } t          d|           dk    sJ t          t                    5  t          ddd          } t          d|           dk    sJ 	 d d d            d S # 1 swxY w Y   d S NrJ   rL   rX   r   r   )r   r   rF   r=   )puks    rR   test_encipher_rsar      s    
Aq
!
!C31$$$$
Aq
!
!C31$$$$	)	*	* ) )Q1%%As##q((((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )   #(BB Bc                  L   t          ddd          } t          d|           dk    sJ t          ddd          } t          d|           dk    sJ t          t                    5  t          ddd          } t          d|           dk    sJ 	 d d d            d S # 1 swxY w Y   d S r   )r   r   rF   r=   )prks    rR   test_decipher_rsar      s    
!Q
"
"C31$$$$
!Q
"
"C31$$$$	)	*	* ) )aA&&As##q((((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )r   c            	      j   t          ddddddd          } t          ddddddd          }| dk    sJ |dk    sJ d	}t          d|z  d
z
  |           }|dk    sJ t          ||          d
z   dz  }||k    sJ 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J |dk    sJ |dk    sJ |dk    sJ d}t          t          ||          |          }|dk    sJ t          t          ||          |          }||k    sJ d S )NrJ   rL   r            )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	decryptedpuk1prk1puk2prk2s	            rR   !test_mutltiprime_rsa_full_exampler      s    Aq!RQ
/
/C
!Q1b"a
0
0C*,
CQWr\3//Ii--2a7I "b"b"--D2r2r2..D"b"b"--D2r2r2..D=    $$$$$=    $$$$$
C\#t44d;;I\)T::DAAIrQ   c            
         t          d          } t          d          }t          d          }t          d          }t          d          }d}t          | |||||          }t          | |||||          }d}t          ||          }	t          ||| ||||g          }
|	|
k    sJ t	          |	|          t	          |	|| ||||g          k    sJ d S )N5  1017715760715424506802386150369308212090648714372506228340650154082258226204046999838297167140821364638180697194879500245557654451869628933464638414194270088003412574686002240499862604719225724816301446884172547691863941572670973607781363296129091102564212329778330286774412060493092203547960143766983251016934  287523423530951328722901815266072758861827932416608050778508017568951279775428697295227355312818186183057683628973866874525034028199691128870676414118458442900035778874482624765513861643279666963168221883983361990023065887039028941004761868238495951032394105272796054421482858161493686670831148028528049768935  1769822925986882577687950073635018683885096193595631013437826189771862186717463067541369694816245225291921138038800171125596073154495219811570843701878876506240610330660224585129424118411874789378997231527716008508616411987953604187533538484482056602874796176717264080533196198920520008508839943433788827178494  689254284385854310292691822335026110270917550646437423835156236432131058289689339552936707494280835318713879442274571841964528291231865157212604266903677599180789896916456120289112752835985022658896697303316882068252200747139776074151787380158310303642905853691505028197438273435520981970955205508653601594394  69035483433453632820551311892368908779778144568711455301541094314870476423226953576968609257479231896350331830698238209105217117290910679774888326149322416241405010692044244589681980660015448444826108008217972129130625571421904893252804729877353352739420480574842850202181462656251626522910618936534699566291i  i  )r   r   r   r   r   )r   r   rstr   r   r   	plaintextciphertext_1ciphertext_2s              rR   test_rsa_crt_extremer    s2   	H	I 	IA 		G	H 	HA 		H	I 	IA 		G	 	A 		G	 	A 	A
Aq!Q
*
*C
!Q1a
+
+CI	3//L	3Aq!Q@@L<''''c**\3Aq!Q889 9 9 9 9 9rQ   c            	      F   d\  } }d}t          | ||d          }t          | ||d          }t          |d                   D ]]}t          ||          }t	          ||          }	 ||k    sJ ,# t
          $ r% t          d                    |||                    w xY wd 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   s           rR   test_rsa_exhaustiver  7  s    DAq
A
Aq,
7
7
7C
!Q<
8
8
8CSV}} 
 
 c**	 C00		##### 	 	 	 BY	22  	
 
s   &A///Bc            	      8   g d} d}| |gz   }t          |ddi}t          |ddi}|d         }t          |          D ]]}t          ||          }t	          ||          }	 ||k    sJ ,# t
          $ r% t          d                    |||                    w xY wd S )N)rL   r   r   r   r   r  r  r   r  r	  	primesr   argsr   r   nr   r   r   s	            rR   test_rsa_multiprime_exhanstiver  J  s    ]]F	AQC<D
$
5
5
5C
4
6
6
6CAAQxx 
 
 c**	 C00		##### 	 	 	 BY	22  	
 
s   A((/Bc            	      b   g d} d}| |gz   }t          |ddi}t          |ddi}|d         }t          |          D ]r}t          ||          dk    rt	          ||          }t          ||          }	 ||k    sJ A# t          $ r% t          d                    |||                    w xY wd S )N)r   r   r   r   
multipowerTr   rX   r  )r   r   r
  r@   r   r   r  r  r  s	            rR   test_rsa_multipower_exhanstiver  _  s    YYF	AQC<D
$
04
0
0C
4
1D
1
1CAAQxx  sA;;! c**	 C00		##### 	 	 	 BY	22  	 s   4A==/B,c                      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    sJ d S )NrX   rJ   r   rJ   r   rL   r   rJ   )r   rP   rQ   rR   test_kid_rsa_public_keyr  w  se    aAq))V3333aAq))V3333aAq))V333333rQ   c                      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    sJ d S )NrX   rJ   r   rL   r  r   rN   )r   rP   rQ   rR   test_kid_rsa_private_keyr  }  se    q!Q**f4444q!Q**f4444q!Q**f444444rQ   c                      t          dd          dk    sJ t          dd          dk    sJ t          dd          dk    sJ d S )NrX   r  rJ   r  rL   r  )r   rP   rQ   rR   test_encipher_kid_rsar!    Y    Av&&!++++Av&&!++++Av&&!++++++rQ   c                      t          dd          dk    sJ t          dd          dk    sJ t          dd          dk    sJ d S )NrJ   r  rX   rL   r  r  )r   rP   rQ   rR   test_decipher_kid_rsar$    r"  rQ   c                     t          d          dk    sJ t          d          dk    sJ t          d          dk    sJ t          d          dk    sJ t          d          dk    sJ t          dd	
          dk    sJ t          dd
          dk    sJ t          d          dk    sJ t          d          dk    sJ t          d          dk    sJ d S )Nr\   z.-|-...|-.-.zSMS z...|--|...||zSMS
r    z||`)sepz``z````z!@#$%^&*()_+z/-.-.--|.--.-.|...-..-|-.--.|-.--.-|..--.-|.-.-.12345z.----|..---|...--|....-|.....67890z-....|--...|---..|----.|-----)r!   rP   rQ   rR   test_encode_morser+    s   .0000>1111  N2222r!!!!$$$$%%%----&&&&0000''+\\\\\  $CCCCC  $CCCCCCCrQ   c                      t          d          dk    sJ t          d          dk    sJ t          t          d            d S )Nz
-.-|.|-.--KEYz.-.|..-|-.||RUNc                       t          d          S )Nz	.....----)r"   rP   rQ   rR   r|   z#test_decode_morse.<locals>.<lambda>  s    \+66 rQ   )r"   rE   KeyErrorrP   rQ   rR   test_decode_morser1    sN    %%....''50000
86677777rQ   c                     t          t          d            t          t          d            t          d          } t           | d          g | d          gd           | d           | d          gk    sJ t           | d          g | d          gd           | d           | d          gk    sJ t          d          } t           | d          g | d          gd           | d           | d          gk    sJ t           | d          g | d          gd           | d           | d          gk    sJ t           | d          g | d          gd           | d           | d          gk    sJ d S )Nc                  &    t          ddgd          S NrX   r    rP   rQ   rR   r|   z$test_lfsr_sequence.<locals>.<lambda>  s    mAsA66 rQ   c                  &    t          dgdd          S r4  r5  rP   rQ   rR   r|   z$test_lfsr_sequence.<locals>.<lambda>  s    mQCA66 rQ   rJ   rX   r   rL   )rE   	TypeErrorrD   r    )Fs    rR   test_lfsr_sequencer9    s   
966777
966777
1A!!A$$!!A$$++!aadd|;;;;!!A$$!!A$$++!aadd|;;;;
1A!!A$$!!A$$++!aadd|;;;;!!A$$!!A$$++!aadd|;;;;!!A$$!!A$$++!aadd|;;;;;;rQ   c                     t          t          d            t          d          } t           | d           | d          g | d           | d          gd          }t	          |dd          dk    sJ t	          |dd          dk    sJ d S )Nc                  $    t          ddd          S )NrX   rJ   rL   )r   rP   rQ   rR   r|   z+test_lfsr_autocorrelation.<locals>.<lambda>  s    21a;; rQ   rJ   rX   r   r   rY   )rE   r7  rD   r    r   )r8  r   s     rR   test_lfsr_autocorrelationr<    s    
9;;<<<
1AqqttQQqTTlQQqTT11Q44L!44A1a((A----1a((B......rQ   c                     t          d          } t          d          }t           | d           | d          g | d           | d          gd          }t          |          |dz  dz   k    sJ t           | d           | d          g | d           | d          gd          }t          |          |dz  |z   dz   k    sJ d S )NrJ   xrX   r   r   )rD   r   r    r   )r8  r>  r   s      rR   test_lfsr_connection_polynomialr?    s    
1AAqqttQQqTTlQQqTT11Q44L!44A%a((AqD1H4444qqttQQqTTlQQqTT11Q44L!44A%a((AqD1HqL888888rQ   c                      t          d          \  } }}t          |           sJ t          ||           sJ t          t	          |                     dk    sJ d S Nd   digitf   )r#   rB   rC   lenbin)rx   r   _s      rR   test_elgamal_private_keyrI    sc    !,,,GAq!1::Q"""""s1vv;;#rQ   c                     t          d          t                    } | d         dz
  t          t          dz
  |                     k    sJ t	          t
          fd           t	          t
          fd           d S )Nr   r   rX   c                  $    t                     S )Nr%   )Pdks   rR   r|   ztest_elgamal.<locals>.<lambda>  s    /266 rQ   c                  $    t          d           S )NrY   rL  )rN  s   rR   r|   ztest_elgamal.<locals>.<lambda>  s    /B77 rQ   )r#   r$   r&   r%   rE   r~   )ekrM  rN  s    @@rR   test_elgamalrQ    s    	Q		B	B		B
1Aq5$%5a!eR%@%@"EEEEEE
:66666777
:777788888rQ   c                      t          d          \  } }}t          |           sJ t          ||           sJ t          t	          |                     dk    sJ d S rA  )r'   rB   rC   rF  rG  )r   grH  s      rR   test_dh_private_keyrT    sc    S)))GAq!1::Q"""""s1vv;;#rQ   c                      t          d          \  } }}t          | ||f          \  }}}| |k    sJ ||k    sJ |t          |||           k    sJ d S )NrB  rC  )r'   r(   pow)p1g1rx   p2g2gas         rR   test_dh_public_keyr\    sl    s+++IBAB{++JBB88888888RBrQ   c                      t          d          } t          |           \  }}}t          d|          }t          |||f|          }|t	          |||          k    sJ t          t          d            d S )NrB  rC  rJ   c                  "    t          dd          S )N)i     i5  i  )r)   rP   rQ   rR   r|   z$test_dh_shared_key.<locals>.<lambda>  s    }_dCC rQ   )r'   r(   rG   r)   rV  rE   r~   )r   r   rH  r[  r   sks         rR   test_dh_shared_keyra    s|    

%
%
%CS!!HAq"!QA	1bz1	%	%BRA
:CCDDDDDrQ   c                      t          dd          dk    sJ t          t          d            t          t          d            d S )Nr   r{   bac                  "    t          dd          S )Nr{   acer/   rP   rQ   rR   r|   z!test_padded_key.<locals>.<lambda>  s    z$66 rQ   c                  "    t          dd          S )Nr{   abbarf  rP   rQ   rR   r|   z!test_padded_key.<locals>.<lambda>  s    z$77 rQ   )r/   rE   r~   rP   rQ   rR   test_padded_keyri    sK    c4  D((((
:66777
:7788888rQ   c                  n   t          t          d            t          ddd          dk    sJ t          t          d            t          ddd          dk    sJ t          t          d            t          d          t          d	          k    sJ t	          d
          t	          d          k    sJ d S )Nc                  $    t          ddd          S )Nrv   r   abcde)r,   rP   rQ   rR   r|   ztest_bifid.<locals>.<lambda>      ~eS'BB rQ   rv   r   abcdbdbc                  $    t          ddd          S )Nro  r   rl  )r-   rP   rQ   rR   r|   ztest_bifid.<locals>.<lambda>  rm  rQ   c                       t          d          S )Nrl  )r.   rP   rQ   rR   r|   ztest_bifid.<locals>.<lambda>  s    |G44 rQ   BBACDEFGHIKLMNOPQRSTUVWXYZB0$B0ACDEFGHIJKLMNOPQRSTUVWXYZ123456789)rE   r~   r,   r   r   rP   rQ   rR   
test_bifidrv    s    
:BBCCC%f--6666
:BBCCC%f--6666
:445551223 3 3 3<==> > > > > >rQ   c                      g d} g d}g d}t          | |          D ]R\  }}t          ||          }|D ]:}t          ||          }t          ||          }t	          ||          }	|	|k    sJ ;Sd S )N)                                             )Y   r   e   g   k   m   q      rx  ry  rz  r{  r|  r}  r   )r   iW  i  i9     iS( i    i  i  i+ i  iH  )zipr4   r3   r2   r1   
psqsmessagesr   r   prir   pubencdecs
             rR   test_encipher_decipher_gmr    s    
- 
- 
-B
, 
, 
,B  H B  1Q"" 	 	C1%%Cc3''Cc3''C#:::::		 rQ   c                      t          t          d            t          t          d            t          t          d            d S )Nc                  "    t          dd          S )Nr   r   r3   rP   rQ   rR   r|   z%test_gm_private_key.<locals>.<lambda>      }R44 rQ   c                  "    t          dd          S )Nr   r  rP   rQ   rR   r|   z%test_gm_private_key.<locals>.<lambda>      }Q22 rQ   c                  "    t          dd          S )Nr   r   r  rP   rQ   rR   r|   z%test_gm_private_key.<locals>.<lambda>  r  rQ   )rE   r~   r3   rP   rQ   rR   test_gm_private_keyr    sD    
:44555
:22333
:22333**rQ   c                      dt          dd          d         k    sJ dt          dd          d         k    sJ t          t          d            d S )	NiC  r     rX   r   rL   r   c                  "    t          dd          S )Nr   r  r  rP   rQ   rR   r|   z$test_gm_public_key.<locals>.<lambda>  r  rQ   )r3   rE   r~   rP   rQ   rR   test_gm_public_keyr    s\    -B''*****-1%%a(((((
:4455555rQ   c                      g d} g dx}}g d}t          | |          D ]R\  }}t          ||          }|D ]:}t          ||          }t          ||          }t	          ||          }	|	|k    sJ ;Sd 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  r7   r8   r5   r6   r  s
             rR   test_encipher_decipher_bgr    s    
' 
' 
'B0 0 0 0B  H
 B  1Q"" 	 	C1%%Cc3''Cc3''C#:::::		 rQ   c                      t          t          d            t          t          d            t          t          d            d S )Nc                  "    t          dd          S )Nr   rj   r7   rP   rQ   rR   r|   z%test_bg_private_key.<locals>.<lambda>*  s    ~a44 rQ   c                  "    t          dd          S )Nr   r  rP   rQ   rR   r|   z%test_bg_private_key.<locals>.<lambda>+  s    ~a33 rQ   c                  "    t          dd          S Nr   r  r  rP   rQ   rR   r|   z%test_bg_private_key.<locals>.<lambda>,      ~b"55 rQ   )rE   r~   r7   rP   rQ   rR   test_bg_private_keyr  )  sD    
:44555
:33444
:55666++rQ   c                      dt          dd          k    sJ dt          dd          k    sJ t          t          d            d S )Ni  r  r  i  r   r  c                  "    t          dd          S r  r  rP   rQ   rR   r|   z$test_bg_public_key.<locals>.<lambda>2  r  rQ   )r8   rE   r~   rP   rQ   rR   test_bg_public_keyr  /  sR    =R((((((-B''''''
:5566666rQ   N)
sympy.corer   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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   sympy.external.gmpyr@   sympy.matricesrA   sympy.ntheoryrB   rC   sympy.polys.domainsrD   sympy.testing.pytestrE   rF   sympy.core.randomrG   rS   rV   rZ   r_   rb   rl   ro   rt   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+  r1  r9  r<  r?  rI  rQ  rT  r\  ra  ri  rv  r  r  r  r  r  r  rP   rQ   rR   <module>r     s        . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ." $ # # # # # ! ! ! ! ! ! 4 4 4 4 4 4 4 4 " " " " " " . . . . . . . . ' ' ' ' ' '@ @ @
@ @ @, , ,. . .* * *4 4 4+ + +A A A
: : :@ @ @@ @ @6 6 6
- 
- 
-1 1 1" " "1 1 11 1 11 1 1" " "0 0 01 1 10 0 0) ) )) ) )  B/9 /9 /9d  &  *  04 4 45 5 5, , ,, , ,
D 
D 
D8 8 8	< 	< 	</ / /9 9 9  9 9 9       E E E9 9 9	> 	> 	>  $+ + +6 6 6
  $, , ,7 7 7 7 7rQ   