Пример #1
0
int get_line(TINYCLR_SSL_FILE *f,char *hash,char *filename)
	{
	int i;
	if (TINYCLR_SSL_FREAD(hash,1,64,f)<64) return 0;
	hash[64]=0;
	for (i=0;i<64;i++)
		{
		if (hash[i]<'0' || (hash[i]>'9' && hash[i]<'A') || (hash[i]>'F'
				&& hash[i]<'a')||hash[i]>'f')
			{
			TINYCLR_SSL_FPRINTF(OPENSSL_TYPE__FILE_STDERR,"Not a hash value '%s'\n",hash);
			return 0;
			}
		}	
	if (TINYCLR_SSL_FGETC(f)!=' ')
		{
		TINYCLR_SSL_FPRINTF(OPENSSL_TYPE__FILE_STDERR,"Malformed input line\n");
		return 0;
		}
	i=TINYCLR_SSL_STRLEN(TINYCLR_SSL_FGETS(filename,PATH_MAX,f));
	while (filename[--i]=='\n'||filename[i]=='\r') filename[i]=0;
	return 1;
	}	
Пример #2
0
int main(int argc, char *argv[])
	{
	TINYCLR_SSL_FILE *in=NULL,*out=NULL;
	char *infile=NULL,*outfile=NULL,*keystr=NULL;
	RC4_KEY key;
	char buf[BUFSIZ];
	int badops=0,i;
	char **pp;
	unsigned char md[MD5_DIGEST_LENGTH];

	argc--;
	argv++;
	while (argc >= 1)
		{
		if 	(TINYCLR_SSL_STRCMP(*argv,"-in") == 0)
			{
			if (--argc < 1) goto bad;
			infile= *(++argv);
			}
		else if (TINYCLR_SSL_STRCMP(*argv,"-out") == 0)
			{
			if (--argc < 1) goto bad;
			outfile= *(++argv);
			}
		else if (TINYCLR_SSL_STRCMP(*argv,"-key") == 0)
			{
			if (--argc < 1) goto bad;
			keystr= *(++argv);
			}
		else
			{
			TINYCLR_SSL_FPRINTF(OPENSSL_TYPE__FILE_STDERR,"unknown option %s\n",*argv);
			badops=1;
			break;
			}
		argc--;
		argv++;
		}

	if (badops)
		{
bad:
		for (pp=usage; (*pp != NULL); pp++)
			TINYCLR_SSL_FPRINTF(OPENSSL_TYPE__FILE_STDERR,"%s",*pp);
		TINYCLR_SSL_EXIT(1);
		}

	if (infile == NULL)
		in=OPENSSL_TYPE__FILE_STDIN;
	else
		{
		in=TINYCLR_SSL_FOPEN(infile,"r");
		if (in == NULL)
			{
			TINYCLR_SSL_PERROR("open");
			TINYCLR_SSL_EXIT(1);
			}

		}
	if (outfile == NULL)
		out=OPENSSL_TYPE__FILE_STDOUT;
	else
		{
		out=TINYCLR_SSL_FOPEN(outfile,"w");
		if (out == NULL)
			{
			TINYCLR_SSL_PERROR("open");
			TINYCLR_SSL_EXIT(1);
			}
		}
		
#ifdef OPENSSL_SYS_MSDOS
	/* This should set the file to binary mode. */
	{
#include <fcntl.h>
	setmode(TINYCLR_SSL_FILENO(in),O_BINARY);
	setmode(TINYCLR_SSL_FILENO(out),O_BINARY);
	}
#endif

	if (keystr == NULL)
		{ /* get key */
		i=EVP_read_pw_string(buf,BUFSIZ,"Enter RC4 password:"******"bad password read\n");
			TINYCLR_SSL_EXIT(1);
			}
		keystr=buf;
		}

	EVP_Digest((unsigned char *)keystr,TINYCLR_SSL_STRLEN(keystr),md,NULL,EVP_md5(),NULL);
	OPENSSL_cleanse(keystr,TINYCLR_SSL_STRLEN(keystr));
	RC4_set_key(&key,MD5_DIGEST_LENGTH,md);
	
	for(;;)
		{
		i=TINYCLR_SSL_FREAD(buf,1,BUFSIZ,in);
		if (i == 0) break;
		if (i < 0)
			{
			TINYCLR_SSL_PERROR("read");
			TINYCLR_SSL_EXIT(1);
			}
		RC4(&key,(unsigned int)i,(unsigned char *)buf,
			(unsigned char *)buf);
		i=TINYCLR_SSL_FWRITE(buf,(unsigned int)i,1,out);
		if (i != 1)
			{
			TINYCLR_SSL_PERROR("write");
			TINYCLR_SSL_EXIT(1);
			}
		}
	TINYCLR_SSL_FCLOSE(out);
	TINYCLR_SSL_FCLOSE(in);
	TINYCLR_SSL_EXIT(0);
	return(1);
	}