1#!/usr/bin/env perl 2# 3# Based on NIST gcmEncryptIntIVxxx.rsp validation files 4# Only first 3 of every set used for compile time saving 5# 6# Copyright The Mbed TLS Contributors 7# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 8 9use strict; 10 11my $file = shift; 12 13open(TEST_DATA, "$file") or die "Opening test cases '$file': $!"; 14 15sub get_suite_val($) 16{ 17 my $name = shift; 18 my $val = ""; 19 20 while(my $line = <TEST_DATA>) 21 { 22 next if ($line !~ /^\[/); 23 ($val) = ($line =~ /\[$name\s\=\s(\w+)\]/); 24 last; 25 } 26 27 return $val; 28} 29 30sub get_val($) 31{ 32 my $name = shift; 33 my $val = ""; 34 my $line; 35 36 while($line = <TEST_DATA>) 37 { 38 next if($line !~ /=/); 39 last; 40 } 41 42 ($val) = ($line =~ /^$name = (\w+)/); 43 44 return $val; 45} 46 47my $cnt = 1;; 48while (my $line = <TEST_DATA>) 49{ 50 my $key_len = get_suite_val("Keylen"); 51 next if ($key_len !~ /\d+/); 52 my $iv_len = get_suite_val("IVlen"); 53 my $pt_len = get_suite_val("PTlen"); 54 my $add_len = get_suite_val("AADlen"); 55 my $tag_len = get_suite_val("Taglen"); 56 57 for ($cnt = 0; $cnt < 3; $cnt++) 58 { 59 my $Count = get_val("Count"); 60 my $key = get_val("Key"); 61 my $pt = get_val("PT"); 62 my $add = get_val("AAD"); 63 my $iv = get_val("IV"); 64 my $ct = get_val("CT"); 65 my $tag = get_val("Tag"); 66 67 print("GCM NIST Validation (AES-$key_len,$iv_len,$pt_len,$add_len,$tag_len) #$Count\n"); 68 print("gcm_encrypt_and_tag"); 69 print(":\"$key\""); 70 print(":\"$pt\""); 71 print(":\"$iv\""); 72 print(":\"$add\""); 73 print(":\"$ct\""); 74 print(":$tag_len"); 75 print(":\"$tag\""); 76 print(":0"); 77 print("\n\n"); 78 } 79} 80 81print("GCM Selftest\n"); 82print("gcm_selftest:\n\n"); 83 84close(TEST_DATA); 85