我刚开始写一个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;
但是,我没有在SignInit
或SignUpdate
结构中看到任何EVP_CIPHER
,EVP_MD
指针。
我需要将SignInit
,SignUpdate
重定向到我们的库。
我需要将“原始”消息和非其摘要转发给我们的实施。我怎么能这样做?
答案 0 :(得分:1)
简单的答案是“你做不到”。 OpenSSL库API是已定义的已发布接口。它已经被成千上万的程序使用,其中没有一个能按照你的要求进行,因为标准已经告诉他们如何编写代码。