
    EhF                     t   d Z ddlmZ dZ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                  d   dk(  re	j                  d   dk(  rddl ddl 	 ddlZddlZddlZ G d d	ej$                        Zd
 Z G d dej$                        Zi fdZedk(  rd Z ej2                  d       yy# e$ r dZY `w xY w)z0Self-test suite for generic Crypto.Random stuff     )nested_scopesz$Id$N      )*c                       e Zd Zd Zd Zy)RNGForkTestc                 &   t         j                  j                  j                         }|j                  j                          	 |j                  j                  |j                  j                          S # |j                  j                          w xY w)z
        Get `FortunaAccumulator.reseed_count`, the global count of the
        number of times that the PRNG has been reseeded.
        )	CryptoRandom_UserFriendlyRNG_get_singleton_lockacquire_fareseed_countrelease)selfrng_singletons     m/var/www/html/bid_assistant/venv/lib/python3.12/site-packages/Crypto/SelfTest/Random/test__UserFriendlyRNG.py_get_reseed_countzRNGForkTest._get_reseed_count2   sg    
 66EEG##%	* $$11'')M'')s   A4 4Bc                    t         j                  j                  d      rt        t        d      rJ y t        j                  d       | j                         }t        j                  j                  j                         j                          t        j                  j                  d       | j                         }| j                  ||       g }t        d      D ]	  }t	        j                          \  }}t	        j"                         dk(  rt	        j$                  |       t	        j&                  |d      }t        j                  j)                          t        j                  j                  d      }|j+                  |       |j%                          t	        j,                  d       t	        j$                  |       |j/                  t	        j&                  |d	              g }	i }
|D ]K  }t1        j2                  |j5                               }|	j/                  |       d|
|<   |j%                          M t7        |	      t7        |
j9                               k7  r!t;        d
t=        j>                  |	      z        y )Nwinfork333333?r   
   r   wb   rbz'RNG output duplicated across fork():
%s) sysplatform
startswithhasattrostimesleepr   r
   r   r   r   reinitget_random_bytesassertNotEqualrangepiper   closefdopenatforkwrite_exitappendbinasciihexlifyreadlenkeysAssertionErrorpprintpformat)r   reseed_count_beforereseed_count_afterrfilesirfdwfdfdataresultsresults_dicts              r   runTestzRNGForkTest.runTest>   s    <<""5)r6*** 	

4"446 	&&557>>@&&q)!335/1CDr 	0AwwyHCwwyA~IIc4($$&}}55b9	HHSMMM"))C./!	0$  	A##AFFH-DNN4 !"LGGI		 w<3|00233 !K"(.."9"; < < 4    N)__name__
__module____qualname__r   rC    rD   r   r   r   0   s    
*1<rD   r   c                 \   t         j                  j                  d      }t        j                  d       t         j                  j                  d      }| j                  t        j                  |             | j                  t        j                  |             | j                  d        y )Nr   g?)r
   r   r'   r$   r%   putr1   b2a_hex)qabs      r   
_task_mainrO   s   sn    &&r*AJJsO&&r*AEE(

1
EE(

1
EE$KrD   c                       e Zd Zd Zy)RNGMultiprocessingForkTestc                    d}t        j                         }t        |      D cg c]  }|j                  d       }}t	        j
                  d       t        j                  j                  j                         j                          t        j                  j                  d       t        j                  |t        j                  j                        }|j                  t        |      }t        |      D cg c]  }||   j!                  d       }}t        |      D cg c]  }||   j!                  d       }}t#        t%        ||            }	|j!                  d       |j'                          |j)                          t+        t-        |            t+        |      k7  s t+        t-        |	            t+        |	      k7  r!t/        dt1        j2                  |	            y c c}w c c}w c c}w )N   r   r   )	processesinitializer   z%RNG output duplicated across fork():
)multiprocessingManagerr)   Queuer$   r%   r
   r   r   r   r&   r'   Poolr-   	map_asyncrO   getlistzipr+   joinr4   setr6   r7   r8   )
r   n_procsmanagerr<   queuespool
map_resultaabbress
             r   rC   z"RNGMultiprocessingForkTest.runTest~   sx   
 !))+,1'N;q'--";; 	

4&&557>>@&&q) ##g6==CWCWX^^J7
 */w8AfQimmB88).w8AfQimmB883r2; 	r

		 s2w<3r7"c#c(ms3x&? "(.."5"8 9 9 '@- < 98s   G):G.$G3N)rE   rF   rG   rC   rH   rD   r   rQ   rQ   |   s    9rD   rQ   c                 N    g }|t               gz  }t        |t               gz  }|S N)r   rW   rQ   )configtestss     r   	get_testsrm      s1    E	km_E",.//LrD   __main__c                  <    t        j                  t                     S rj   )unittest	TestSuiterm   rH   rD   r   <lambda>rr      s    H&&y{3 rD   suite)defaultTest)__doc__
__future__r   __revision__r1   r7   rp   r#   r$   r   version_infoCrypto.Util.py21compatCrypto.Util.py3compatrW   ImportErrorCrypto.Random._UserFriendlyRNGr
   Crypto.Random.randomTestCaser   rO   rQ   rm   rE   rs   mainrH   rD   r   <module>r      s   0 7 $    	  
A! 0 0 3q 8( # & ?<(## ?<F!9!2!2 !9H   z3EHMMg& {  Os   B- -B76B7