sts-pylib

Functional interface to the NIST randomness tests


Keywords
rng, prng, randomness, nist, sts, statistics, tests, randomness-testing, cryptography, data-science
License
BSD-3-Clause
Install
pip install sts-pylib==0.0.5

Documentation

sts-pylib

GitHub Workflow Status Read the Docs License PyPI Python Version

A functional Python interface to the NIST Statistical Test Suite.

Quickstart

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.

Contributors

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.