
    Dj'                        d dl Z d dlZd dlZd dlZd dlZd dlZej                            ej                            e	                    Z
ej                            ej                            e
          d          Zej                            e          s ed            ej        d           d  ej        d          D             Z ee          dk    s ed           ej                            eed                    Zej                            d ej                            de                     d dlZd dlmZ d dlmZ dZd                    d	          Z G d
 de j                  ZddddddZdddddZ dZ!dZ"d a#d Z$d'dZ%d Z&d(dZ'd Z(d Z)d  Z* ed!            ed"            ed#            ed"            e j+                    ,                    e          Z- e j.        d$          /                    e-            ed!            ed"            ed%            ed"            e*              e)              e(              ej0        d&           dS ))    Nbuildz9Please run "python setup.py build" prior to running tests   c                 <    g | ]}|                     d           |S )lib)
startswith).0ds     G/home/thesage/.hermes/venv/lib/python3.11/site-packages/srp/test_srp.py
<listcomp>r      s)    EEEAU0C0CEaEEE    z#Unexpected build result... aborting   2   AC6BDB41324A9A9BF166DE5E1389582FAF72B6651987EE07FC3192943DB56050A37329CBB4A099ED8193E0757767A13DD52312AB4B03310DCD7F48A9DA04FD50E8083969EDB767B0CF6095179A163AB3661A05FBD5FAAAE82918A9962F0B93B855F97993EC975EEAA80D740ADBF4FF747359D041D5C33EA71D281E446B14773BCA97B43A23FB801676BD207A436C6481F1D2B9078717461A5B9D32E688F87748544523B524B0D57D5EA77A2775D2ECFA032CFBDBF52FB3786160279004E57AE6AF874E7303CE53299CCC041C7BC308D82A5698F3A8D0C38271AE35F8E9DBFBB694B5C803D89F7AE435DE236D525F54759B65E372FCD68EF20FA7111F9E4AFF73asciic                       e Zd Zej        ej        dddfdZd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )SRPTests Nc	                 z   |j         }	|j        }
|j        }d}d} |||||||          \  }} |	||||||d d |	  	        }|                                }|                                \  }} |	|||||||d |	  	        }|                     ||                                           |                                \  }}|                     ||           |                     ||            |
||||||||d |
  
        }|                                }|                                \  }}|                    ||          }|                    ||          }|                     ||           |                    |          } |
||||||||||
  
        }|                     ||                                           |                    |          }|                     ||            |
|||d ||||||
  
        } |                     ||                                            |                     ||          }!|                     ||!           |                    |           |                    |           | 	                    |
                                           | 	                    |
                                           | 	                    | 
                                           | 	                    |
                                           | 	                    |
                                           d S )N   testuser   testpassword)UserVerifiercreate_salted_verification_keyget_ephemeral_secretstart_authenticationassertEqualget_challengeprocess_challengeverify_session
assertTrueauthenticated)"selfu_modv_modg_modhash_algng_typen_hexg_hexk_hexr   r   r   usernamepassword_s_vusrbytes_aunameAusr2uname2A2svrbytes_bsBMM2HAMKsvr2HAMK2svr3HAMK3s"                                     r
   doitzSRPTests.doit/   sZ   ).).).)M&"//8XwX]_dffB48XwudTXZ_aa++--++--q 48XwugW[]bdd$";";"="=>>>..00
