Openssl 1.1.1d неверное использование неполного типа "struct dsa_st" - PullRequest
0 голосов
/ 26 февраля 2020

Я перехожу с openssl 1.0.2s на 1.1.1d и получаю сообщение об ошибке ниже.

Я искал в документах openssl, и кажется, что вызов полей изменился. Я не уверен, как мне нужно реализовать это в моем коде.

const BIGNUM * const *KeyPairImpl::getField(const string &field) const
{
  if (field == "P")
    return &dsa_->p;
  else if (field == "Q")
    return &dsa_->q;
  else if (field == "G")
    return &dsa_->g;
  else if (field == "X")
    return &dsa_->priv_key;
  else if (field == "Y")
    return &dsa_->pub_key;
  else
    // unknown field name
    return NULL;
}

Ошибка

KeyPair.cpp: In member function ‘const BIGNUM* const* KeyPairImpl::getField(const std::string&) const’:
KeyPair.cpp:84: error: invalid use of incomplete type ‘struct dsa_st’
/usr/local/ssl_1.1.1d/include/openssl/ossl_typ.h:107: error: forward declaration of ‘struct dsa_st’
KeyPair.cpp:86: error: invalid use of incomplete type ‘struct dsa_st’
/usr/local/ssl_1.1.1d/include/openssl/ossl_typ.h:107: error: forward declaration of ‘struct dsa_st’
KeyPair.cpp:88: error: invalid use of incomplete type ‘struct dsa_st’
/usr/local/ssl_1.1.1d/include/openssl/ossl_typ.h:107: error: forward declaration of ‘struct dsa_st’
KeyPair.cpp:90: error: invalid use of incomplete type ‘struct dsa_st’
/usr/local/ssl_1.1.1d/include/openssl/ossl_typ.h:107: error: forward declaration of ‘struct dsa_st’
KeyPair.cpp:92: error: invalid use of incomplete type ‘struct dsa_st’
/usr/local/ssl_1.1.1d/include/openssl/ossl_typ.h:107: error: forward declaration of ‘struct dsa_st’
cc1plus: warnings being treated as errors

1 Ответ

3 голосов
/ 26 февраля 2020

Openssl 1.1.1 больше не позволяет вам иметь прямой доступ к внутренним структурам. Вам необходимо использовать предоставленные функции API для доступа к внутренним данным (если есть).

Для dsa _-> p используйте DSA_get0_p

Для dsa _-> q используйте DSA_get0_q

Для использования dsa _-> g DSA_get0_g

Для использования dsa _-> priv_key DSA_get0_priv_key

Для dsa _-> pub_key use DSA_get0_pub_key

например

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