A functional Python interface to the NIST Statistical Test Suite.
You can install sts-pylib
via pip
:
$ pip install sts-pylib
This will install a package sts
into your system,
which contains NIST's statistical tests for randomness.
A complete reference is available in the docs.
>>> import sts
>>> p_value = sts.frequency([1, 0, 1, 1, 0, 1, 0, 1, 0, 1])
FREQUENCY TEST
---------------------------------------------
COMPUTATIONAL INFORMATION:
(a) The nth partial sum = 2
(b) S_n/n = 0.200000
---------------------------------------------
p_value = 0.527089
>>> print(p_value)
0.5270892568655381
Note that all the tests take the input sequence epsilon
(a sample of RNG output)
as an array of 0
and 1
integers.
A more thorough demonstration of sts-pylib
is available on
Kaggle.
The original sts C program, alongside its corresponding SP800-22 paper, were authored by the following at NIST:
- Andrew Rukhin
- Juan Soto
- James Nechvatal
- Miles Smid
- Elaine Barker
- Stefan Leigh
- Mark Levenson
- Mark Vangel
- David Banks,
- Alan Heckert
- James Dray
- San Vo
- Lawrence E Bassham III
Additional work to improve Windows compatibility was done by Paweł Krawczyk (@kravietz), with a bug fix by @ZZMarquis.
I (@Honno) am responsible for converting sts into a functional interface, and providing a Python wrapper on-top of it. You can check out my own randomness testing suite coinflip, where I am creating a robust and user-friendly version of NIST's sts in Python.