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