Hi, I'm not a core Python developer, but it may be intesting to use a real Crush resistant RNG, as one from Random123 (a parallel random generator that is Crush resistant, contrary to the Mersenne Twister, and without a state).
Cheers, Matthieu Brucher 2012/1/3 Christian Heimes <li...@cheimes.de> > Hello, > > all proposed fixes for a randomized hashing function raise and fall with > a good random number generator to feed the random seed. The seed must be > created very early in the startup phase of the interpreter, preferable > before the basic types are initialized. CPython already have multiple > sources for random data (win32_urandom in Modules/posixmodule.c, urandom > in Lib/os.py, Mersenne twister in Modules/_randommodule.c). However we > can't use them because they are wrapped inside Python modules which > require infrastructure like initialized base types. > > I propose an addition to the current Python C API: > > int PyOS_URandom(char *buf, Py_ssize_t len) > > Read "len" chars from the OS's RNG into the pre-allocated buffer "buf". > The RNG should be suitable for cryptography. In case of an error the > function returns -1 and sets an exception, otherwise it returns 0. > On Windows I can re-use most of the code of win32_urandom(). For POSIX I > have to implement os.urandom() in C in order to read data from > /dev/urandom. That's simple and straight forward. > > > Since some platforms may not have /dev/urandom, we need a PRNG in the > core, too. I therefore propose to move the Mersenne twister from > randommodule.c into the core, too. > > typedef struct { > unsigned long state[N]; > int index; > } _Py_MT_RandomState; > > unsigned long _Py_MT_GenRand_Int32(_Py_MT_RandomState *state); // > genrand_int32() > double _Py_MT_GenRand_Res53(_Py_MT_RandomState *state); // random_random() > void _Py_MT_GenRand_Init(_Py_MT_RandomState *state, unsigned long seed); > // init_genrand() > void _Py_MT_GenRand_InitArray(_Py_MT_RandomState *state, unsigned long > init_key[], unsigned long key_length); // init_by_array > > > I suggest Python/random.c as source file and Python/pyrandom.h as header > file. Comments? > > Christian > _______________________________________________ > Python-Dev mailing list > Python-Dev@python.org > http://mail.python.org/mailman/listinfo/python-dev > Unsubscribe: > http://mail.python.org/mailman/options/python-dev/matthieu.brucher%40gmail.com > -- Information System Engineer, Ph.D. Blog: http://matt.eifelle.com LinkedIn: http://www.linkedin.com/in/matthieubrucher
_______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com