'''B 8UBAx%PTV[]]++--$$&&! ((!Q00))1a11B %%q** 8UBAx%PWY^``$";";"="=>>>&&++u%%% Hub"dHgueU\^cee$";";"="=>>>''A//u%%% 	D"""T###**,,...++--///++--///**,,...++--/////r   c                 R    |                      t          t          t                     d S N)r@   _pysrpr!   s    r
   test_pure_python_defaultsz"SRPTests.test_pure_python_defaultsh       		666+++++r   c                 R    |                      t          t          t                     d S rB   )r@   _ctsrprD   s    r
   test_ctypes_defaultszSRPTests.test_ctypes_defaultsk   rF   r   c                 R    |                      t          t          t                     d S rB   r@   rC   rH   rD   s    r
   	test_mix1zSRPTests.test_mix1n   rF   r   c                 R    |                      t          t          t                     d S rB   rK   rD   s    r
   	test_mix2zSRPTests.test_mix2q   rF   r   c                 R    |                      t          t          t                     d S rB   r@   rH   rC   rD   s    r
   	test_mix3zSRPTests.test_mix3t   rF   r   c                 R    |                      t          t          t                     d S rB   rP   rD   s    r
   	test_mix4zSRPTests.test_mix4w   rF   r   c                 j    |                      t          t          t          t          j                   d S )N)r%   )r@   rH   srpSHA512rD   s    r
   test_hash_SHA512zSRPTests.test_hash_SHA512{   s$    		666CJ	@@@@@r   c                 j    |                      t          t          t          t          j                   d S )N)r&   )r@   rH   rU   NG_8192rD   s    r
   test_NG_8192zSRPTests.test_NG_8192~   s$    		6663;	@@@@@r   c                     |                      t          t          t          t          j        t          t
                     d S )N)r&   r'   r(   )r@   rH   rU   	NG_CUSTOM
test_n_hex
test_g_hexrD   s    r
   test_NG_CUSTOMzSRPTests.test_NG_CUSTOM   s)    		6663=
Zd	fffffr   c           	          |                      t          t          t          t          j        t          j        t          t                     d S )N)r%   r&   r'   r(   )r@   rH   rC   rU   SHA256r\   r]   r^   rD   s    r
   	test_all1zSRPTests.test_all1   s.    		666CJ]goy	{{{{{r   c                     |                      t          t          t          t          j        t          j                   d S )N)r%   r&   )r@   rH   rC   rU   SHA224NG_4096rD   s    r
   	test_all2zSRPTests.test_all2   s(    		666CJ	UUUUUr   c                     t          d          D ]2}t          j        d          }|                     |dz	  dk               3dS )z{
        Verify that the Python implementation guarantees byte length by
        setting most significant bit to 1
        
          r   N)rangerC   get_random_of_lengthr   )r!   xvals      r
   test_random_of_lengthzSRPTests.test_random_of_length   sP    
 r 	- 	-A-b11COOC3J!O,,,,	- 	-r   c                      t          j        t          j        d                    t          j        t          j        d                    } fd}t          t           fD ]}|fD ]} |||           dS )zW
        Verify that all implementations require 32 bytes for ephemeral values
           !   c                                         t                    5 }|                     dd|           d d d            n# 1 swxY w Y                       dt	          |j                                                  t                    5 }|                     d|           d d d            n# 1 swxY w Y                       dt	          |j                             d S )Nr0   pwd)r/   r/   )r6   r6   )assertRaises
ValueErrorr   assertInstr	exceptionr   )modrn   ctxrandom31r!   s      r
   verf_lenz0SRPTests.test_ephemeral_length.<locals>.verf_len   sU   "":.. 6#%5556 6 6 6 6 6 6 6 6 6 6 6 6 6 6MM)S%7%7999"":.. Q#Wh(CPPPQ Q Q Q Q Q Q Q Q Q Q Q Q Q QMM)S%7%799999s#   AAAB55B9<B9N)rC   long_to_bytesrl   rH   )r!   random33r}   rz   rn   r|   s   `    @r
   test_ephemeral_lengthzSRPTests.test_ephemeral_length   s     '(CB(G(GHH'(CB(G(GHH	: 	: 	: 	: 	: 	: F# 	# 	#C (+ # #c""""#	# 	#r   c                     t          j        dd          }|                     |                                            t	          j        dd          }|                     |                                            d S )Ntest)rC   r   r   r    rH   )r!   r.   s     r
   test_authenticated_on_initz#SRPTests.test_authenticated_on_init   sl    k&&))C--///000k&&))C--///00000r   c                 V    |                      t          t          t          d           d S )N   5)r)   rP   rD   s    r
   test_custom_kzSRPTests.test_custom_k   s"    		666	66666r   c                    t          j        t          j        d                    }t          t           fD ]}|                    d||          }|                     t                    5 }|                    |           d d d            n# 1 swxY w Y   |                     dt          |j
                             d S )Nri   r0   bytes_A)rC   r~   rl   rH   r   ru   rv   r   rw   rx   ry   )r!   	randbytesrz   r5   r{   s        r
   test_verifier_requires_Az!SRPTests.test_verifier_requires_A   s    ()DR)H)HII	F# 	9 	9C,,w	9==C"":.. .#""9---. . . . . . . . . . . . . . .MM)S%7%78888		9 	9s   (B

B	B	)__name__
__module____qualname__rU   SHA1NG_2048r@   rE   rI   rL   rN   rQ   rS   rW   rZ   r_   rb   rf   ro   r   r   r   r    r   r
   r   r   -   s:       143;VX`bjn 70 70 70 70r, , ,, , ,, , ,, , ,, , ,, , ,A A AA A Ag g g| | |V V V- - -# # #(1 1 17 7 79 9 9 9 9r   r   zSHA1  rd   ra   SHA384rV   )r   r            i   i   i   i    )r   r   r   r   r   r   c                    |                      t          t          ||          }|                                \  }}|                     ||||||          }|                                \  }	}
|                    |	|
          }|                    |          }|                    |           |                                r|                                st          d          d S )NzAuthentication failed!)
r   r*   r+   r   r   r   r   r   r    	Exception)rz   r%   r&   r,   r-   r.   r0   r1   r5   r7   r8   r9   r;   s                r
   do_authr      s    xx8Xw??C''))HE1 ||UBAxAAC  ""CAa $$a,,A !!1&&D  2c&7&7&9&9 201112 2r   rh   c                     	 t          j        t          t                    \  	|a	 fd}t          j                    }|dk    r t          j        |d           |dz  }|dk      |             t          j                    |z
  }|S )Nc                  r    t           dk    r*t                      t           dz  a t           dk    (d S d S )Nr   r   )NLEFTr   )r,   r-   r%   rz   r&   s   r
   test_threadz%performance_test.<locals>.test_thread   s>    aiiS(GR555QJE aiiiiiir   r   r   )rU   r   r*   r+   r   time_threadstart_new_thread)
rz   r%   r&   niternthreadsr   startdurationr,   r-   s
   ```     @@r
   performance_testr      s    /8XwXXFBE         IKKE
Q,, +r333A Q,, KMMMy{{U"HOr   c                 b    ddd}d|| j                  t          |         t          |         fz  }|S )NPythonctypes)z
srp._pysrpz
srp._ctsrpz%s, %s, %d:)r   hash_map	prime_map)rz   r%   r&   mcfgs        r
   get_param_strr      s<    !!	$ 	$A 1S\?HX,>	'@RS
SCJr   c                     t          | |||          }t          | ||          }t          d|                    d          d||z  z             ||z  S )Nz      z%.6f)r   r   printljust)rz   r%   r&   r   r   r   s         r
   
param_testr      sU    h@@H
h
1
1C	%2(5. 9:::E>r   c                  L   t          d           t          d           t          t          t          j        t          j                  } t          t          t          j        t          j                  }t          d           t          d           t          d| |z             d S )N<************************************************************zDefault Parameter Timings:r   zPerformance increases: z   ctypes-module : )r   r   rC   rU   r   r   rH   )py_timect_times     r
   print_default_timingsr     s{    	&MMM	
&'''&#(CK99G&#(CK99G	"III	
#$$$	
11111r   c                     t           j        t           j        t           j        t           j        g} t           j        t           j        t           j        t           j        t           j	        g}t          d           t          d           t          d           t          dd           | D ]4}t          dt          |         z                      d          d           5t          d           t          d	           |D ]p}t          d
t          |         z  d           | D ]=}t          d                    t          t           ||          dz            d           >t          d           qd S )Nr   z0Hash Algorithm vs Prime Number performance tabler   z       | )endzNG_%d   z<------------------------------------------------------------z%s |z{0:>12f}rh   )rU   NG_1024r   re   rY   r   rd   ra   r   rV   r   r   rjustr   formatr   rH   )ng_types
hash_typesngr%   s       r
   print_performance_tabler     sG   ck3;EH8SZSZMJ	&MMM	
