NAME Math::Random::ISAAC - Perl interface to the ISAAC PRNG Algorithm $Id: README 5756 2009-03-25 19:13:54Z FREQUENCY@cpan.org $ DESCRIPTION As with other Pseudo-Random Number Generator (PRNG) algorithms like the Mersenne Twister (see Math::Random::MT), this algorithm is designed to take some seed information and produce seemingly random results as output. However, ISAAC (Indirection, Shift, Accumulate, Add, and Count) has different goals than these commonly used algorithms. In particular, it's really fast - on average, it requires only 18.75 machine cycles to generate a 32-bit value. This makes it suitable for applications where a significant amount of random data needs to be produced quickly, such solving using the Monte Carlo method or for games. The results are uniformly distributed, unbiased, and unpredictable unless you know the seed. The algorithm was published by Bob Jenkins in the late 90s and despite the best efforts of many security researchers, no feasible attacks have been found to date. SYNOPSIS use Math::Random::ISAAC; my $rng = Math::Random::ISAAC->new(@seeds); for (0..30) { print 'Result: ' . $rng->irand() . "\n"; } PURPOSE The intent of this module is to provide single simple interface to the two compatible implementations of this module, namely, Math::Random::ISAAC::XS and Math::Random::ISAAC::PP. If, for some reason, you need to determine what version of the module is actually being included by "Math::Random::ISAAC", then: print 'Backend type: ', $Math::Random::ISAAC::DRIVER, "\n"; In order to force use of one or the other, simply load the appropriate module: use Math::Random::ISAAC::XS; my $rng = Math::Random::ISAAC::XS->new(); # or use Math::Random::ISAAC::PP; my $rng = Math::Random::ISAAC::PP->new(); COMPATIBILITY This module was tested under Perl 5.10.0, using Debian Linux. However, because it's Pure Perl and doesn't do anything too obscure, it should be compatible with any version of Perl that supports its prerequisite modules. If you encounter any problems on a different version or architecture, please contact the maintainer. AUTHOR Jonathan Yu ACKNOWLEDGEMENTS * Special thanks to Bob Jenkins for devising this very clever algorithm and releasing it into the public domain. * Thanks to John L. Allen (contact unknown) for providing a Perl port of the original ISAAC code, upon which "Math::Random::ISAAC::PP" is heavily based. His version is available on Bob's web site, in the SEE ALSO section. SUPPORT You can find documentation for this module with the perldoc command. perldoc Math::Random::ISAAC You can also look for information at: * AnnoCPAN: Annotated CPAN documentation * CPAN Ratings * Search CPAN * CPAN Request Tracker * CPAN Testing Service (Kwalitee Tests) * CPAN Testers Platform Compatibility Matrix REPOSITORY You can access the most recent development version of this module at: L If you are a CPAN developer and would like to make modifications to the code base, please contact Adam Kennedy , the repository administrator. I only ask that you contact me first to discuss the changes you wish to make to the distribution. FEEDBACK Please send relevant comments, rotten tomatoes and suggestions directly to the maintainer noted above. If you have a bug report or feature request, please file them on the CPAN Request Tracker at . If you are able to submit your bug report in the form of failing unit tests, you are strongly encouraged to do so. Regular bug reports are always accepted and appreciated via the CPAN bug tracker. SEE ALSO Math::Random::ISAAC::XS, the C/XS optimized version of this module, which will be used automatically if available. , Bob Jenkins' page about ISAAC, which explains the algorithm as well as potential attacks. CAVEATS KNOWN BUGS There are no known bugs as of this release. LIMITATIONS * There is no method that allows re-seeding of algorithms. This is not really necessary because one can simply call "new" again with the new seed data periodically. * There was no method supplied to provide the initial seed data. On his web site, Bob Jenkins writes: Seeding a random number generator is essentially the same problem as encrypting the seed with a block cipher. But he also provides a simple workaround: As ISAAC is intended to be a secure cipher, if you want to reseed it, one way is to use some other cipher to seed some initial version of ISAAC, then use ISAAC's output as a seed for other instances of ISAAC whenever they need to be reseeded. * There is no way to clone a PRNG instance. I'm not sure why this is might even be necessary or useful. File a bug report with an explanation why and I'll consider adding it to the next release. LICENSE Copyleft 2009 by Jonathan Yu . All rights reversed. I, the copyright holder of this package, hereby release the entire contents therein into the public domain. This applies worldwide, to the extent that it is permissible by law. In case this is not legally possible, I grant any entity the right to use this work for any purpose, without any conditions, unless such conditions are required by law. The full details of this can be found in the LICENSE file included in this package. DISCLAIMER OF WARRANTY The software is provided "AS IS", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.