代码之家  ›  专栏  ›  技术社区  ›  Deanie

函数“BN\u init”的隐式声明错误

  •  2
  • Deanie  · 技术社区  · 7 年前

    我正在研究如何从私人比特币地址生成公钥。
    我找到了以下页面:
    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 回复  |  直到 6 年前
        1
  •  4
  •   Ahmed Masud    7 年前

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

    根据 BN_new(3) 手册页:

    删除的功能 void BN\u init(BIGNUM*);

    BN\u init()从OpenSSL 1.1.0起不再可用。过去习惯于 初始化现有的未初始化的BIGNUM。通常情况下 操作如下:

     BIGNUM a;
     BN_init(&a);
    

    应用程序应使用BN\U new代替BN\U init的使用:

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