Much wider support for Catacomb in all its glory.
[catacomb-perl] / algs.PL
diff --git a/algs.PL b/algs.PL
index 26c1fe3..cab2dc5 100644 (file)
--- a/algs.PL
+++ b/algs.PL
@@ -62,7 +62,7 @@ sub cross {
   return @$x;
 }
 
-open OUT, "> $ARGV[0]" or die "couldn't write `$ARGV[0].c': $!";
+open OUT, "> $ARGV[0]" or die "couldn't write `$ARGV[0]': $!";
 
 print OUT <<EOF;
 /* -*-c-*-
@@ -73,6 +73,7 @@ print OUT <<EOF;
 #include "catacomb-perl.h"
 
 EOF
+print OUT cross("#include <catacomb/", \@cipher, ".h>\n"), "\n";
 print OUT cross("#include <catacomb/", \@cipher, "-",
                [qw(counter ofb)], ".h>\n"), "\n";
 print OUT cross("#include <catacomb/", \@hash, "-mgf.h>\n"), "\n";
@@ -101,4 +102,40 @@ print OUT <<EOF;
 };
 EOF
 
+foreach my $i (@cipher) {
+  my $I = uc($i);
+  print OUT <<EOF;
+
+static void init_$i(void *ctx, const void *k, size_t ksz) {
+  ${i}_init(ctx, k, ksz);
+}
+static void eblk_$i(const void *ctx, const void *in, void *out) {
+  uint32 w[${I}_BLKSZ / 4];
+  BLKC_LOAD(${I}, w, in);
+  ${i}_eblk(ctx, w, w);
+  BLKC_STORE(${I}, out, w);
+}
+static void dblk_$i(const void *ctx, const void *in, void *out) {
+  uint32 w[${I}_BLKSZ / 4];
+  BLKC_LOAD(${I}, w, in);
+  ${i}_dblk(ctx, w, w);
+  BLKC_STORE(${I}, out, w);
+}
+static PRPClass prp_$i = {
+  "$i",
+  ${i}_keysz, sizeof(${i}_ctx), ${I}_BLKSZ,
+  init_$i, eblk_$i, dblk_$i
+};
+EOF
+}
+
+print OUT <<EOF;
+
+PRPClass *const prptab[] = {
+EOF
+foreach my $i (@cipher) {
+  print OUT "  &prp_$i,\n";
+}
+print OUT "  0\n};\n";
+
 #----- That's all, folks ----------------------------------------------------