Re: error: redefinition of ‘struct rsa_meth_st’

Blumenthal, Uri - 0553 - MITLL uri at
Mon Apr 12 17:06:15 UTC 2021

Is there an analog of the "dummy async engine" for the OpenSSL-3.0 Provider?

There are two ways to design a system. One is to make is so simple there are obviously no deficiencies.
The other is to make it so complex there are no obvious deficiencies.
                                                                                                                                     -  C. A. R. Hoare

On 4/12/21, 12:43, "openssl-users on behalf of Matt Caswell" <openssl-users-bounces at on behalf of matt at> wrote:

    You can look at the dummy async engine which wraps the standard RSA 
    functions inside an engine (as well as various other crypto primitives). 
    You can see it here:


    On 12/04/2021 17:32, Shariful Alam wrote:
    > Dr. Pauli,
    > 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.
    > Regards,
    > Shariful Alam
    > On Sun, Apr 11, 2021 at 6:00 PM Dr Paul Dale <pauli at 
    > <mailto:pauli at>> wrote:
    >     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.
    >     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.
    >     Pauli
    >     On 12/4/21 5:04 am, Shariful Alam wrote:
    >>     Hello,
    >>     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).
    >>     ==============================
    >>     *$gcc -fPIC -c r_engine.c*
    >>     *r_engine.c:29:8: error: redefinition of ‘struct rsa_meth_st’
    >>      struct rsa_meth_st {
    >>             ^
    >>     In file included from /usr/include/openssl/crypto.h:131:0,
    >>                      from r_engine.c:7:
    >>     /usr/include/openssl/ossl_typ.h:147:16: note: originally defined here
    >>      typedef struct rsa_meth_st RSA_METHOD;*
    >>     =============================
    >>     and my *struct rsa_meth_st *looks like the following,
    >>     ================================================================================
    >>     *struct rsa_meth_st {
    >>         const char *name;
    >>         int (*rsa_pub_enc) (int flen, const unsigned char *from,
    >>     unsigned char *to, RSA *rsa, int padding);
    >>         int (*rsa_pub_dec) (int flen, const unsigned char *from,
    >>     unsigned char *to, RSA *rsa, int padding);
    >>         int (*rsa_priv_enc) (int flen, const unsigned char *from,
    >>     unsigned char *to, RSA *rsa, int padding);
    >>         int (*rsa_priv_dec) (int flen, const unsigned char *from,
    >>     unsigned char *to, RSA *rsa, int padding);
    >>         int (*rsa_mod_exp) (BIGNUM *r0, const BIGNUM *I, RSA *rsa,
    >>     BN_CTX *ctx);
    >>         int (*bn_mod_exp) (BIGNUM *r, const BIGNUM *a, const BIGNUM
    >>     *p, const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
    >>         int (*init) (RSA *rsa);
    >>         int (*finish) (RSA *rsa);
    >>         int flags;
    >>         char *app_data;
    >>         int (*rsa_sign) (int type, const unsigned char *m, unsigned
    >>     int m_length, unsigned char *sigret, unsigned int *siglen, const
    >>     RSA *rsa);
    >>         int (*rsa_verify) (int dtype, const unsigned char *m, unsigned
    >>     int m_length, const unsigned char *sigbuf, unsigned int siglen,
    >>     const RSA *rsa);
    >>         int (*rsa_keygen) (RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb);
    >>     };
    >>     *
    >>     =================================================================================
    >>     My sample skeleton code is here
    >>     <>
    >>     Can anyone please tell me what I'm I doing wrong?
    >>     Regards,
    >>     Shariful Alam
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 5249 bytes
Desc: not available
URL: <>

More information about the openssl-users mailing list