Add GMAC to MAC API
[libgcrypt.git] / tests / pkcstv2c.awk
1 #! /usr/bin/awk -f
2 # pkcstv2c.awk - Convert pkcs1 test vectors into a C table.
3 # Copyright 2011 Free Software Foundation, Inc.
4 #
5 # This file is free software; as a special exception the author gives
6 # unlimited permission to copy and/or distribute it, with or without
7 # modifications, as long as this notice is preserved.
8 #
9 # This file is distributed in the hope that it will be useful, but
10 # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
11 # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 #
13
14 BEGIN {
15     in_key = 0;
16     in_item = 0;
17     in_number = 0;
18     no_comma = 0;
19
20     printf "  static struct {\n";
21     printf "    const char *desc;\n";
22     printf "    const char *n, *e, *d;\n";
23     printf "    struct {\n";
24     printf "      const char *desc;\n";
25     printf "      const char *mesg;\n";
26     printf "      const char *seed;\n";
27     printf "      const char *encr;\n";
28     printf "    } m[20];\n";
29     printf "  } tbl[] =\n";
30     printf "  {\n";
31 }
32
33 { sub (/\r/,""); }
34
35 /^# Public key/  { skip_pub = 1; }
36 /^# Private key/ { skip_pub = 0; }
37 skip_pub { next }
38
39 in_number && ! /^[0-9a-f]/ {
40     if (in_number == 2)
41         printf "\"";
42     if (no_comma)
43         no_comma = 0;
44     else
45         printf ","
46     printf "\n";
47     in_number = 0;
48 }
49
50 in_number == 3 {
51     printf "\n";
52     in_number = 1;
53 }
54
55 in_number == 1 {
56     gsub (/ /,"")
57     printf "%*s\"%s", indent, "", $0;
58     in_number = 2;
59     next;
60 }
61
62 in_number == 2 {
63     gsub (/ /,"")
64     printf "%s\"", $0;
65     in_number = 3;
66     next;
67 }
68
69 /^#.*Example.*key pair/ {
70     if (in_item) {
71         printf "        }\n      }\n    },\n";
72         in_item = 0;
73     }
74     in_key = 1;
75     indent = 6;
76     printf "    {\n      \"%s\",\n", gensub(/.*: (A .*)/, "\\1", "g");
77     next
78 }
79
80 /^# PKCS#1 .*Example/  {
81     if (in_key) {
82         printf "      {\n";
83         in_key = 0;
84     }
85     if (in_item)
86         printf "        },{\n";
87     else
88         printf "        {\n";
89     in_item = 1;
90     indent = 10;
91     printf "          \"%s\",\n",  gensub(/^# (.*)/, "\\1", "g");
92     next
93 }
94
95 (in_key || in_item) && /^# (Modulus|Public|Exponent|Message|Seed)/ {
96     # printf "/* %s */\n", $0;
97     in_number = 1;
98     next
99 }
100 (in_key || in_item) && /^# (Signature|Encryption)/ {
101     # printf "/* %s */\n", $0;
102     in_number = 1;
103     no_comma = 1;
104     next
105 }
106
107 END {
108     if (in_item) {
109         printf "        }\n      }\n    }\n  };\n";
110         in_item = 0;
111     }
112 }