quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

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);