1a8e1175bSopenharmony_ci#!/usr/bin/env perl 2a8e1175bSopenharmony_ci# 3a8e1175bSopenharmony_ci# Based on NIST gcmDecryptxxx.rsp validation files 4a8e1175bSopenharmony_ci# Only first 3 of every set used for compile time saving 5a8e1175bSopenharmony_ci# 6a8e1175bSopenharmony_ci# Copyright The Mbed TLS Contributors 7a8e1175bSopenharmony_ci# SPDX-License-Identifier: Apache-2.0 8a8e1175bSopenharmony_ci# 9a8e1175bSopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); you may 10a8e1175bSopenharmony_ci# not use this file except in compliance with the License. 11a8e1175bSopenharmony_ci# You may obtain a copy of the License at 12a8e1175bSopenharmony_ci# 13a8e1175bSopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 14a8e1175bSopenharmony_ci# 15a8e1175bSopenharmony_ci# Unless required by applicable law or agreed to in writing, software 16a8e1175bSopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 17a8e1175bSopenharmony_ci# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18a8e1175bSopenharmony_ci# See the License for the specific language governing permissions and 19a8e1175bSopenharmony_ci# limitations under the License. 20a8e1175bSopenharmony_ci 21a8e1175bSopenharmony_ciuse strict; 22a8e1175bSopenharmony_ci 23a8e1175bSopenharmony_cimy $file = shift; 24a8e1175bSopenharmony_ci 25a8e1175bSopenharmony_ciopen(TEST_DATA, "$file") or die "Opening test cases '$file': $!"; 26a8e1175bSopenharmony_ci 27a8e1175bSopenharmony_cisub get_suite_val($) 28a8e1175bSopenharmony_ci{ 29a8e1175bSopenharmony_ci my $name = shift; 30a8e1175bSopenharmony_ci my $val = ""; 31a8e1175bSopenharmony_ci 32a8e1175bSopenharmony_ci while(my $line = <TEST_DATA>) 33a8e1175bSopenharmony_ci { 34a8e1175bSopenharmony_ci next if ($line !~ /^\[/); 35a8e1175bSopenharmony_ci ($val) = ($line =~ /\[$name\s\=\s(\w+)\]/); 36a8e1175bSopenharmony_ci last; 37a8e1175bSopenharmony_ci } 38a8e1175bSopenharmony_ci 39a8e1175bSopenharmony_ci return $val; 40a8e1175bSopenharmony_ci} 41a8e1175bSopenharmony_ci 42a8e1175bSopenharmony_cisub get_val($) 43a8e1175bSopenharmony_ci{ 44a8e1175bSopenharmony_ci my $name = shift; 45a8e1175bSopenharmony_ci my $val = ""; 46a8e1175bSopenharmony_ci my $line; 47a8e1175bSopenharmony_ci 48a8e1175bSopenharmony_ci while($line = <TEST_DATA>) 49a8e1175bSopenharmony_ci { 50a8e1175bSopenharmony_ci next if($line !~ /=/); 51a8e1175bSopenharmony_ci last; 52a8e1175bSopenharmony_ci } 53a8e1175bSopenharmony_ci 54a8e1175bSopenharmony_ci ($val) = ($line =~ /^$name = (\w+)/); 55a8e1175bSopenharmony_ci 56a8e1175bSopenharmony_ci return $val; 57a8e1175bSopenharmony_ci} 58a8e1175bSopenharmony_ci 59a8e1175bSopenharmony_cisub get_val_or_fail($) 60a8e1175bSopenharmony_ci{ 61a8e1175bSopenharmony_ci my $name = shift; 62a8e1175bSopenharmony_ci my $val = "FAIL"; 63a8e1175bSopenharmony_ci my $line; 64a8e1175bSopenharmony_ci 65a8e1175bSopenharmony_ci while($line = <TEST_DATA>) 66a8e1175bSopenharmony_ci { 67a8e1175bSopenharmony_ci next if($line !~ /=/ && $line !~ /FAIL/); 68a8e1175bSopenharmony_ci last; 69a8e1175bSopenharmony_ci } 70a8e1175bSopenharmony_ci 71a8e1175bSopenharmony_ci ($val) = ($line =~ /^$name = (\w+)/) if ($line =~ /=/); 72a8e1175bSopenharmony_ci 73a8e1175bSopenharmony_ci return $val; 74a8e1175bSopenharmony_ci} 75a8e1175bSopenharmony_ci 76a8e1175bSopenharmony_cimy $cnt = 1;; 77a8e1175bSopenharmony_ciwhile (my $line = <TEST_DATA>) 78a8e1175bSopenharmony_ci{ 79a8e1175bSopenharmony_ci my $key_len = get_suite_val("Keylen"); 80a8e1175bSopenharmony_ci next if ($key_len !~ /\d+/); 81a8e1175bSopenharmony_ci my $iv_len = get_suite_val("IVlen"); 82a8e1175bSopenharmony_ci my $pt_len = get_suite_val("PTlen"); 83a8e1175bSopenharmony_ci my $add_len = get_suite_val("AADlen"); 84a8e1175bSopenharmony_ci my $tag_len = get_suite_val("Taglen"); 85a8e1175bSopenharmony_ci 86a8e1175bSopenharmony_ci for ($cnt = 0; $cnt < 3; $cnt++) 87a8e1175bSopenharmony_ci { 88a8e1175bSopenharmony_ci my $Count = get_val("Count"); 89a8e1175bSopenharmony_ci my $key = get_val("Key"); 90a8e1175bSopenharmony_ci my $iv = get_val("IV"); 91a8e1175bSopenharmony_ci my $ct = get_val("CT"); 92a8e1175bSopenharmony_ci my $add = get_val("AAD"); 93a8e1175bSopenharmony_ci my $tag = get_val("Tag"); 94a8e1175bSopenharmony_ci my $pt = get_val_or_fail("PT"); 95a8e1175bSopenharmony_ci 96a8e1175bSopenharmony_ci print("GCM NIST Validation (AES-$key_len,$iv_len,$pt_len,$add_len,$tag_len) #$Count\n"); 97a8e1175bSopenharmony_ci print("gcm_decrypt_and_verify"); 98a8e1175bSopenharmony_ci print(":\"$key\""); 99a8e1175bSopenharmony_ci print(":\"$ct\""); 100a8e1175bSopenharmony_ci print(":\"$iv\""); 101a8e1175bSopenharmony_ci print(":\"$add\""); 102a8e1175bSopenharmony_ci print(":$tag_len"); 103a8e1175bSopenharmony_ci print(":\"$tag\""); 104a8e1175bSopenharmony_ci print(":\"$pt\""); 105a8e1175bSopenharmony_ci print(":0"); 106a8e1175bSopenharmony_ci print("\n\n"); 107a8e1175bSopenharmony_ci } 108a8e1175bSopenharmony_ci} 109a8e1175bSopenharmony_ci 110a8e1175bSopenharmony_ciprint("GCM Selftest\n"); 111a8e1175bSopenharmony_ciprint("gcm_selftest:\n\n"); 112a8e1175bSopenharmony_ci 113a8e1175bSopenharmony_ciclose(TEST_DATA); 114