chiark / gitweb /
Add fill for encryption schemes.
[catacomb-perl] / Cipher.pl
1 #! /usr/bin/perl
2
3 @cipher = qw(blowfish cast128 cast256 des des3 idea rc2 rc5 rijndael serpent
4              skipjack square tea twofish xtea);
5 @streams = qw(rc4 seal);
6 @hash = qw(md5 md4 md2 tiger
7            sha sha256 sha384 sha512 
8            rmd128 rmd160 rmd256 rmd320);
9
10 sub enum {
11   $x = shift;
12   if (!ref($x)) { return $x; }
13   elsif (ref($x) eq ARRAY) { return @$x }
14   else { die "bad ref"; }
15 }
16
17 sub cross {
18   my $x = [];
19   foreach my $i (@_) {
20     my @y = enum($i);
21     if (@$x) {
22       my @x = ();
23       foreach my $j (@$x) { foreach my $k (@y) { push(@x, $j.$k); } }
24       $x = \@x;
25     } else {
26       $x = \@y;
27     }
28   }
29   return @$x;
30 }
31
32 print <<EOF;
33 /* -*-c-*-
34  *
35  * Cipher.xs [generated]
36  */
37
38 #include <assert.h>
39
40 #include <EXTERN.h>
41 #include <perl.h>
42 #include <XSUB.h>
43
44 #include <catacomb/gcipher.h>
45
46 EOF
47 print cross("#include <catacomb/", \@cipher, "-",
48             [qw(ecb cbc cfb counter ofb)], ".h>\n"), "\n";
49 print cross("#include <catacomb/", \@hash, ".h>\n"), "\n";
50 print cross("#include <catacomb/", \@hash, "-",
51             [qw(mgf hmac)], ".h>\n"), "\n";