OpenSSL中的ECDH

OpenSSL中的ECDH,c,openssl,C,Openssl,我对OpenSSL库中的ECDH有一个问题 在159行的文件“ecdhtest.c”中,我们可以确认私钥的值,如下所示: BN_打印(输出,a->priv_键) 但是,错误发生在我使用Makefile构建时 ecdsatest.c:221:22: error: incomplete definition of type 'struct ec_key_st' BN_print(out, key->priv_key); ~~~^ ../include

我对OpenSSL库中的ECDH有一个问题

在159行的文件“ecdhtest.c”中,我们可以确认私钥的值,如下所示:

BN_打印(输出,a->priv_键)

但是,错误发生在我使用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

我想确认私钥的值


如果你有什么想法,请帮帮我。

由于意图,
struct ec\u 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 */;
但不同版本之间可能并不稳定

但是,您可以使用accessor函数获取私钥

const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key);

这将是一个干净的方法。

ec_key\u st
完整定义从现在的任何位置移动到头文件中,这样每个人都可以看到这些字段。别忘了事后恢复您的更改…谢谢您回答我的问题。我使用“EC_key_get0_private_key”确认私钥。