quickjs-tart

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

gen_gcm_decrypt.pl (2092B)


      1 #!/usr/bin/env perl
      2 #
      3 # Based on NIST gcmDecryptxxx.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 sub get_val_or_fail($)
     48 {
     49     my $name = shift;
     50     my $val = "FAIL";
     51     my $line;
     52 
     53     while($line = <TEST_DATA>)
     54     {
     55         next if($line !~ /=/ && $line !~ /FAIL/);
     56         last;
     57     }
     58 
     59     ($val) = ($line =~ /^$name = (\w+)/) if ($line =~ /=/);
     60 
     61     return $val;
     62 }
     63 
     64 my $cnt = 1;;
     65 while (my $line = <TEST_DATA>)
     66 {
     67     my $key_len = get_suite_val("Keylen");
     68     next if ($key_len !~ /\d+/);
     69     my $iv_len = get_suite_val("IVlen");
     70     my $pt_len = get_suite_val("PTlen");
     71     my $add_len = get_suite_val("AADlen");
     72     my $tag_len = get_suite_val("Taglen");
     73 
     74     for ($cnt = 0; $cnt < 3; $cnt++)
     75     {
     76         my $Count = get_val("Count");
     77         my $key = get_val("Key");
     78         my $iv = get_val("IV");
     79         my $ct = get_val("CT");
     80         my $add = get_val("AAD");
     81         my $tag = get_val("Tag");
     82         my $pt = get_val_or_fail("PT");
     83 
     84         print("GCM NIST Validation (AES-$key_len,$iv_len,$pt_len,$add_len,$tag_len) #$Count\n");
     85         print("gcm_decrypt_and_verify");
     86         print(":\"$key\"");
     87         print(":\"$ct\"");
     88         print(":\"$iv\"");
     89         print(":\"$add\"");
     90         print(":$tag_len");
     91         print(":\"$tag\"");
     92         print(":\"$pt\"");
     93         print(":0");
     94         print("\n\n");
     95     }
     96 }
     97 
     98 print("GCM Selftest\n");
     99 print("gcm_selftest:\n\n");
    100 
    101 close(TEST_DATA);