调用流程图
图1 调用流程图
main的执行流程说明
@assess.c
执行步骤
- 参数设定
- openOutputStreams // 打开各种输出结果文件(包括总的统计信息文件(个)和每个检测项的详细清单文件(个/项))
- invokeTestSuite//读取文件数据或者用随机数发生器生成数据,然后进行随机性检测
- postProcessResults // 检测结果的最后处理(统一度量值的计算)
3. invokeTestSuite读取文件数据或者用随机数发生器生成数据,然后进行随机性检测
@utilities.c
执行步骤
执行以下十种情况之一
- fileBasedBitStreams//读取文件数据,然后进行随机性检测
- lcg();//对伪随机数发生器的检测
- quadRes1();//同上
- quadRes2();//同上
- cubicRes();//同上
- exclusiveOR();//同上
- modExp();//同上
- bbs();//同上
- micali_schnorr();//同上
- SHA1();//同上
3.1 fileBasedBitStreams读取文件数据,然后进行随机性检测
@utilities.c
执行步骤
选择读取ASCII文件数据或者二进制文件数据,然后进行随机性检测
- readBinaryDigitsInASCIIFormat //读取ASCII文件数据,然后进行随机性检测
- readHexDigitsInBinaryFormat //读取二进制文件数据,然后进行随机
3.1.1 readHexDigitsInBinaryFormat //读取二进制文件数据进行检测
@ utilities.c
执行步骤
- 读取文件中的每个字节(会做字节内比特逆序)形成字节串
- 随机性检测 nist_test_suite
3.1.2 readBinaryDigitsInASCIIFormat读取ASCII文件数据进行检测
@ utilities.c
执行步骤
- 读取文件中的“1”和“0”形成比特串
- 比特串转字节串convert_epsilon_to_array
- 随机性检测 nist_test_suite
3.X.X.X convert_epsilon_to_array 比特串转字节串
@ generators.c
比特串转字节串
比特顺序为:一个字节中最低比特为第0比特,最高比特为第7比特。
3.X.X.X nist_test_suite随机性检测
@utilities.c
执行步骤
对设定的每一个检测项进行检测。
3.X 伪随机数发生器的检测(如lcg等)
@generators.c
执行步骤
- 用伪随机数发生器产生随机数
- 比特串转字节串 convert_epsilon_to_array
- 随机性检测 nist_test_suite
- postProcessResults检测结果的最后处理
@assess.c
执行步骤
- 特定处理
- computeMetrics //计算统一度量值
4.2 computeMetrics计算统一度量值
@assess.c
计算统一度量值