* NEWS: Note SHA-224 and DSA2.
[gnupg.git] / tools / bftest.c
1 /* bftest.c - Blowfish test program
2  *      Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
3  *
4  * This file is part of GnuPG.
5  *
6  * GnuPG is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * GnuPG is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
19  * USA.
20  */
21
22 #include <config.h>
23 #include <stdio.h>
24 #include <stdlib.h>
25 #include <string.h>
26 #ifdef HAVE_DOSISH_SYSTEM
27 #include <io.h>
28 #include <fcntl.h>
29 #endif
30
31 #include "util.h"
32 #include "cipher.h"
33 #include "i18n.h"
34
35 static void
36 my_usage(void)
37 {
38     fprintf(stderr, "usage: bftest [-e][-d] algo key\n");
39     exit(1);
40 }
41
42 const char *
43 strusage( int level )
44 {
45     return default_strusage(level);
46 }
47
48 static void
49 i18n_init(void)
50 {
51 #ifdef ENABLE_NLS
52   setlocale( LC_ALL, "" );
53   bindtextdomain( PACKAGE, G10_LOCALEDIR );
54   textdomain( PACKAGE );
55 #endif
56 }
57
58 int
59 main(int argc, char **argv)
60 {
61     int encode=0;
62     CIPHER_HANDLE hd;
63     char buf[4096];
64     int n, size=4096;
65     int algo;
66
67 #ifdef HAVE_DOSISH_SYSTEM
68     setmode( fileno(stdin), O_BINARY );
69     setmode( fileno(stdout), O_BINARY );
70 #endif
71
72     i18n_init();
73     if( argc > 1 && !strcmp(argv[1], "-e") ) {
74         encode++;
75         argc--; argv++;
76     }
77     else if( argc > 1 && !strcmp(argv[1], "-E") ) {
78         encode++;
79         argc--; argv++;
80         size = 10;
81     }
82     else if( argc > 1 && !strcmp(argv[1], "-d") ) {
83         argc--; argv++;
84     }
85     else if( argc > 1 && !strcmp(argv[1], "-D") ) {
86         argc--; argv++;
87         size = 10;
88     }
89     if( argc != 3 )
90         my_usage();
91     argc--; argv++;
92     algo = string_to_cipher_algo( *argv );
93     argc--; argv++;
94
95     hd = cipher_open( algo, CIPHER_MODE_CFB, 0 );
96     cipher_setkey( hd, *argv, strlen(*argv) );
97     cipher_setiv( hd, NULL, 0 );
98     while( (n = fread( buf, 1, size, stdin )) > 0 ) {
99         if( encode )
100             cipher_encrypt( hd, buf, buf, n );
101         else
102             cipher_decrypt( hd, buf, buf, n );
103         if( fwrite( buf, 1, n, stdout) != n )
104             log_fatal("write error\n");
105     }
106     cipher_close(hd);
107     return 0;
108 }