<div dir="ltr">Dr. Pauli,<div>Goodmorning. Thank you for replying. I found the documentation a bit difficult for me to understand. I was wondering if you can direct me to a sample skeleton code for creating a custom RSA engine. </div><div><br></div><div>Regards,</div><div>Shariful Alam</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Apr 11, 2021 at 6:00 PM Dr Paul Dale <<a href="mailto:pauli@openssl.org">pauli@openssl.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div>
You shouldn't be accessing the internal of a private structure.
That structure was made private for a reason and duplicating it in
your engine will break when we change the structure's contents.<br>
<br>
Your engine should be using the EVP_PKEY_meth_set_* function to do
what you want (for 1.1.1). For 3.0, you should be writing a
provider instead.<br>
<br>
<br>
Pauli<br>
<br>
<div>On 12/4/21 5:04 am, Shariful Alam
wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">Hello,
<div>Hope you guys are doing well. I'm trying to develop an RSA
engine. My engine was somewhat working until I try to
integrate my engine with an apache httpd server. After
installing the httpd from the source code, it turns out that,
I can't compile my engine anymore. I get the following error
while I try to compile (it was compiling before and I did not
make any changes to my engine code).</div>
<div><br>
</div>
<div>==============================</div>
<div><br>
</div>
<div><b>$gcc -fPIC -c r_engine.c</b></div>
<div><b>r_engine.c:29:8: error: redefinition of ‘struct
rsa_meth_st’<br>
struct rsa_meth_st {<br>
^<br>
In file included from /usr/include/openssl/crypto.h:131:0,<br>
from r_engine.c:7:<br>
/usr/include/openssl/ossl_typ.h:147:16: note: originally
defined here<br>
typedef struct rsa_meth_st RSA_METHOD;</b><br>
</div>
<div><br>
</div>
<div>=============================</div>
<div><br>
</div>
<div>and my <b>struct rsa_meth_st </b>looks like the
following,</div>
<div><br>
</div>
<div>================================================================================</div>
<div><br>
</div>
<div><b>struct rsa_meth_st {<br>
<br>
const char *name;<br>
int (*rsa_pub_enc) (int flen, const unsigned char *from,
unsigned char *to, RSA *rsa, int padding);<br>
int (*rsa_pub_dec) (int flen, const unsigned char *from,
unsigned char *to, RSA *rsa, int padding);<br>
int (*rsa_priv_enc) (int flen, const unsigned char
*from, unsigned char *to, RSA *rsa, int padding);<br>
int (*rsa_priv_dec) (int flen, const unsigned char
*from, unsigned char *to, RSA *rsa, int padding);<br>
<br>
int (*rsa_mod_exp) (BIGNUM *r0, const BIGNUM *I, RSA
*rsa, BN_CTX *ctx);<br>
<br>
int (*bn_mod_exp) (BIGNUM *r, const BIGNUM *a, const
BIGNUM *p, const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX
*m_ctx);<br>
<br>
int (*init) (RSA *rsa);<br>
<br>
int (*finish) (RSA *rsa);<br>
<br>
int flags;<br>
<br>
char *app_data;<br>
<br>
int (*rsa_sign) (int type, const unsigned char *m,
unsigned int m_length, unsigned char *sigret, unsigned int
*siglen, const RSA *rsa);<br>
<br>
int (*rsa_verify) (int dtype, const unsigned char *m,
unsigned int m_length, const unsigned char *sigbuf, unsigned
int siglen, const RSA *rsa);<br>
<br>
int (*rsa_keygen) (RSA *rsa, int bits, BIGNUM *e,
BN_GENCB *cb);<br>
<br>
};<br>
</b></div>
<div><br>
</div>
<div>=================================================================================</div>
<div><br>
</div>
<div>My sample skeleton code is here <a href="https://pastebin.com/uNXYknEA" target="_blank">https://pastebin.com/uNXYknEA</a></div>
<div><br>
</div>
<div>Can anyone please tell me what I'm I doing wrong?</div>
<div><br>
</div>
<div>Regards,</div>
<div>Shariful Alam</div>
</div>
</blockquote>
<br>
</div>
</blockquote></div>