1

我刚刚开始编写一个 openssl 引擎。我看到所有需要的是定义各种调用的函数指针。对于 RSA 引擎,实现签名,必须使用RSA_METHOD结构:

 typedef struct rsa_meth_st
 {    
        const char *name;    

        int (*rsa_pub_enc)(int flen, unsigned char *from,
          unsigned char *to, RSA *rsa, int padding);

        int (*rsa_pub_dec)(int flen, unsigned char *from,
          unsigned char *to, RSA *rsa, int padding);    

        int (*rsa_priv_enc)(int flen, unsigned char *from,
          unsigned char *to, RSA *rsa, int padding);

        int (*rsa_priv_dec)(int flen, unsigned char *from,
          unsigned char *to, RSA *rsa, int padding);    

        int (*rsa_mod_exp)(BIGNUM *r0, BIGNUM *I, RSA *rsa);    

        int (*bn_mod_exp)(BIGNUM *r, 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, unsigned char *m, unsigned int m_len,
           unsigned char *sigret, unsigned int *siglen, RSA *rsa);//here m points to digest of type 'type'

        int (*rsa_verify)(int type, unsigned char *m, unsigned int m_len,
           unsigned char *sigbuf, unsigned int siglen, RSA *rsa);

 } RSA_METHOD;

但是,我在or结构中看不到任何SignInit,SignUpdate指针。EVP_CIPHEREVP_MD

我需要将 , 重定向SignInitSignUpdate我们的库。我需要将“原始”消息而不是其摘要转发给我们的实现。我怎样才能做到这一点?

4

1 回答 1

1

简单的答案是“你不能”。OpenSSL 库 API 是一个已定义、已发布的接口。它已经被数千个程序使用,但没有一个程序能满足您的要求,因为标准已经告诉他们如何编写代码。

于 2013-09-19T14:17:24.107 回答