第十九章 DH / 19.3数据结构

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提供默认方法。各项意义如下:

nameDH_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;

              /* 其他 */

       };

       pglengthDH密钥参数;

       pub_keyDH公钥;

       priv_keyDH私钥;

       references:引用;

       ex_data:扩展数据;

       methDH_METHOD,本DH密钥的各种计算方法,明确指明了DH的各种运算方式;

       engine:硬件引擎。