Ошибка прямого объявления при переносе кода из openssl 1.0.1 в 1.1.0 - PullRequest
0 голосов
/ 02 октября 2019

У меня есть кодовая база, которая была перемещена из openssl 1.0.1 в 1.1.0. Один проект в нем вызывает ошибки при компиляции. Некоторые части компилируются без ошибок, но я наткнулся на ошибки прямого объявления:

Foo/BarDH.cpp:37:28: error: member access into incomplete type 'dh_st'
        nRes = BN_bn2bin( key->pub_key, &keyout[0] );
                                  ^
/usr/local/sysroot/usr/local/include/openssl/ossl_typ.h:104:16: note: forward declaration of 'dh_st'
typedef struct dh_st DH;

Вот как включены файлы:

BarDH.cpp:

#include BarDH.hpp
[...]

BarDH.hpp:

#include <openssl/bn.h>
#include <openssl/dh.h>
#include <openssl/ec.h>
[...]
class BarDH{
    BarDH(void);
    virtual ~BarDH(void);

    enum
    {
     MAX_PUBKEY_SIZE = 2048 / 8
    };
    DH* key;
};

Что-то изменилось в том, как предполагается включать файлы с openssl 1.0.1 до 1.1.0 или кто-нибудь может увидеть, что происходитЗдесь? Спасибо!

1 Ответ

1 голос
/ 02 октября 2019

OpenSSL 1.1.0 сделал большинство структур непрозрачными, поэтому вам больше не разрешен прямой доступ к членам структуры DH. Используйте DH_get0_pub_key(key), чтобы получить значение pub_key вместо key->pub_ke y в строке 37 BarDH.cpp

https://www.openssl.org/docs/man1.1.1/man3/DH_get0_pub_key.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...