cryptest

Cryptography-related scribbles
git clone git://git.finwo.net/misc/cryptest
Log | Files | Refs

main.c (1842B)


      1 #ifdef __cplusplus
      2 extern "C" {
      3 #endif
      4 
      5 #include <stdio.h>
      6 #include <unistd.h>
      7 
      8 #include "base.h"
      9 
     10 int usage( char *name ) {
     11   fprintf(stderr, "\n"
     12                   "Usage:\n"
     13                   "  %s -h\n"
     14                   "  %s [-e|-d] [-t mul] [-m mod] [-p pad]\n", name, name );
     15   fprintf(stderr, "\n"
     16                   "Options:\n"
     17                   "  -d  Decrypt stdin\n"
     18                   "  -e  Encrypt stdin\n"
     19                   "  -h  Show this usage\n"
     20                   "  -t  Set the multiplicand (default: 13)\n"
     21                   "  -m  Set the modulo (>=128) (default: 66066)\n"
     22                   "  -p  Set the padding in bytes (>=1) (default: 1)\n");
     23   fprintf(stderr, "\n");
     24   return 0;
     25 }
     26 
     27 int main( int argc, char **argv ) {
     28   int opt;
     29 
     30   unsigned int mult = 13, modulo = 66066, padding = 1;
     31   char mode = 0;
     32   unsigned long long vercode = 0;
     33 
     34   setvbuf(stdout,NULL,_IONBF,0);
     35   
     36   while((opt=getopt(argc,argv,"deht:m:p:"))!=-1) {
     37     switch(opt) {
     38       case 'e':
     39         mode = 1;
     40         break;
     41       case 'd':
     42         mode = 2;
     43         break;
     44       case 't':
     45         mult = atoui( optarg );
     46         break;
     47       case 'm':
     48         modulo = atoui( optarg );
     49         if ( modulo < 128 ) {
     50           fprintf(stderr, "Modulo must be >= 128\n");
     51           return 3;
     52         }
     53         break;
     54       case 'p':
     55         padding = atoui( optarg );
     56         if ( padding < 1 ) {
     57           fprintf(stderr, "Padding must be >= 1\n");
     58           return 4;
     59         }
     60         break;
     61       case 'h':
     62         return usage( *argv );
     63       default:
     64         fprintf(stderr,"Run '%s -h' for usage.\n", *argv);
     65         return 1;
     66     }
     67   }
     68 
     69   switch(mode) {
     70     case 1: return encrypt( mult, modulo, padding );
     71     case 2: return decrypt( mult, modulo, padding );
     72   }
     73 
     74   usage( *argv );
     75   return 2;
     76 }
     77 
     78 #ifdef __cplusplus
     79 } // extern "C"
     80 #endif