okidokey, the code is attached. The encryption/decryption function is in do_crypt.c
thanks Stella On Mon, May 27, 2002 at 06:03:46PM +0200, Aleix Conchillo wrote: > hi stella, > > could you please post your sample code? > > best regards, > > aleix > > ______________________________________________________________________ > OpenSSL Project http://www.openssl.org > User Support Mailing List [EMAIL PROTECTED] > Automated List Manager [EMAIL PROTECTED]
OPENSSLDIR=/usr/local/ssl LIBS = -lm -L$(OPENSSLDIR) -lssl -lcrypto -lefence oflags = -c CFLAGS = -pedantic -ansi -W -Wall -g CC = gcc exec = crypt default: main.o do_crypt.o parse_keyfile.o $(CC) -o ${exec} main.o do_crypt.o parse_keyfile.o -o crypt ${LIBS} main.o: main.c do_crypt.c parse_keyfile.c header.h ${CC} -c ${CFLAGS} ${INCDIR} main.c do_crypt.c parse_keyfile.c clean: rm -f core *.o
#include "header.h" #define EVP_MAX_BLOCK_LENGTH 6 FILE *out; char* do_crypt(char *i_p, int docrypt) { unsigned char outbuf[1024+EVP_MAX_BLOCK_LENGTH]; unsigned char outbuf_final[1024]; int outlen, inlen; unsigned char iv[] = "12345678"; EVP_CIPHER_CTX ctx; inlen = strlen(i_p); EVP_CIPHER_CTX_init(&ctx); EVP_CipherInit(&ctx, EVP_des_ede3(), NULL, NULL, docrypt); EVP_CIPHER_CTX_set_key_length(&ctx, key_length); EVP_CipherInit(&ctx, NULL, key, iv, docrypt); if(!EVP_CipherUpdate(&ctx, outbuf, &outlen, (unsigned char *)i_p, inlen)) { fprintf(stderr, "Error crypting in EVP_CipherUpdate\n"); exit(10); } if(!EVP_CipherFinal(&ctx, outbuf_final, &outlen)) { fprintf(stderr, "Error crypting in EVP_CipherFinal\n"); exit(11); } sprintf(return_out,"%s%s", outbuf, outbuf_final); fwrite(return_out,1,outlen, stdout); fwrite("\n",1,1,stdout); EVP_CIPHER_CTX_cleanup(&ctx); return return_out; }
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <getopt.h> #include <sys/syslog.h> #include <sys/stat.h> #include <errno.h> #include <unistd.h> #include <fcntl.h> #include <sys/mman.h> #include <sys/types.h> #include <openssl/des.h> #include <openssl/evp.h> #include <openssl/sha.h> #define BUFSIZE 1024 struct stat tmp; int f_map_encrypt_p; FILE *f_session_key_p; char *session_key_filename; char *current_line; char *edata_a, *edata_b; char *data_a, *data_b; int docrypt; int key_length; char *session_key; unsigned char key[BUFSIZE]; char *return_out; char* parse_keyfile(char *current_line); char* do_crypt(char *i_p, int docrypt);
key : 64556564446546465546546444555665
#include "header.h" int main(int argc, char** argv) { int opt, i=0, j=0; char *temp2; /* COMMAND LINE OPTION HANDLING */ while((opt = getopt(argc, argv, "k:a:b:"))!=-1) switch (opt) { case 'k': if(optarg) { session_key_filename = malloc(64); strncpy(session_key_filename, optarg, 64); if((stat(optarg, &tmp)!=0)) { fprintf(stderr,"Error: Illegal filename for keyfile\n"); exit(1); } } break; case 'a': if(optarg) { edata_a = malloc(64); strncpy(edata_a, optarg, 64); } break; case 'b': if(optarg) { edata_b = malloc(64); strncpy(edata_b, optarg, 64); } break; case '?': default: printf("Usage: -k session_key_file\n"); exit(2); } printf("0: %s\t1: %s\n", edata_a, edata_b); if (!session_key_filename) { fprintf(stderr, "Error: Missing option -k\n"); printf("Usage: -k session_key_file\n"); exit(4); } if((return_out =(char *)malloc((BUFSIZE)*sizeof(char)))==NULL) { fprintf(stderr, "Error: malloc error\n"); exit(8); } /* IN HERE GOES DECRYPTION OF PINS */ if((current_line =(char *)malloc(BUFSIZE*sizeof(char)))==NULL) { fprintf(stderr, "Error: malloc error\n"); exit(8); } /* read in session key from file */ if((f_session_key_p=fopen(session_key_filename, "r"))==NULL) { fprintf(stderr,"\nError reading %s\n", session_key_filename); exit(5); } printf("Reading key from '%s'...\n", session_key_filename); j = 0; /* Read in lines, skip blank lines*/ while(j!=1) { fgets(current_line, BUFSIZE*sizeof(char), f_session_key_p); if(strcmp(current_line,"\n")==0) { /* set flag to skip blank line*/ j = 0; } else { j = 1; session_key = parse_keyfile(current_line); key_length = strlen(session_key); printf("...session_key : %s\n", session_key); printf("...key length: %d\n", key_length); } } sprintf((char*)key, "%s", (unsigned char*)session_key); /* crypt data */ printf("\ni : %d\n", i); printf("Encrypting data...\n"); printf("edata : %s\n", edata_a); temp2 = do_crypt(edata_a, 1); edata_a = temp2; printf("Decrypting data...\n"); temp2 = do_crypt(edata_a, 0); data_a = temp2; i++; printf("\ni : %d\n", i); printf("Encrypting data...\n"); printf("edata : %s\n", edata_b); temp2 = do_crypt(edata_b, 1); edata_b = temp2; printf("Decrypting data...\n"); temp2 = do_crypt(edata_b, 0); data_b = temp2; /* TIDYING UP */ /* freeing memory */ if( fclose(f_session_key_p) != 0) fprintf(stderr,"Error: Couldn't close session_key file: %s\n", session_key_filename); /* exiting */ exit(0); }
#include "header.h" char* parse_keyfile(char *temp) { char *ptr1, *ptr2, *ptr3; /* search for first instance of the end of a line and point ptr1 to it */ ptr1=strstr(temp, ":"); /* grab line data */ ptr1+=1; /* move pointer past ':' */ ptr1+=1; /* move pointer past ' ' */ ptr2 = strstr(ptr1,"\n"); if(ptr2==0) { printf("End of Line not found\n"); exit(6); } *ptr2='\0'; /* set what ptr2 points to, to NULL temporarily */ ptr3 = (char *)malloc(strlen(ptr1)+1); strcpy(ptr3, ptr1); *ptr2='\n'; /* set ptr2 pointing back to '\n' */ return ptr3; /* return result */ }