DH数据结构定义在crypto/dh/dh.h中,主要包含两项,如下:
1) DH_METHOD
struct dh_method
{
const char *name;
int (*generate_key)(DH *dh);
int (*compute_key)(unsigned char *key,const BIGNUM *pub_key,DH *dh);
int (*bn_mod_exp)(const DH *dh, BIGNUM *r, const BIGNUM *a,
const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx,
BN_MONT_CTX *m_ctx);
int (*init)(DH *dh);
int (*finish)(DH *dh);
int flags;
char *app_data;
int (*generate_params)(DH *dh, int prime_len, int generator, BN_GENCB *cb);
};
DH_METHOD指明了一个DH密钥所有的计算方法函数。用户可以实现自己的DH_METHOD来替换openssl提供默认方法。各项意义如下:
name:DH_METHOD方法名称。
generate_key:生成DH公私钥的函数。
compute_key:根据对方公钥和己方DH密钥来生成共享密钥的函数。
bn_mod_exp:大数模运算函数,如果用户实现了它,生成DH密钥时,将采用用户实现的该回调函数。用于干预DH密钥生成。
init:初始化函数。
finish:结束函数。
flags:用于记录标记。
app_data:用于存放应用数据。
generate_params:生成DH密钥参数的回调函数,生成的密钥参数是可以公开的。
2) DH
struct dh_st
{
/* 其他 */
BIGNUM *p;
BIGNUM *g;
long length; /* optional */
BIGNUM *pub_key;
BIGNUM *priv_key;
int references;
CRYPTO_EX_DATA ex_data;
const DH_METHOD *meth;
ENGINE *engine;
/* 其他 */
};
p、g、length:DH密钥参数;
pub_key:DH公钥;
priv_key:DH私钥;
references:引用;
ex_data:扩展数据;
meth:DH_METHOD,本DH密钥的各种计算方法,明确指明了DH的各种运算方式;
engine:硬件引擎。