Openssl 带引擎的RSA签名:传递消息而不是消息摘要

Openssl 带引擎的RSA签名:传递消息而不是消息摘要,openssl,rsa,Openssl,Rsa,我刚刚开始编写openssl引擎。我知道,我们只需要定义指向各种调用的函数指针。对于实现签名的RSA引擎,必须使用RSA\u方法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);

我刚刚开始编写openssl引擎。我知道,我们只需要定义指向各种调用的函数指针。对于实现签名的RSA引擎,必须使用
RSA\u方法
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;
但是,我没有在
EVP\u CIPHER
EVP\u MD
结构中看到任何
SignInit
SignUpdate
指针

我需要将
SignInit
SignUpdate
重定向到我们的库。
我需要将“原始”信息而不是其摘要转发给我们的实施。我如何才能做到这一点?

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

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

好的,我不确定我是否遗漏了什么。难道没有为openssl签名的RSA引擎吗?我是否理解这些引擎也只接收要签名的消息摘要?他们不是直接得到原始消息,然后在他们的实现中用于内部计算摘要吗?@user900785,消息摘要函数在其他地方有很多用途。哪个调用是为了签名?谁知道呢!他可以跟踪数据和签名,并尝试匹配某些内容,但无法保证通用可靠性,就像他所要求的那样,如果可以在API中截取数据和签名一样。谢谢!然而,不知何故,有一件事我并不确信。我确实看到了pkcs-11 sureware、nCipher等引擎。他们还必须能够使用智能卡引擎为他们进行签名,因为私钥存储在设备上。你认为他们是怎么做到的?我找不到任何例子。他们也只是使用摘要并“签名”吗?他的请求是针对OpenSSL API的,这就是我的回答。其他库在一次调用后结合了消化和签名操作。这提供了简单性的优点(将复杂的流程移动到经过测试的API中是好的),但缺乏灵活性,例如MD5被破坏时可能需要的灵活性。好的,我不确定我是否遗漏了什么。难道没有为openssl签名的RSA引擎吗?我是否理解这些引擎也只接收要签名的消息摘要?他们不是直接得到原始消息,然后在他们的实现中用于内部计算摘要吗?@user900785,消息摘要函数在其他地方有很多用途。哪个调用是为了签名?谁知道呢!他可以跟踪数据和签名,并尝试匹配某些内容,但无法保证通用可靠性,就像他所要求的那样,如果可以在API中截取数据和签名一样。谢谢!然而,不知何故,有一件事我并不确信。我确实看到了pkcs-11 sureware、nCipher等引擎。他们还必须能够使用智能卡引擎为他们进行签名,因为私钥存储在设备上。你认为他们是怎么做到的?我找不到任何例子。他们也只是使用摘要并“签名”吗?他的请求是针对OpenSSL API的,这就是我的回答。其他库在一次调用后结合了消化和签名操作。这提供了简单性的优势(将复杂的流程移动到经过测试的API中是好的),但缺乏灵活性,如MD5被破坏时可能需要的灵活性。