add switch for each function of randomlooking check

This commit is contained in:
root
2023-09-12 11:36:28 +00:00
parent 5d8b1b0c67
commit 27758e7fed
2 changed files with 105 additions and 18 deletions

View File

@@ -1,6 +1,31 @@
#ifndef _MESA_STS_H_
#define _MESA_STS_H_
#define STS_RANDOM_JUDGE_NUM 15
#define STS_SET_FLAG(flag, idx) (flag |= (1 << idx))
#define STS_TEST_FLAG(flag, idx) (flag & (1 << idx))
enum sts_random_judge_list_idx
{
STS_FREQUENCY = 0,
STS_BLOCK_FREQUENCY,
STS_CUMULATIVE_SUMS,
STS_RUNS,
STS_LONGEST_RUN,
STS_RANK,
STS_NON_OVERLAPPING_TEMPLATE_MATCHING,
STS_OVERLAPPING_TEMPLATE_MATCHING,
STS_UNIVERSAL,
STS_RANDOM_EXCURSIONS,
STS_RANDOM_EXCURSIONS_VARIANT,
STS_POKER_DETECT,
STS_RUNS_DISTRIBUTION,
STS_SELF_CORRELATION,
STS_BINARY_DERIVATE,
STS_RANDOM_IDX_MAX
};
struct sts_result {
unsigned char frequency;
unsigned char block_frequency;
@@ -23,10 +48,10 @@ struct sts_result {
extern "C" {
#endif
int mesa_statistical_test_suite(void* data,unsigned int datalen, struct sts_result* result);
int mesa_statistical_test_suite(void* data,unsigned int datalen, struct sts_result* result, unsigned int random_judge_switch_flag);
#ifdef __cplusplus
}
#endif
#endif /* _MESA_STS_H_ */
#endif /* _MESA_STS_H_ */

View File

@@ -3,7 +3,7 @@
#include "include/stat_fncs.h"
#include "mesa_sts.h"
int mesa_statistical_test_suite(void* data,unsigned int datalen, struct sts_result* result)
int mesa_statistical_test_suite(void* data,unsigned int datalen, struct sts_result* result, unsigned int random_judge_switch_flag)
{
TP tp;
tp.n = datalen;
@@ -25,25 +25,87 @@ int mesa_statistical_test_suite(void* data,unsigned int datalen, struct sts_resu
bitsRead = 0;
done = 0;
done = convertToBits((BYTE*)data,datalen,tp.n,&num_0s,&num_1s,&bitsRead,epsilon);
result->frequency = Frequency(tp.n,epsilon);
result->block_frequency = BlockFrequency(tp.blockFrequencyBlockLength, tp.n,epsilon);
result->cumulative_sums = CumulativeSums(tp.n,epsilon);
result->runs = Runs(tp.n,epsilon);
result->longest_run = LongestRunOfOnes(tp.n,epsilon);
result->rank = Rank(tp.n,epsilon);
if (STS_TEST_FLAG(random_judge_switch_flag, STS_FREQUENCY))
{
result->frequency = Frequency(tp.n,epsilon);
}
if (STS_TEST_FLAG(random_judge_switch_flag, STS_BLOCK_FREQUENCY))
{
result->block_frequency = BlockFrequency(tp.blockFrequencyBlockLength, tp.n,epsilon);
}
if (STS_TEST_FLAG(random_judge_switch_flag, STS_CUMULATIVE_SUMS))
{
result->cumulative_sums = CumulativeSums(tp.n,epsilon);
}
if (STS_TEST_FLAG(random_judge_switch_flag, STS_RUNS))
{
result->runs = Runs(tp.n,epsilon);
}
if (STS_TEST_FLAG(random_judge_switch_flag, STS_LONGEST_RUN))
{
result->longest_run = LongestRunOfOnes(tp.n,epsilon);
}
if (STS_TEST_FLAG(random_judge_switch_flag, STS_RANK))
{
result->rank = Rank(tp.n,epsilon);
}
//result->discrete_fourier_transform = DiscreteFourierTransform(tp.n,epsilon);//cost too much time
result->non_overlapping_template_matching = NonOverlappingTemplateMatchings(tp.nonOverlappingTemplateBlockLength, tp.n,epsilon);
result->overlapping_template_matching = OverlappingTemplateMatchings(tp.overlappingTemplateBlockLength, tp.n,epsilon);
result->universal = Universal(tp.n,epsilon);
if (STS_TEST_FLAG(random_judge_switch_flag, STS_NON_OVERLAPPING_TEMPLATE_MATCHING))
{
result->non_overlapping_template_matching = NonOverlappingTemplateMatchings(tp.nonOverlappingTemplateBlockLength, tp.n,epsilon);
}
if (STS_TEST_FLAG(random_judge_switch_flag, STS_OVERLAPPING_TEMPLATE_MATCHING))
{
result->overlapping_template_matching = OverlappingTemplateMatchings(tp.overlappingTemplateBlockLength, tp.n,epsilon);
}
if (STS_TEST_FLAG(random_judge_switch_flag, STS_UNIVERSAL))
{
result->universal = Universal(tp.n,epsilon);
}
//result->approximate_entropy = ApproximateEntropy(tp.approximateEntropyBlockLength, tp.n,epsilon);//cost too much time
result->random_excursions = RandomExcursions(tp.n,epsilon);
result->random_excursions_variant = RandomExcursionsVariant(tp.n,epsilon);
if (STS_TEST_FLAG(random_judge_switch_flag, STS_RANDOM_EXCURSIONS))
{
result->random_excursions = RandomExcursions(tp.n,epsilon);
}
if (STS_TEST_FLAG(random_judge_switch_flag, STS_RANDOM_EXCURSIONS_VARIANT))
{
result->random_excursions_variant = RandomExcursionsVariant(tp.n,epsilon);
}
//result->serial = Serial(tp.serialBlockLength,tp.n,epsilon);//cost too much time
//sresult->linear_complexity = LinearComplexity(tp.linearComplexitySequenceLength, tp.n,epsilon);//cost too much time
result->poker_detect = PokerDetect(tp.PokerDetectMLength,tp.n,epsilon);
result->runs_distribution = RunsDistribution(tp.n,epsilon);
result->self_correlation = SelfCorrelation(tp.SelfCorrelationDLength,tp.n,epsilon);
result->binary_derivative = BinaryDerivate(tp.BinaryDerivateKLength,tp.n,epsilon,tp.n);//this function will change the value of epsilon, must be the last one
if (STS_TEST_FLAG(random_judge_switch_flag, STS_POKER_DETECT))
{
result->poker_detect = PokerDetect(tp.PokerDetectMLength,tp.n,epsilon);
}
if (STS_TEST_FLAG(random_judge_switch_flag, STS_RUNS_DISTRIBUTION))
{
result->runs_distribution = RunsDistribution(tp.n,epsilon);
}
if (STS_TEST_FLAG(random_judge_switch_flag, STS_SELF_CORRELATION))
{
result->self_correlation = SelfCorrelation(tp.SelfCorrelationDLength,tp.n,epsilon);
}
if (STS_TEST_FLAG(random_judge_switch_flag, STS_BINARY_DERIVATE))
{
result->binary_derivative = BinaryDerivate(tp.BinaryDerivateKLength,tp.n,epsilon,tp.n);//this function will change the value of epsilon, must be the last one
}
free(epsilon);
epsilon = NULL;