我正在检查如何从私人比特币地址生成公钥。
我找到了以下页面:
如何从 OpenSSL 中的 ECDSA 私钥获取公钥?
但是当我尝试使用 编译时gcc -Wall -Werror -O3 -o public_key public_key.c -lcrypto,出现以下错误:
public_key.c: In function 'generate_pubic_key':
public_key.c:26:13: error: storage size of 'start' isn't known
BIGNUM start;
^~~~~
public_key.c:32:6: error: implicit declaration of function 'BN_init' [-Werror=implicit-function-declaration]
BN_init(&start);
^~~~~~~
public_key.c:26:13: error: unused variable 'start' [-Werror=unused-variable]
BIGNUM start;
^~~~~
cc1: all warnings being treated as errors
Run Code Online (Sandbox Code Playgroud)
我已经安装了 OpenSSL,直到现在还没有任何与之相关的编程错误。有人可以指出我做错了什么吗?
您正在使用已弃用的已删除 API。
根据BN_new(3)手册页:
删除功能 void BN_init(BIGNUM *);
从 OpenSSL 1.1.0 开始,BN_init() 不再可用。它用于初始化现有的未初始化的 BIGNUM。通常,这将按如下方式完成:
Run Code Online (Sandbox Code Playgroud)BIGNUM a; BN_init(&a);应用程序应该用 BN_new 代替 BN_init 的使用:
Run Code Online (Sandbox Code Playgroud)BIGNUM *a; a = BN_new(); if(!a) /* Handle error */ ... BN_free(a);