gpt4 book ai didi

c - 错误 'struct ec_key_st' 类型的定义不完整,使用 OpenSSL

转载 作者:行者123 更新时间:2023-12-01 16:03:49 26 4
gpt4 key购买 nike

我正在尝试通过 openssl 从给定的 secret 计算公钥。我收到此错误:

main.c:27: error: incomplete definition of type 'struct ec_key_st'
printf("d: %s\n", BN_bn2hex(eckey->priv_key));
~~~~~^

这是我的代码:
#include <stdio.h>

#include <openssl/ec.h>
#include <openssl/ecdsa.h>
#include <openssl/bn.h>
#include <openssl/obj_mac.h>

int main()
{
BN_CTX *ctx = BN_CTX_new();

EC_KEY *eckey = EC_KEY_new();
EC_GROUP *group = EC_GROUP_new_by_curve_name(NID_secp256k1);
EC_KEY_set_group(eckey, group);

BIGNUM *prv = BN_new();
BN_hex2bn(&prv, "b14fac12b3fa7dd6f2562a18d554fcd6818137ebb7e0d119ab0776d6407664f9");
EC_KEY_set_private_key(eckey, prv);

EC_POINT *Q = EC_POINT_new(group);
EC_POINT_mul(group, Q, prv, NULL, NULL, ctx);
EC_KEY_set_public_key(eckey, Q);

if (EC_KEY_check_key(eckey))
printf("Key succesfully checked.\n");

printf("d: %s\n", BN_bn2hex(eckey->priv_key));
printf("X: %s\n", BN_bn2hex(&eckey->pub_key->X));
printf("Y: %s\n", BN_bn2hex(&eckey->pub_key->Y));

EC_GROUP_free (group); group = NULL;
EC_KEY_free (eckey); eckey = NULL;
return 0;
}

上面的代码有什么问题?如果我删除 printf 行,它工作正常。如果有人帮助我摆脱这个错误,我将不胜感激。

最佳答案

您正在使用 OpenSSL 1.1,并且他们已经决定您不应该再探查其结构的内部结构。
eckey->priv_key在 OpenSSL 1.0.x 中是访问私钥的有效方法,但现在唯一正确的方法是 EC_KEY_get0_private_key(eckey)
同样,对于公钥,它是 EC_KEY_get0_public_key(eckey) .

这两个函数都是在 OpenSSL 1.0.x 中声明的,因此您可以编写相同的代码。

所以

printf("d: %s\n", BN_bn2hex(eckey->priv_key));
printf("X: %s\n", BN_bn2hex(&eckey->pub_key->X));
printf("Y: %s\n", BN_bn2hex(&eckey->pub_key->Y));

会成为
{
const BIGNUM* d = EC_KEY_get0_private_key(eckey);
const EC_POINT* Q = EC_KEY_get0_public_key(eckey);
const EC_GROUP* group = EC_KEY_get0_group(eckey);
BIGNUM* x = BN_new();
BIGNUM* y = BN_new();

if (!EC_POINT_get_affine_coordinates_GFp(group, Q, x, y, null))
{
error();
}

printf("d: %s\n", BN_bn2hex(d));
printf("X: %s\n", BN_bn2hex(x));
printf("Y: %s\n", BN_bn2hex(y));

BN_free(x);
BN_free(y);
}

即使 OpenSSL 1.1.1 决定重做隐藏在 ec_lcl.h 中的结构布局,这也能让您的代码正常工作

关于c - 错误 'struct ec_key_st' 类型的定义不完整,使用 OpenSSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46546230/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com