OpenSSL中的ECDH

时间:2016-02-22 17:12:38

标签: c openssl

我对OpenSSL库中的ECDH有疑问。

在文件' ecdhtest.c'在159行,我们可以确认私钥的价值如下:

BN_print(out, a->priv_key);

但是,当我使用Makefile构建时发生错误。

ecdsatest.c:221:22: error: incomplete definition of type 'struct ec_key_st'
    BN_print(out, key->priv_key);
                  ~~~^
../include/openssl/evp.h:147:16: note: forward declaration of 'struct ec_key_st'
        struct ec_key_st *ec;   /* ECC */
               ^
1 error generated.

我认为key->priv_key的类型是BIGNUM

我想确认私钥的价值。

如果您有任何想法,请帮助我。

1 个答案:

答案 0 :(得分:1)

struct ec_key_st的定义因意图而不透明。它在openssl发行版的ec_lcl.h中定义,它不是公共接口的一部分。在1.0.1k版本中,它看起来像这样:

struct ec_key_st {
    int version;
    EC_GROUP *group;
    EC_POINT *pub_key;
    BIGNUM   *priv_key;
    unsigned int enc_flag;
    point_conversion_form_t conv_form;
    int     references;
    int     flags;
    EC_EXTRA_DATA *method_data;
} /* EC_KEY */;

但从版本到版本可能不稳定。

但是,可以使用访问者函数

获取私钥
const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key);

这将是干净的方式。