#randomness #testing #command-line #standards #specification #gm-t #opengm

nightly bin+lib opengm_rts

GM/T 0005-2021 randomness test suits written in Rust

8 releases

new 0.2.3 Nov 7, 2024
0.2.1 Oct 9, 2024
0.1.4 Aug 14, 2024
0.1.2 Jul 9, 2024
0.1.1 Jun 21, 2024

#419 in Math

Download history 18/week @ 2024-07-11 196/week @ 2024-08-08 81/week @ 2024-08-15 13/week @ 2024-09-12 2/week @ 2024-09-19 7/week @ 2024-09-26 193/week @ 2024-10-03 118/week @ 2024-10-10 4/week @ 2024-10-17

316 downloads per month

MIT/Apache

1MB
6.5K SLoC

opengm_rts

opengm_rts is the fast randomness test suits following the GM/T 0005-2021 Randomness test specification.

A lightweight command line executable program is provided to test for 1000 samples with one million bits each.

opengm_rts是随机数检测函数库, 遵循GM/T 0005-2021 随机性检测规范.

包括15个随机性测试函数以及命令行程序,方便对1000组1百万比特的样本进行随机性测试, 应用程序也可通过定制api调用实现开机检测和周期检测.

图形界面程序见https://github.com/opengm-libs/opengm_rts_gui

Build & Usage

Build the command line executable:

cargo build --bin opengm_rts --release

The command line executable program:

$ ./opengm_rts <dir/to/samples>

Performance

1000组,每组100万比特测试数据, Macbook M1 Max上多线程5秒内完成.

1000组,每组1亿比特测试数据, Macbook M1 Max上多线程716秒完成.

performace_1m performace_1y

测试数据

100万比特检测

对e的前100万比特检测结果.

参数 p-value q-value
Frequency - 0.953748 0.476874
BlockFrequency 10000 0.676226 0.676226
Poker 8 0.023946 0.023946
Serial1 5 0.225782 0.225782
Serial2 5 0.057499 0.057499
Runs - 0.561916 0.719041
RunsDistribution - 0.772411 0.772411
LongestRun0 - 0.437860 0.437860
LongestRun1 - 0.718354 0.718354
BinaryDerivative 7 0.760365 0.619817
Autocorrelation 16 0.912408 0.543795
Rank - 0.307543 0.307543
CumulativeSumsBackward - 0.724265 0.724265
CumulativeSumsForward - 0.669886 0.669886
ApproximateEntropy 5 0.361687 0.361687
LinearComplexity 1000 0.844720 0.844720
Universal - 0.282567 0.141283
DiscreteFourier - 0.851010 0.425505

1亿比特检测

对 sm3(0x00000001) || sm3(0x00000002) || ... || sm3(0x0005f5e1)的检测结果.

注: 采用大端表示,即0x00000001表示为4个字节: [0x00, 0x00, 0x00, 0x01].

参数 p-value q-value
Frequency - 0.369291 0.184645
BlockFrequency 100000 0.100391 0.100391
Poker 4 0.279315 0.279315
Poker 8 0.921122 0.921122
Serial1 3 0.356591 0.356591
Serial1 5 0.184023 0.184023
Serial1 7 0.177479 0.177479
Serial2 3 0.361706 0.361706
Serial2 5 0.108221 0.108221
Serial2 7 0.331672 0.331672
Runs - 0.214118 0.892940
RunsDistribution - 0.136170 0.136170
LongestRun0 10000 0.951972 0.951972
LongestRun1 10000 0.503703 0.503703
BinaryDerivative 3 0.975508 0.487754
BinaryDerivative 7 0.606901 0.696549
BinaryDerivative 15 0.899019 0.449509
Autocorrelation 1 0.214051 0.892974
Autocorrelation 2 0.298153 0.149076
Autocorrelation 8 0.419550 0.209775
Autocorrelation 16 0.118146 0.059073
Autocorrelation 32 0.116368 0.941815
Rank - 0.900557 0.900557
CumulativeSumsBackward - 0.715149 0.715149
CumulativeSumsForward - 0.310534 0.310534
ApproximateEntropy 5 0.172294 0.172294
ApproximateEntropy 7 0.243197 0.243197
LinearComplexity 5000 0.128996 0.128996
Universal - 0.589902 0.294951
DiscreteFourier - 0.838827 0.580586

About

OpenGM is the (ongoing) open-source project for the GM/T standards.

Dependencies

~3.5MB
~71K SLoC