Dear Shariful, Yes. You have to provide all the RSA_METHO functions your app is going to use.
On Tue, Sep 28, 2021 at 5:46 PM Shariful Alam <dipto...@gmail.com> wrote: > Dear Dmitry, > Thank you for your response. > > Here is the stack trace > > > I was trying using gdb to debug the error. I get to until > RSA_public_encrypt(), then if I step in, I get the segmentation fault, > > ================================================================================================== > bt > #0 0x0000000000000000 in ?? () > #1 0x00007ffff77dbfc0 in RSA_public_encrypt (flen=72, from=0x6d8860 "Hi. > This is a test message. Hope to see some performace gain with this.\nme", > to=0x6d8a70 "x\353;\367\377\177", rsa=0x6d8540, padding=1) at > crypto/rsa/rsa_crpt.c:30 > #2 0x00000000004479a7 in rsautl_main (argc=0, argv=0x7fffffffde10) at > apps/rsautl.c:248 > #3 0x00000000004379fa in do_cmd (prog=0x6d5930, argc=11, > argv=0x7fffffffde10) at apps/openssl.c:564 > #4 0x0000000000436e4d in main (argc=11, argv=0x7fffffffde10) at > apps/openssl.c:183 > > ================================================================================================== > > To my understanding, instead of pointing to the default encryption > function, it is pointing to 0x0000000000000000, thus causing the > segmentation fault. > > > Thanks, > Shariful > > > > On Tue, Sep 28, 2021 at 1:40 AM Dmitry Belyavsky <beld...@gmail.com> > wrote: > >> Dear Shariful, >> >> Could you please also provide a stack trace of your segfault? >> >> On Tue, Sep 28, 2021 at 1:06 AM Shariful Alam <dipto...@gmail.com> wrote: >> >>> Hello, >>> I have the following simple RSA engine code from *e_dasync.c. * Following >>> code compiles and works. Until now, I was under the impression that if I do >>> not supply an alternative method in function *bind_dasync(), the *engine >>> will use the default method. However, it doesn't seem to be the case. If I >>> comment out line 37 and try to perform an encryption operation with the >>> following command, >>> >>> *"openssl rsautl -encrypt -inkey public.pem -pubin -in msg.txt -out >>> msg.enc -engine rsa-engine-new" * >>> >>> I get segmentation errors. >>> >>> Can anyone please tell me why this is happening? >>> >>> >>> ============================================================================== >>> >>> 1. /* Engine Id and Name */ >>> 2. static const char *engine_rsa_id = "rsa-engine-new"; >>> 3. static const char *engine_rsa_name = "RSA engine for testing"; >>> 4. >>> 5. // data encryption function >>> 6. static int eng_rsa_pub_enc(int flen, const unsigned char *from, >>> 7. unsigned char *to, RSA *rsa, int >>> padding) { >>> 8. printf("Encryption\n"); >>> 9. return 0; >>> 10. } >>> 11. >>> 12. // signature verify >>> 13. static int eng_rsa_pub_dec(int flen, const unsigned char *from, >>> unsigned char *to, RSA *rsa, int padding){ >>> 14. printf("Signature verify:\n"); >>> 15. return 0; >>> 16. } >>> 17. >>> 18. // signature >>> 19. static int eng_rsa_priv_enc(int flen, const unsigned char *from, >>> unsigned char *to, RSA *rsa, int padding){ >>> 20. printf("Signature:\n"); >>> 21. return 0; >>> 22. } >>> 23. >>> 24. // data decryption >>> 25. static int eng_rsa_priv_dec(int flen, const unsigned char *from, >>> unsigned char *to, RSA *rsa, int padding){ >>> 26. printf("Decryption\n"); >>> 27. return 0; >>> 28. } >>> 29. >>> 30. >>> 31. static RSA_METHOD *test_rsa_method = NULL; >>> 32. >>> 33. >>> 34. static int bind_dasync(ENGINE *e){ >>> 35. /* Setup RSA_METHOD */ >>> 36. if ((test_rsa_method = RSA_meth_new("Test RSA method", 0)) >>> == NULL >>> 37. // || RSA_meth_set_pub_enc(test_rsa_method, >>> eng_rsa_pub_enc) == 0 >>> 38. || RSA_meth_set_pub_dec(test_rsa_method, >>> eng_rsa_pub_dec) == 0 >>> 39. || RSA_meth_set_priv_enc(test_rsa_method, >>> eng_rsa_priv_enc) == 0 >>> 40. || RSA_meth_set_priv_dec(test_rsa_method, >>> eng_rsa_priv_dec) == 0 >>> 41. ) { >>> 42. >>> 43. return 0; >>> 44. } >>> 45. >>> 46. /* Ensure the dasync error handling is set up */ >>> 47. >>> 48. if (!ENGINE_set_id(e, engine_rsa_id) >>> 49. || !ENGINE_set_name(e, engine_rsa_name) >>> 50. || !ENGINE_set_RSA(e, test_rsa_method) >>> 51. ) { >>> 52. return 0; >>> 53. } >>> 54. return 1; >>> 55. } >>> 56. >>> 57. static int bind_helper(ENGINE *e, const char *id){ >>> 58. if (!bind_dasync(e)){ >>> 59. printf("2_Error: Inside Bind helper\n"); >>> 60. return 0; >>> 61. } >>> 62. return 1; >>> 63. } >>> 64. >>> 65. IMPLEMENT_DYNAMIC_BIND_FN(bind_helper) >>> 66. IMPLEMENT_DYNAMIC_CHECK_FN() >>> >>> >>> ============================================================================== >>> >>> Regards, >>> Shariful Alam >>> >>> >> >> -- >> SY, Dmitry Belyavsky >> > -- SY, Dmitry Belyavsky