Hello,

Usually you don't, and if you compile it against the same major release, no
problems happen.
I'd suggest you to look at the backtrace.

On Mon, Sep 20, 2021 at 3:03 AM Shariful Alam <dipto...@gmail.com> wrote:

> Hello,
> I have installed OpenSSL 1.1.1c. I'm trying to make a custom OpenSSL
> engine for RSA. The following sample code is copied from the engine
> *e_dasync.c. *
>
>
> Following is a sample code for my RSA engine (*rsa-engine.c*),
> ===================================
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> */* Engine Id and Name */static const char *engine_rsa_id =
> "rsa-engine-new";static const char *engine_rsa_name = "RSA engine for
> testing";// data encryption functionstatic int eng_rsa_pub_enc(int flen,
> const unsigned char *from, unsigned char *to, RSA *rsa, int padding) {
> printf("RSA Engine is encrypting using public key\n");    return
> RSA_meth_get_pub_enc(RSA_PKCS1_OpenSSL())
> (flen,from,to,rsa,padding);}// signature verifystatic int
> eng_rsa_pub_dec(int flen, const unsigned char *from,
>   unsigned char *to, RSA *rsa, int padding) {    printf("Signature
> verification\n");    return 0;}// signaturestatic int eng_rsa_priv_enc(int
> flen, const unsigned char *from, unsigned char *to, RSA *rsa, int
> padding){    printf("Signature method:\n");    return 0;}// data
> decryptionstatic int eng_rsa_priv_dec(int flen, const unsigned char *from,
> unsigned char *to, RSA *rsa, int padding){   printf("decryption
> method:\n");   return 0; }static RSA_METHOD *test_rsa_method = NULL;static
> int bind_dasync(ENGINE *e){    /* Setup RSA_METHOD */    if
> ((test_rsa_method = RSA_meth_new("Test RSA Engine", 0)) == NULL        ||
> RSA_meth_set_pub_enc(test_rsa_method, eng_rsa_pub_enc) == 0        ||
> RSA_meth_set_pub_dec(test_rsa_method, eng_rsa_pub_dec) == 0        ||
> RSA_meth_set_priv_enc(test_rsa_method, eng_rsa_priv_enc) == 0        ||
> RSA_meth_set_priv_dec(test_rsa_method, eng_rsa_priv_dec) == 0            )
> {        return 0;    }    /* Ensure the dasync error handling is set up
> */    if (!ENGINE_set_id(e, engine_rsa_id)        || !ENGINE_set_name(e,
> engine_rsa_name)        || !ENGINE_set_RSA(e, test_rsa_method)            )
> {        return 0;    }    return 1;}static int bind_helper(ENGINE *e,
> const char *id){    if (!bind_dasync(e)){        printf("2_Error: Inside
> Bind helper\n");        return 0;    }    return
> 1;}IMPLEMENT_DYNAMIC_BIND_FN(bind_helper)IMPLEMENT_DYNAMIC_CHECK_FN()*
> ===================================
>
> My *Makefile *looks like the following,
> ===================================
>
>
>
>
>
>
>
> *rsa-engine: gcc -g -fPIC -c rsa-engine.c gcc -g -shared -o
> librsa_engine.so -L./libdune rsa-engine.o -Bdynamic -lcrypto -lpthread mv
> librsa_engine.so rsa-engine-new.so sudo cp rsa-engine-new.so
> /opt/openssl/lib/engines-1.1/clean: rm -f *.o *.d *.so rsa-engine*
> ===================================
>
> My code compiles. When I try to do encryption using the following command,
> =========================
> *openssl rsautl -encrypt -inkey public.pem -pubin -in msg.txt -out msg.enc
> -engine rsa-engine-new*
> =========================
>
> I get a segmentation fault,
> ================================
>
>
> *engine "rsa-engine-new" set.RSA Engine is encrypting using public
> keySegmentation fault (core dumped)*
> ================================
>
> Do I need to Compile this sample engine with the OpenSSL in order for it
> to work?
>
> Regards,
> Shariful Alam
>
>
>

-- 
SY, Dmitry Belyavsky

Reply via email to