www.pudn.com > d3des.rar > enkeys.c
/* enkeys.c - * A simple DES calculator. * Graven Imagery. * * Copyright (c) 1988,1989,1990,1991,1992 Richard Outerbridge */ #include#include #include #include "d3des.h" /* * 1. Define for triple keys, single text ---> #define D3DES * 2. Define for triple keys, single text ---> #define D3DDES * 3. single-length keys, single-length text--> if D3DES and D3DDES not defined */ #define D3DDES extern int main(void); extern void put8hex(unsigned char *); extern void get8hex(unsigned char *); extern void put16hex(unsigned char *); extern void get16hex(unsigned char *); extern void put24hex(unsigned char *); extern void get24hex(unsigned char *); extern int getone(void); #ifdef D3DES #define primer(a,b) des3key((a),(b)) #define docryp(a,b) Ddes((a),(b)) #define getkey(a) get24hex((a)) #define putkey(a) put24hex((a)) #define getptx(a) get8hex((a)) #define putptx(a) put8hex((a)) char Welcome[] = "EDE 3/1 DES encryptor. In response\n"; char Keyform[] = "\tKey: xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx (24 pairs hex)\n"; char Txtform[] = "\tInput: xx xx xx xx xx xx xx xx (8 pairs hex)\n"; #else #ifdef D3DDES #define primer(a,b) des3key((a),(b)) #define docryp(a,b) D2des((a),(b)) #define getkey(a) get24hex((a)) #define putkey(a) put24hex((a)) #define getptx(a) get16hex((a)) #define putptx(a) put16hex((a)) char Welcome[] = "EDE 3/2 DES encryptor. In response\n"; char Keyform[] = "\tKey: xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx (24 pairs hex)\n"; char Txtform[] = "\tInput: xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx (16 pairs hex)\n"; #else #define primer(a,b) deskey((a),(b)) #define docryp(a,b) des((a),(b)) #define getkey(a) get8hex((a)) #define putkey(a) put8hex((a)) #define getptx(a) get8hex((a)) #define putptx(a) put8hex((a)) char Welcome[] = "Simple 1/1 DES encryptor. In response\n"; char Keyform[] = "\tKey: xx xx xx xx xx xx xx xx (8 pairs hex)\n"; char Txtform[] = "\tInput: xx xx xx xx xx xx xx xx (8 pairs hex)\n"; #endif #endif int main(void) { unsigned char block[16]; unsigned char key2[24]; int endeflg; int val; int mode; fprintf(stdout, "%s", Welcome); fprintf(stdout, "to the prompts, enter - \n\n"); fprintf(stdout, "\tEn/De: [edsxq] (encrypt decrypt show quit)\n"); fprintf(stdout, "%s", Keyform); fprintf(stdout, "%s", Txtform); for(;;) { fprintf(stdout, "\n\tEn/De: "); mode = getone(); switch( mode ) { case 'e': endeflg = 0; break; case 'd': endeflg = 1; break; case 's' : fprintf(stdout, "\tKey: "); putkey(key2); fprintf(stdout, "\tOutput: "); putptx(block); continue; case 'q' : fprintf(stdout, "\nSo long for now, folks!\n"); exit(0); default: continue; } fprintf(stdout, "\tKey: "); getkey(key2); primer(key2, endeflg); fprintf(stdout, "\tInput: "); getptx(block); docryp(block, block); fprintf(stdout, "\tOutput: "); putptx(block); } return( 0 ); } void put8hex(block) unsigned char *block; { int val; int out1; int out2; for( val=0; val<4; val++ ) { out1 = *block++; out2 = *block++; fprintf(stdout, "%02x%02x ", out1&0377, out2&0377); } putc('\n', stdout); return; } void get8hex(into) unsigned char *into; { int val; int in; for( val = 0; val < 8; val++ ) { if( scanf("%2x", &in) == 0 ) { getc(stdin); return; } into[val] = in&0377; } return; } int getone(void) { int val; while( ((val = getc(stdin)) == '\r') || (val == '\n') ); if( val!=EOF && isupper(val) ) val = tolower(val); return(val); } void put16hex(block) unsigned char *block; { int val; int out1; int out2; for( val=0; val<8; val++ ) { out1 = *block++; out2 = *block++; fprintf(stdout, "%02x%02x ", out1&0377, out2&0377); } putc('\n', stdout); return; } void get16hex(into) unsigned char *into; { int val; int in; for( val=0; val<16; val++ ) { if( scanf("%2x", &in) == 0 ) { getc(stdin); return; } into[val] = in&0377; } return; } void put24hex(block) unsigned char *block; { int val; int out1; int out2; for( val=0; val<12; val++ ) { out1 = *block++; out2 = *block++; fprintf(stdout, "%02x%02x ", out1&0377, out2&0377); } putc('\n', stdout); return; } void get24hex(into) unsigned char *into; { int val, in; for( val = 0; val < 24; val++ ) { if( scanf("%2x", &in) == 0 ) { getc(stdin); return; } into[val] = in&0377; } return; }