After reviewing the random number test code I thought some extra functions might be useful, attached is said code<br><br><br clear="all"># -*- coding: utf-8 -*-<br>#<br>#&nbsp; SelfTest/Util/test_generic.py: Self-test for the Crypto.Random.new() function<br>
#<br># =======================================================================<br># Copyright (C) 2008&nbsp; Dwayne C. Litzenberger &lt;<a href="mailto:dlitz@dlitz.net">dlitz@dlitz.net</a>&gt;<br>#<br># Permission is hereby granted, free of charge, to any person obtaining<br>
# a copy of this software and associated documentation files (the<br># &quot;Software&quot;), to deal in the Software without restriction, including<br># without limitation the rights to use, copy, modify, merge, publish,<br>
# distribute, sublicense, and/or sell copies of the Software, and to<br># permit persons to whom the Software is furnished to do so.<br>#<br># THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS<br># &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT<br>
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR<br># A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT<br># OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,<br>
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT<br># LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,<br># DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY<br># THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT<br>
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE<br># OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.<br># =======================================================================<br>
#<br><br>&quot;&quot;&quot;Self-test suite for Crypto.Random.new()&quot;&quot;&quot;<br><br>__revision__ = &quot;$Id$&quot;<br><br>import unittest<br><br>class SimpleTest(unittest.TestCase):<br>&nbsp;&nbsp;&nbsp; def runTest(self):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;&quot;&quot;Crypto.Random.new()&quot;&quot;&quot;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Import the OSRNG module and try to use it<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from Crypto import Random<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; randobj = Random.new()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x = randobj.read(16)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y = randobj.read(16)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.assertNotEqual(x, y)<br>
class TestNotAlwaysEqual(unittest.TestCase):<br>&nbsp;&nbsp;&nbsp; def runTest(self):<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; from Crypto import Random<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; randobj = Random.new()<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; k = 10<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DataArray = []<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; x = randobj.read(16)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; count = 0<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for i in range(0,k):<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; y = randobj.read(16)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if x == y:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; count += 1<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; self.assertNotEqual(count,k)<br>class TestAverage(unittest.TestCase):<br>
&nbsp;&nbsp;&nbsp; def runTest(self):<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; from Crypto import Random<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; randobj = Random.new()<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; x = randobj.read(2**15)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; values = []<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for i in x:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; values.append(ord(i))<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; total = 0<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for i in values:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; total += i<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; average = total/len(values)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; print average<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; self.assertEqual(average in range((256/2)-28,(256/2)+28),True)&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>
<br>def get_tests():<br>&nbsp;&nbsp;&nbsp; return [SimpleTest(),TestNotAlwaysEqual(),TestAverage()]<br><br>if __name__ == &#39;__main__&#39;:<br>&nbsp;&nbsp;&nbsp; suite = lambda: unittest.TestSuite(get_tests())<br>&nbsp;&nbsp;&nbsp; unittest.main(defaultTest=&#39;suite&#39;)<br>
<br># vim:set ts=4 sw=4 sts=4 expandtab:<br><br>-- <br>Sam Phippen<br><br>Please avoid sending me Word or PowerPoint attachments.<br>See <a href="http://www.gnu.org/philosophy/no-word-attachments.html">http://www.gnu.org/philosophy/no-word-attachments.html</a><br>