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;
}