M
makobu
/*
*
*************************************************************************************
* Bare bones program to encrypt and decrypt a file using
mcrypt:serpent *
* Proverbs
25-2
*
* Timothy Makobu, 21st-22nd january,
2007 *
* Make: cc -Wall -O2 -o executable file.c -
lmcrypt *
*
*************************************************************************************
*/
#include <stdio.h>
#include <stdlib.h>
#include <mcrypt.h>
#include <string.h>
/* The help function */
void help(char *name)
{
printf("usage: %s [option: e > encrypt; d > decrypt] file\n",
name);
}
/* File opener */
FILE *open_file(char *path)
{
FILE *infile;
if((infile = fopen(path, "r")) == NULL)
{
fprintf(stderr, "cannot open %s\n",path);
exit(-1);
}
else
return infile;
}
/* crypto */
int crypto(FILE *infile, char *action, char *name)
{
MCRYPT td;
int i;
char * key;
char password[20];
char pass_test[100];
char block_buffer;
char *IV;
int keysize = 19;
key = calloc(1,keysize);
printf("Password[maximum_20 characters]: ");
scanf("%s", pass_test);
strncpy(password, pass_test, 20);
memmove(key, password, strlen(password));
td = mcrypt_module_open("serpent", NULL, "cfb", NULL);
if(td == MCRYPT_FAILED)
return 1;
IV = malloc(mcrypt_enc_get_iv_size(td));
for(i=0; i<mcrypt_enc_get_iv_size(td); i++)
IV = rand();
i = mcrypt_generic_init(td, key, keysize, IV);
if(i<0)
{
mcrypt_perror(i);
return 1;
}
/* Encrypt/Decrypt */
while(fread(&block_buffer, 1, 1, infile) == 1)
{
if(strcmp(action,"e") == 0)
{
mcrypt_generic(td, &block_buffer, 1);
FILE *fname = fopen("encrypted", "a+b");
fwrite(&block_buffer, 1, 1, fname);
fclose(fname);
}
else if(strcmp(action,"d") == 0)
{
mdecrypt_generic (td, &block_buffer, 1);
FILE *fname = fopen("decrypted", "a+b");
fwrite(&block_buffer, 1, 1, fname);
fclose(fname);
}
}
return 0;
}
int main(int argc, char *argv[])
{
char *encrypt = "e";
char *decrypt = "d";
if(argc != 3)
{
help(argv[0]);
printf("%d",1);
exit(-1);
}
else if(!(strcmp(argv[1], encrypt) == 0 || strcmp(argv[1],decrypt)
== 0))
{
help(argv[0]);
printf("%d",2);
exit(-1);
}
if(crypto(open_file(argv[2]), argv[1], argv[2]) != 0)
fprintf(stderr, "Something went wrong
, exiting ...\n");
exit(0);
}
/* EOC */
*
*************************************************************************************
* Bare bones program to encrypt and decrypt a file using
mcrypt:serpent *
* Proverbs
25-2
*
* Timothy Makobu, 21st-22nd january,
2007 *
* Make: cc -Wall -O2 -o executable file.c -
lmcrypt *
*
*************************************************************************************
*/
#include <stdio.h>
#include <stdlib.h>
#include <mcrypt.h>
#include <string.h>
/* The help function */
void help(char *name)
{
printf("usage: %s [option: e > encrypt; d > decrypt] file\n",
name);
}
/* File opener */
FILE *open_file(char *path)
{
FILE *infile;
if((infile = fopen(path, "r")) == NULL)
{
fprintf(stderr, "cannot open %s\n",path);
exit(-1);
}
else
return infile;
}
/* crypto */
int crypto(FILE *infile, char *action, char *name)
{
MCRYPT td;
int i;
char * key;
char password[20];
char pass_test[100];
char block_buffer;
char *IV;
int keysize = 19;
key = calloc(1,keysize);
printf("Password[maximum_20 characters]: ");
scanf("%s", pass_test);
strncpy(password, pass_test, 20);
memmove(key, password, strlen(password));
td = mcrypt_module_open("serpent", NULL, "cfb", NULL);
if(td == MCRYPT_FAILED)
return 1;
IV = malloc(mcrypt_enc_get_iv_size(td));
for(i=0; i<mcrypt_enc_get_iv_size(td); i++)
IV = rand();
i = mcrypt_generic_init(td, key, keysize, IV);
if(i<0)
{
mcrypt_perror(i);
return 1;
}
/* Encrypt/Decrypt */
while(fread(&block_buffer, 1, 1, infile) == 1)
{
if(strcmp(action,"e") == 0)
{
mcrypt_generic(td, &block_buffer, 1);
FILE *fname = fopen("encrypted", "a+b");
fwrite(&block_buffer, 1, 1, fname);
fclose(fname);
}
else if(strcmp(action,"d") == 0)
{
mdecrypt_generic (td, &block_buffer, 1);
FILE *fname = fopen("decrypted", "a+b");
fwrite(&block_buffer, 1, 1, fname);
fclose(fname);
}
}
return 0;
}
int main(int argc, char *argv[])
{
char *encrypt = "e";
char *decrypt = "d";
if(argc != 3)
{
help(argv[0]);
printf("%d",1);
exit(-1);
}
else if(!(strcmp(argv[1], encrypt) == 0 || strcmp(argv[1],decrypt)
== 0))
{
help(argv[0]);
printf("%d",2);
exit(-1);
}
if(crypto(open_file(argv[2]), argv[1], argv[2]) != 0)
fprintf(stderr, "Something went wrong
exit(0);
}
/* EOC */