Why custom RSA engine is not calling default RSA method?
Shariful Alam
dipto181 at gmail.com
Mon Sep 27 23:06:14 UTC 2021
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mta.openssl.org/pipermail/openssl-users/attachments/20210927/1a683e76/attachment.html>
More information about the openssl-users
mailing list