gen_gcm_encrypt.pl (1813B)
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 9 use strict; 10 11 my $file = shift; 12 13 open(TEST_DATA, "$file") or die "Opening test cases '$file': $!"; 14 15 sub 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 30 sub 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 47 my $cnt = 1;; 48 while (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 81 print("GCM Selftest\n"); 82 print("gcm_selftest:\n\n"); 83 84 close(TEST_DATA);