123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- #!/usr/bin/env perl
- #
- # Based on NIST CTR_DRBG.rsp validation file
- # Only uses AES-256-CTR cases that use a Derivation function
- # and concats nonce and personalization for initialization.
- #
- # Copyright The Mbed TLS Contributors
- # SPDX-License-Identifier: Apache-2.0
- #
- # Licensed under the Apache License, Version 2.0 (the "License"); you may
- # not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- use strict;
- my $file = shift;
- open(TEST_DATA, "$file") or die "Opening test cases '$file': $!";
- sub get_suite_val($)
- {
- my $name = shift;
- my $val = "";
- my $line = <TEST_DATA>;
- ($val) = ($line =~ /\[$name\s\=\s(\w+)\]/);
- return $val;
- }
- sub get_val($)
- {
- my $name = shift;
- my $val = "";
- my $line;
- while($line = <TEST_DATA>)
- {
- next if($line !~ /=/);
- last;
- }
- ($val) = ($line =~ /^$name = (\w+)/);
- return $val;
- }
- my $cnt = 1;;
- while (my $line = <TEST_DATA>)
- {
- next if ($line !~ /^\[AES-256 use df/);
- my $PredictionResistanceStr = get_suite_val("PredictionResistance");
- my $PredictionResistance = 0;
- $PredictionResistance = 1 if ($PredictionResistanceStr eq 'True');
- my $EntropyInputLen = get_suite_val("EntropyInputLen");
- my $NonceLen = get_suite_val("NonceLen");
- my $PersonalizationStringLen = get_suite_val("PersonalizationStringLen");
- my $AdditionalInputLen = get_suite_val("AdditionalInputLen");
- for ($cnt = 0; $cnt < 15; $cnt++)
- {
- my $Count = get_val("COUNT");
- my $EntropyInput = get_val("EntropyInput");
- my $Nonce = get_val("Nonce");
- my $PersonalizationString = get_val("PersonalizationString");
- my $AdditionalInput1 = get_val("AdditionalInput");
- my $EntropyInputPR1 = get_val("EntropyInputPR") if ($PredictionResistance == 1);
- my $EntropyInputReseed = get_val("EntropyInputReseed") if ($PredictionResistance == 0);
- my $AdditionalInputReseed = get_val("AdditionalInputReseed") if ($PredictionResistance == 0);
- my $AdditionalInput2 = get_val("AdditionalInput");
- my $EntropyInputPR2 = get_val("EntropyInputPR") if ($PredictionResistance == 1);
- my $ReturnedBits = get_val("ReturnedBits");
- if ($PredictionResistance == 1)
- {
- print("CTR_DRBG NIST Validation (AES-256 use df,$PredictionResistanceStr,$EntropyInputLen,$NonceLen,$PersonalizationStringLen,$AdditionalInputLen) #$Count\n");
- print("ctr_drbg_validate_pr");
- print(":\"$Nonce$PersonalizationString\"");
- print(":\"$EntropyInput$EntropyInputPR1$EntropyInputPR2\"");
- print(":\"$AdditionalInput1\"");
- print(":\"$AdditionalInput2\"");
- print(":\"$ReturnedBits\"");
- print("\n\n");
- }
- else
- {
- print("CTR_DRBG NIST Validation (AES-256 use df,$PredictionResistanceStr,$EntropyInputLen,$NonceLen,$PersonalizationStringLen,$AdditionalInputLen) #$Count\n");
- print("ctr_drbg_validate_nopr");
- print(":\"$Nonce$PersonalizationString\"");
- print(":\"$EntropyInput$EntropyInputReseed\"");
- print(":\"$AdditionalInput1\"");
- print(":\"$AdditionalInputReseed\"");
- print(":\"$AdditionalInput2\"");
- print(":\"$ReturnedBits\"");
- print("\n\n");
- }
- }
- }
- close(TEST_DATA);
|