Hi
I'm having troubles using libcrypto in a shared library. Here is what I
did:
1. I'm on RedHat 7.2
2. I installed OpenSSL by "./config shared" and got
/usr/local/ssl/lib/libcrypto.so
3. I wrote a sample library calling EVA functions (the library source
attached below - decrypt.c)
4. I compiled the decrypt.c as follows:
gcc -fpic -c decrypt.c -o decrypt.o -I/usr/local/ssl/include
gcc -shared decrypt.o -o libdecrypt.so -L/usr/local/ssl/lib -lcrypto
5. I added current and the OpenSSL directories to the library path:
LD_LIBRARY_PATH=$(pwd):/usr/local/ssl/lib
When I try to run the testlib program (source attached below) the program
fails on dlopen()
Could someone please advise, what am I doing wrong?
Thanks in advance
// decrypt.c
#include "testlib.h"
#include <stdio.h> #include <openssl/evp.h> #include <fcntl.h> int test_decrypt(){
int > int encfd;
unsigned char outbuf[1032]; int olen, tlen, n; char inbuff[1032]; EVP_CIPHER_CTX ctx; unsigned char key[16]; unsigned char iv[8]; char *encfile = "blowfish_enc"; memset (&key, 0, 16);
memset (&iv, 0, 8); strcpy(key,"1234567890123456"); strcpy(iv,"12345678"); if ((encfd = open (encfile, O_RDONLY)) == -1) { return onerr; } memset (&inbuff, 0, sizeof(inbuff)); if ((n = read (encfd, inbuff, sizeof(inbuff))) == -1) { close(encfd); return onerr; } close (encfd); EVP_CIPHER_CTX_init (&ctx);
EVP_DecryptInit (&ctx, EVP_bf_cbc (), key, iv); memset (&outbuf, 0, sizeof(outbuf));
if (EVP_DecryptUpdate (&ctx, outbuf, &olen, inbuff, n) != 1) { return onerr; } if (EVP_DecryptFinal (&ctx, outbuf + olen, &tlen) != 1) { return onerr; } olen += tlen; printf("Output: %s", outbuf);
return 0;
} // testlib.c
#include <stdio.h>
#include <stdlib.h> #include <unistd.h> #include <dlfcn.h> int main(int argc, char **argv)
{ void *handle; int (*test_decrypt)(void); char *c; handle = dlopen("libdecrypt.so", 1);
c = dlerror(); if(c) { fprintf(stderr, "couldnt open library\n"); abort(); } test_decrypt = dlsym(handle, "test_decrypt"); c = dlerror(); if(c) { fprintf(stderr, "couldnt get function symbol\n"); abort(); } test_decrypt(); dlclose(handle); return 0; } |
- Using libcrypto in a shared library Boris