3 # Based on NIST CTR_DRBG.rsp validation file
4 # Only uses AES-256-CTR cases that use a Derivation function
5 # and concats nonce and personalization for initialization.
11 open(TEST_DATA, "$file") or die "Opening test cases '$file': $!";
18 my $line = <TEST_DATA>;
19 ($val) = ($line =~ /\[$name\s\=\s(\w+)\]/);
30 while($line = <TEST_DATA>)
32 next if($line !~ /=/);
36 ($val) = ($line =~ /^$name = (\w+)/);
42 while (my $line = <TEST_DATA>)
44 next if ($line !~ /^\[AES-256 use df/);
46 my $PredictionResistanceStr = get_suite_val("PredictionResistance");
47 my $PredictionResistance = 0;
48 $PredictionResistance = 1 if ($PredictionResistanceStr eq 'True');
49 my $EntropyInputLen = get_suite_val("EntropyInputLen");
50 my $NonceLen = get_suite_val("NonceLen");
51 my $PersonalizationStringLen = get_suite_val("PersonalizationStringLen");
52 my $AdditionalInputLen = get_suite_val("AdditionalInputLen");
54 for ($cnt = 0; $cnt < 15; $cnt++)
56 my $Count = get_val("COUNT");
57 my $EntropyInput = get_val("EntropyInput");
58 my $Nonce = get_val("Nonce");
59 my $PersonalizationString = get_val("PersonalizationString");
60 my $AdditionalInput1 = get_val("AdditionalInput");
61 my $EntropyInputPR1 = get_val("EntropyInputPR") if ($PredictionResistance == 1);
62 my $EntropyInputReseed = get_val("EntropyInputReseed") if ($PredictionResistance == 0);
63 my $AdditionalInputReseed = get_val("AdditionalInputReseed") if ($PredictionResistance == 0);
64 my $AdditionalInput2 = get_val("AdditionalInput");
65 my $EntropyInputPR2 = get_val("EntropyInputPR") if ($PredictionResistance == 1);
66 my $ReturnedBits = get_val("ReturnedBits");
68 if ($PredictionResistance == 1)
70 print("CTR_DRBG NIST Validation (AES-256 use df,$PredictionResistanceStr,$EntropyInputLen,$NonceLen,$PersonalizationStringLen,$AdditionalInputLen) #$Count\n");
71 print("ctr_drbg_validate_pr");
72 print(":\"$Nonce$PersonalizationString\"");
73 print(":\"$EntropyInput$EntropyInputPR1$EntropyInputPR2\"");
74 print(":\"$AdditionalInput1\"");
75 print(":\"$AdditionalInput2\"");
76 print(":\"$ReturnedBits\"");
81 print("CTR_DRBG NIST Validation (AES-256 use df,$PredictionResistanceStr,$EntropyInputLen,$NonceLen,$PersonalizationStringLen,$AdditionalInputLen) #$Count\n");
82 print("ctr_drbg_validate_nopr");
83 print(":\"$Nonce$PersonalizationString\"");
84 print(":\"$EntropyInput$EntropyInputReseed\"");
85 print(":\"$AdditionalInput1\"");
86 print(":\"$AdditionalInputReseed\"");
87 print(":\"$AdditionalInput2\"");
88 print(":\"$ReturnedBits\"");