chiark / gitweb /
primeiter: New functions for iterating over small primes.
[catacomb] / safer-mktab.c
1 /* -*-c-*-
2  *
3  * $Id: safer-mktab.c,v 1.2 2004/04/08 01:36:15 mdw Exp $
4  *
5  * Generate tables for SAFER
6  *
7  * (c) 2001 Straylight/Edgeware
8  */
9
10 /*----- Licensing notice --------------------------------------------------*
11  *
12  * This file is part of Catacomb.
13  *
14  * Catacomb is free software; you can redistribute it and/or modify
15  * it under the terms of the GNU Library General Public License as
16  * published by the Free Software Foundation; either version 2 of the
17  * License, or (at your option) any later version.
18  *
19  * Catacomb 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 Library General Public License for more details.
23  *
24  * You should have received a copy of the GNU Library General Public
25  * License along with Catacomb; if not, write to the Free
26  * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
27  * MA 02111-1307, USA.
28  */
29
30 /*----- Header files ------------------------------------------------------*/
31
32 #include <stdio.h>
33 #include <stdlib.h>
34
35 #include <mLib/bits.h>
36
37 /*----- Main code ---------------------------------------------------------*/
38
39 int main(void)
40 {
41   octet s[256], si[256];
42   unsigned x, i;
43
44   x = 1;
45   for (i = 0; i < 256; i++) {
46     if (x < 256) {
47       s[i] = x;
48       si[x] = i;
49     }
50     x = (x * 45)%257;
51   }
52   s[128] = 0;
53   si[0] = 128;
54
55   fputs("\
56 /* -*-c-*-\n\
57  *\n\
58  * SAFER tables [generated]\n\
59  */\n\
60 \n\
61 #ifndef CATACOMB_SAFER_TAB_H\n\
62 #define CATACOMB_SAFER_TAB_H\n\
63 \n\
64 ", stdout);
65
66   fputs("\
67 /* --- S-boxes --- */\n\
68 \n\
69 #define SAFER_S {                                                       \\\n\
70   ", stdout);
71   for (i = 0; i < 256; i++) {
72     printf("0x%02x", s[i]);
73     if (i == 255)
74       fputs("                   \\\n}\n\n", stdout);
75     else if ((i + 1)%8 == 0)
76       fputs(",                  \\\n  ", stdout);
77     else
78       fputs(", ", stdout);
79   }
80
81   fputs("\
82 #define SAFER_SI {                                                      \\\n\
83   ", stdout);
84   for (i = 0; i < 256; i++) {
85     printf("0x%02x", si[i]);
86     if (i == 255)
87       fputs("                   \\\n}\n\n", stdout);
88     else if ((i + 1)%8 == 0)
89       fputs(",                  \\\n  ", stdout);
90     else
91       fputs(", ", stdout);
92   }
93
94   puts("#endif");
95
96   if (fclose(stdout)) {
97     fprintf(stderr, "error writing data\n");
98     exit(EXIT_FAILURE);
99   }
100
101   return (0);
102 }
103
104 /*----- That's all, folks -------------------------------------------------*/