<===	"III	*# < <w2&--b11s;;;;;	"III	&MMM  fx))s3333 	[ 	[B*##$4VXr$J$JR$OPPVYZZZZZb				 r   c                     t          d           t          d           d} t          dd          D ]R}t          d                    |t          t          t
          j        t
          j        | |          | z                       Sd S )Nr   zThread Performance Test:d   r      z   Thread Count {0:>2}: {1:8f})r   rk   r   r   rH   rU   r   r   )r   r   s     r
   print_thread_performancer   #  s    	&MMM	
$%%%E!BKK I I.55h@PQWY\Yacfcnpuw  AA  AA  BG  AG  H  H  	I  	I  	I  	II Ir   r   *z* Testing Implementation)	verbosityz* Performance Testingg?)rh   r   )rh   )1unittestos.pathossysr   r   pathdirnameabspath__file__this_dirjoin	build_direxistsr   exitlistdir	plat_dirslenplat_dirinsertrU   
srp._pysrprC   
srp._ctsrprH   r^   encoder]   TestCaser   r   r   r*   r+   r   r   r   r   r   r   r   r   
TestLoaderloadTestsFromTestCasesuiteTextTestRunnerrunsleepr   r   r
   <module>r      sa     				 



  7??BGOOH5577GLL"'//(33W>>		w~~y"" 	E
EFFFCHQKKKEEG,,EEE	
s9~~	E
/0007<<IaL22 27<<22 5 5 5 


             
H JPPW K9 K9 K9 K9 K9! K9 K9 K9b hH(TTDd66		2 2 2,   .     2 2 2  *I I I f c


   ! ! ! c


33H==  ! $ $ $ ( ( / / / f c


     c


                
3r   