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