addrutil: Re-indent.
[wk-misc.git] / xor.c
1 /* xor - Extremly sophisticated encryption system
2  * Copyright (C) 2011 Werner Koch (dd9jn)
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, see <http://www.gnu.org/licenses/>.
16  */
17
18 #include <stdio.h>
19 #include <stdlib.h>
20 #include <string.h>
21
22 int
23 main (int argc, char **argv )
24 {
25   const unsigned char *key;
26   int c, keyidx, keylen;
27   unsigned char val;
28
29   if ( argc != 2 )
30     {
31       fputs ("usage: xor KEYSTRING < input\n", stderr);
32       return 1;
33     }
34
35   key = (const unsigned char *)argv[1];
36   keylen = strlen ((const char*)key);
37   keyidx = 0;
38
39   while ( (c=getchar ()) != EOF )
40     {
41       val = (c & 0xff);
42       if (keylen)
43         {
44           val ^= key[keyidx++];
45           if (keyidx >= keylen)
46             keyidx = 0;
47         }
48       putchar (val);
49     }
50   if (ferror (stdin))
51     {
52       fputs ("xor: read error\n", stderr);
53       return 1;
54     }
55   if (fflush (stderr) || ferror (stdout))
56     {
57       fputs ("xor: write error\n", stderr);
58       return 1;
59     }
60
61   return 0;
62 }
63
64 /*
65 Local Variables:
66 compile-command: "cc -Wall -o xor xor.c"
67 End:
68 */