Skip to main content

NIST Test Suite for Random Number Generators - SAILab - University of Siena

Project description

This is a python 3.6 and above implementation of the NIST Test Suite for Random Number Generators (RNGs). The idea behind this work is to make a script oriented object-oriented framework for said tests. This is born from my research since I required to use the tests inside a python research project and I found existing implementation to be not well suited to that task without extensive modifications.

The NIST reference paper can be found at SP800-22r1a.

This work is inspired by the great work of David Johnston (C) 2017, which can be found on github.

Features

  • All the test in the NIST paper vectorized and optimized the best I could

  • Class structure for each test allowing for easy debug and use, both in script and inside broader applications

  • Utility functions to pack the sequence in 8-bits using numpy and to run the tests in multiple ways

  • Cache system both at function level and at test level to improve performance

  • Built-in measurement of time required to perform each test

  • Default Test class and Result class to allow eventual extension to additional tests

License

BSD 3-Clause License

For additional information check the provided license file.

How to install

If you only need to use the framework, just download the pip package nistrng and import the package in your scripts:

  • pip install nistrng

If you want to improve/modify/extends the framework, or even just try my own simple benchmarks at home, download or clone the git repository. You are welcome to open issues or participate in the project, especially if further optimization is achieved.

How to use

For a simple use case, refer to benchmark provided in the repository. For advanced use, refer to the built-in documentation and to the provided source code in the repository.

Current issues

Currently the slow speed of both the Serial and Approximate Entropy tests is an open issue. Any solution or improvement is welcome.

Can I help?

Yes, of course! This project is very side to me, so any help in reporting issues, fixing bugs, testing functionalities and overall improving it is welcome!

Changelog

v. 1.2.1:

  • Improved safe-guard against eventual NaN values that may arise inside the score calculations

  • Added unpack function to return to the original numeric integer value from a 8-bit binary sequence

  • Some minor fixes and adjustments

v. 1.2.2:

  • Fixed SP800_22R1A_BATTERY dictionary which was missing the cumulative sums test

  • Fixed missing parenthesis on test_approximate_entropy.py

  • Fixed bugs on some tests for very long sequences

  • Some minor fixes and adjustments

v. 1.2.3:

  • Fixed binary matrix rank test (credits to @scrambler-crypto)

  • Fixed a frequencies computation bug (w.r.t. tickets) on the linear complexity test

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nistrngg987-1.2.3.tar.gz (21.8 kB view details)

Uploaded Source

Built Distribution

nistrngg987-1.2.3-py3-none-any.whl (71.6 kB view details)

Uploaded Python 3

File details

Details for the file nistrngg987-1.2.3.tar.gz.

File metadata

  • Download URL: nistrngg987-1.2.3.tar.gz
  • Upload date:
  • Size: 21.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.0

File hashes

Hashes for nistrngg987-1.2.3.tar.gz
Algorithm Hash digest
SHA256 521b5741826c118996df35780cedd78f2c784204d50530d16cf1d8762f1fe95e
MD5 6ebac00aea9a008f5d10e86eb21e15f6
BLAKE2b-256 75bdd9d8c7f2605f5ee612207988c73bf311b7e388312c535ea6dc01ad854a1d

See more details on using hashes here.

File details

Details for the file nistrngg987-1.2.3-py3-none-any.whl.

File metadata

  • Download URL: nistrngg987-1.2.3-py3-none-any.whl
  • Upload date:
  • Size: 71.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.0

File hashes

Hashes for nistrngg987-1.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 dff21792e23ac4bb6602973220628a8e195980e4e6919109520407b16581a3e0
MD5 a4b99afcae7f1782fe99e4879bd368b3
BLAKE2b-256 e1b7139069b5afcf8ddf92074ea873bcfe6f80414daa154dd0c752fdcc7c88af

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page