Extract Subversion ignore data.
[catacomb-perl] / algs.PL
CommitLineData
660b443c 1# -*-perl-*-
2#
a1a90aaf 3# $Id$
660b443c 4#
5# Create tables of algorithms
6#
7# (c) 2001 Straylight/Edgeware
8#
9
10#----- Licensing notice -----------------------------------------------------
11#
12# This file is part of the Perl interface to Catacomb.
13#
14# Catacomb/Perl is free software; you can redistribute it and/or modify
15# it under the terms of the GNU General Public License as published by
16# the Free Software Foundation; either version 2 of the License, or
17# (at your option) any later version.
18#
19# Catacomb/Perl is distributed in the hope that it will be useful,
20# but WITHOUT ANY WARRANTY; without even the implied warranty of
21# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22# GNU General Public License for more details.
23#
24# You should have received a copy of the GNU General Public License
25# along with Catacomb/Perl; if not, write to the Free Software Foundation,
26# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
27
660b443c 28@cipher = qw(des desx des3
29 blowfish twofish
30 cast128 cast256
31 idea safer safersk
32 rc2 rc5
33 square rijndael rijndael192 rijndael256
a1a90aaf 34 serpent noekeon
660b443c 35 skipjack
36 mars
37 tea xtea);
38@stream = qw(rc4 seal);
a1a90aaf 39@hash = qw(md5 md4 md2 tiger has160
40 sha sha224 sha256 sha384 sha512
bfdf19cb 41 rmd128 rmd160 rmd256 rmd320
42 whirlpool whirlpool256);
660b443c 43
44sub enum {
45 $x = shift;
46 if (!ref($x)) { return $x; }
47 elsif (ref($x) eq ARRAY) { return @$x }
48 else { die "bad ref"; }
49}
50
51sub cross {
52 my $x = [];
53 foreach my $i (@_) {
54 my @y = enum($i);
55 if (@$x) {
56 my @x = ();
57 foreach my $j (@$x) { foreach my $k (@y) { push(@x, $j.$k); } }
58 $x = \@x;
59 } else {
60 $x = \@y;
61 }
62 }
63 return @$x;
64}
65
fcd15e0b 66open OUT, "> $ARGV[0]" or die "couldn't write `$ARGV[0]': $!";
660b443c 67
68print OUT <<EOF;
69/* -*-c-*-
70 *
71 * algs.c [generated]
72 */
73
74#include "catacomb-perl.h"
75
660b443c 76EOF
fcd15e0b 77print OUT cross("#include <catacomb/", \@cipher, ".h>\n"), "\n";
660b443c 78print OUT cross("#include <catacomb/", \@cipher, "-",
a1a90aaf 79 [qw(counter ofb)], ".h>\n"), "\n";
80print OUT cross("#include <catacomb/", \@hash, "-mgf.h>\n"), "\n";
660b443c 81
660b443c 82print OUT <<EOF;
660b443c 83
84const struct randtab mgftab[] = {
85EOF
86foreach my $i (@hash) { print OUT " { \"$i\", ${i}_mgfrand },\n"; }
87print OUT <<EOF;
88 { 0, 0 }
89};
90
91const struct randtab ctrtab[] = {
92EOF
93foreach my $i (@cipher) { print OUT " { \"$i\", ${i}_counterrand },\n"; }
94print OUT <<EOF;
95 { 0, 0 }
96};
97
98const struct randtab ofbtab[] = {
99EOF
100foreach my $i (@cipher) { print OUT " { \"$i\", ${i}_ofbrand },\n"; }
101print OUT <<EOF;
102 { 0, 0 }
103};
104EOF
105
fcd15e0b 106foreach my $i (@cipher) {
107 my $I = uc($i);
108 print OUT <<EOF;
109
110static void init_$i(void *ctx, const void *k, size_t ksz) {
111 ${i}_init(ctx, k, ksz);
112}
113static void eblk_$i(const void *ctx, const void *in, void *out) {
114 uint32 w[${I}_BLKSZ / 4];
115 BLKC_LOAD(${I}, w, in);
116 ${i}_eblk(ctx, w, w);
117 BLKC_STORE(${I}, out, w);
118}
119static void dblk_$i(const void *ctx, const void *in, void *out) {
120 uint32 w[${I}_BLKSZ / 4];
121 BLKC_LOAD(${I}, w, in);
122 ${i}_dblk(ctx, w, w);
123 BLKC_STORE(${I}, out, w);
124}
125static PRPClass prp_$i = {
126 "$i",
127 ${i}_keysz, sizeof(${i}_ctx), ${I}_BLKSZ,
128 init_$i, eblk_$i, dblk_$i
129};
130EOF
131}
132
133print OUT <<EOF;
134
135PRPClass *const prptab[] = {
136EOF
137foreach my $i (@cipher) {
138 print OUT " &prp_$i,\n";
139}
140print OUT " 0\n};\n";
141
660b443c 142#----- That's all, folks ----------------------------------------------------