From 7c9db249e4d94413f561841495d1e147d53327d5 Mon Sep 17 00:00:00 2001 From: Wilmer van der Gaast Date: Mon, 8 Mar 2010 02:10:41 +0000 Subject: Replaced obsolete (useless for the current .xml files) encode/decode tools with a few command-line options to the BitlBee binary. Type "bitlbee -x" for more info. --- unix.c | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 66 insertions(+), 3 deletions(-) (limited to 'unix.c') diff --git a/unix.c b/unix.c index 56b0ab46..00bea6c8 100644 --- a/unix.c +++ b/unix.c @@ -24,11 +24,15 @@ */ #include "bitlbee.h" + +#include "arc.h" +#include "base64.h" #include "commands.h" -#include "crypting.h" #include "protocols/nogaim.h" #include "help.h" #include "ipc.h" +#include "md5.h" +#include "misc.h" #include #include #include @@ -39,12 +43,17 @@ global_t global; /* Against global namespace pollution */ static void sighandler( int signal ); +static int crypt_main( int argc, char *argv[] ); + int main( int argc, char *argv[] ) { int i = 0; char *old_cwd = NULL; struct sigaction sig, old; + if( argc > 1 && strcmp( argv[1], "-x" ) == 0 ) + return crypt_main( argc, argv ); + log_init(); global.conf_file = g_strdup( CONF_FILE_DEF ); global.conf = conf_load( argc, argv ); @@ -158,6 +167,62 @@ int main( int argc, char *argv[] ) return( 0 ); } +static int crypt_main( int argc, char *argv[] ) +{ + int pass_len; + unsigned char *pass_cr, *pass_cl; + + if( argc < 3 ) + { + printf( "Supported:\n" + " %s -x enc \n" + " %s -x dec \n" + " %s -x hash \n" + " %s -x unhash \n" + " %s -x chkhash \n", + argv[0], argv[0], argv[0], argv[0], argv[0] ); + } + else if( strcmp( argv[2], "enc" ) == 0 ) + { + pass_len = arc_encode( argv[4], strlen( argv[4] ), (unsigned char**) &pass_cr, argv[3], 12 ); + printf( "%s\n", base64_encode( pass_cr, pass_len ) ); + } + else if( strcmp( argv[2], "dec" ) == 0 ) + { + pass_len = base64_decode( argv[4], (unsigned char**) &pass_cr ); + arc_decode( pass_cr, pass_len, (char**) &pass_cl, argv[3] ); + printf( "%s\n", pass_cl ); + } + else if( strcmp( argv[2], "hash" ) == 0 ) + { + md5_byte_t pass_md5[21]; + md5_state_t md5_state; + + random_bytes( pass_md5 + 16, 5 ); + md5_init( &md5_state ); + md5_append( &md5_state, (md5_byte_t*) argv[3], strlen( argv[3] ) ); + md5_append( &md5_state, pass_md5 + 16, 5 ); /* Add the salt. */ + md5_finish( &md5_state, pass_md5 ); + + printf( "%s\n", base64_encode( pass_md5, 21 ) ); + } + else if( strcmp( argv[2], "unhash" ) == 0 ) + { + printf( "Hash %s submitted to a massive Beowulf cluster of\n" + "overclocked 486s. Expect your answer next year somewhere around this time. :-)\n", argv[3] ); + } + else if( strcmp( argv[2], "chkhash" ) == 0 ) + { + int st = md5_verify_password( argv[4], argv[3] ); + + printf( "Hash %s given password.\n", st == 0 ? "matches" : "does not match" ); + + return st; + } + + return 0; +} + static void sighandler( int signal ) { /* FIXME: Calling log_message() here is not a very good idea! */ @@ -213,5 +278,3 @@ double gettime() gettimeofday( time, 0 ); return( (double) time->tv_sec + (double) time->tv_usec / 1000000 ); } - - -- cgit v1.2.3