RSA使用引擎签名:传递消息而不是摘要

时间:2013-09-19 07:58:26

标签: openssl rsa

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

 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;

但是,我没有在SignInitSignUpdate结构中看到任何EVP_CIPHEREVP_MD指针。

我需要将SignInitSignUpdate重定向到我们的库。 我需要将“原始”消息和非其摘要转发给我们的实施。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

简单的答案是“你做不到”。 OpenSSL库API是已定义的已发布接口。它已经被成千上万的程序使用,其中没有一个能按照你的要求进行,因为标准已经告诉他们如何编写代码。