OpenSSL RSA_方法结构:app_数据字段的用途是什么?
参考OpenSSL RSA_方法结构,app_数据字段的建议用途是什么?关于这方面的文献资料非常缺乏。我也在寻找以有意义的方式使用此字段的任何示例代码OpenSSL RSA_方法结构:app_数据字段的用途是什么?,openssl,rsa,Openssl,Rsa,参考OpenSSL RSA_方法结构,app_数据字段的建议用途是什么?关于这方面的文献资料非常缺乏。我也在寻找以有意义的方式使用此字段的任何示例代码 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 (
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;
参考OpenSSL RSA_方法结构,app_数据字段的建议用途是什么
在RSA的例子中,我认为没有建议的用法。我相信它是为那些需要它的人而存在的:
include/openssl/rsa.h- /* may be needed! */
include/openssl/rsa.h: char *app_data;
我相信
app_data
通常适用于需要携带额外上下文的特定应用程序,比如引擎实现和使用密钥对。例如,这来自GOST的引擎:
engines/ccgost/gost_crypt.c:192: ctx->app_data = ctx->cipher_data;
它还经常在SSL上下文中使用,以提供额外的状态。例如:
...
ssl/d1_pkt.c:1390: s->s3->in_read_app_data = 2;
ssl/s3_lib.c:3104: s->s3->in_read_app_data = 0;
ssl/s3_lib.c:4415: s->s3->in_read_app_data = 1;
ssl/s3_lib.c:4419: if ((ret == -1) && (s->s3->in_read_app_data == 2)) {
ssl/s3_lib.c:4433: s->s3->in_read_app_data = 0;
ssl/s3_pkt.c:1623: s->s3->in_read_app_data = 2;
...
我相信手册中已经涵盖了这一点;请参见SSL\u CTX\u get\u app\u data
,SSL\u CTX\u set\u app\u data
,SSL\u SESSION\u get\u app\u data
,SSL\u SESSION\u set\u app\u data
和朋友
至少有59个数据结构提供了它:
openssl-1.0.2e$ grep -IR app_data * | egrep "(char*|void*)" | wc -l
59
关于这方面的文献资料非常缺乏 是的。以下是我对它的评论(省略了一些
/*??*/
):
crypto/evp/evp.h- /* Application data */
crypto/evp/evp.h: void *app_data;
crypto/evp/evp.h: void *app_data; /* application stuff */
demos/tunala/tunala.c- /*
demos/tunala/tunala.c: * We use the SSL's "app_data" to indicate a call-back induced "kill"