函数'BN_init'错误的隐式声明

时间:2017-12-31 21:59:19

标签: c openssl bitcoin

我正在检查如何从私人比特币地址生成公钥 我找到了以下页面:
How do I obtain the public key from an ECDSA private key in OpenSSL?

但是当我尝试使用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

我安装了OpenSSL,并且到目前为止还没有任何与之相关的编程错误。有人能指出我做错了什么吗?

1 个答案:

答案 0 :(得分:4)

您正在使用已弃用的已删除的API。

根据BN_new(3)手册页:

删除功能  void BN_init(BIGNUM *);

  从OpenSSL 1.1.0开始,

BN_init()不再可用。它习惯了   初始化现有的未初始化的BIGNUM。通常这是   完成如下:

 BIGNUM a;
 BN_init(&a);
     

应用程序应该用BN_new替换BN_init的使用:

 BIGNUM *a;
 a = BN_new();
 if(!a) /* Handle error */
 ...
 BN_free(a);