> But it
> would appear that
> this is the hard way to do it and have heard
> numerous recommendations to
> instead use the EVP API, but I have found minimal
> examples on how to do
> this. Does anyone have some sample code?? And also I
I had sent one few days ago. I am sending it again.
HTH,
Girish
> did find one
> example on the web from a project call cfengine that
> uses EVP but when
> compiling gives me LOTS of linker errors (linking
> against libeay32MD.lib
> or ssleay32MD.lib) which I acquired via the
> precompiled binaries from
> Shining Light Productions
> http://www.slproweb.com/products/Win32OpenSSL.html
> which is version
> 0.9.8b are there any known issues with these, they
> linked fine when I
> was going with the AES_encrypt/decrypt aes.h
> approach.
>
> Thanks in Advance,
>
> AJ
>
______________________________________________________________________
> OpenSSL Project
> http://www.openssl.org
> User Support Mailing List
> [email protected]
> Automated List Manager
> [EMAIL PROTECTED]
>
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
#include <fcntl.h>
#include <unistd.h>
#include <openssl/evp.h>
#define IV "0xdeadbeefdeadbeef"
int main(int argc, char **argv) {
EVP_CIPHER_CTX ctx;
unsigned char key[1024],iv[1024],ibuf[1024],obuf[1024];
int rfd, wfd,keyfd,ilen,olen,tlen;
int l = 0;
if(argc < 3) {
printf("Usage: %s infile outfile\n",argv[0]);
exit(128);
}
memcpy(iv,IV,sizeof(IV));
key[0] = 0;
/* Let us derive a random 256 bit key */
while(l < 32) {
char b[128];
sprintf(b,"%lu",arc4random());
strcat(key,b);
l = strlen(key);
}
keyfd = creat(".key",0644);
write(keyfd,key,256);
close(keyfd);
EVP_CIPHER_CTX_init(&ctx);
if(!EVP_CipherInit_ex(&ctx, EVP_aes_256_cbc(),NULL,key, iv,1) ) {
printf("Couldnt initialize cipher\n");
return 1;
}
/* 1 for encrypt, 0 for decrypt */
if((rfd = open(argv[1],O_RDONLY) ) == -1) {
printf("Couldnt open input file\n");
exit(128);
}
if((wfd = creat(argv[2],0644) ) == -1) {
printf("Couldn't open output file for writing\n");
exit(128);
}
while((ilen = read(rfd,ibuf,1024) ) > 0) {
if(EVP_CipherUpdate(&ctx,obuf,&olen,ibuf,ilen)){
write(wfd,obuf,olen);
}
else {
printf("Encryption error\n");
return 1;
}
}
if(!EVP_CipherFinal_ex(&ctx,obuf+olen,&tlen)) {
printf("Trouble with padding the last block\n");
return 1;
}
write(wfd,obuf+olen,tlen);
EVP_CIPHER_CTX_cleanup(&ctx);
close(rfd);
close(wfd);
printf("AES 256 CBC encryption complete\n");
printf("Secret key is saved to file .key\n");
return 0;
}