Функция c2i_ASN1_INTEGER в Openssl 1.1.0 - PullRequest
1 голос
/ 31 мая 2019

Я недавно обновил openssl с 1.0.2n до 1.1.0g в системе linux.

Ранее я использовал

ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a, const unsigned char **pp, long len) функция. Поскольку эта функция удалена в openssl 1.1.0, теперь я заменил ее на

ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, long length).

Теперь, когда я запускаю свое приложение, я получаю предупреждение как

Warning:0:-- SSL Error queue report -- Warning:0: - asn1 encoding routines|d2i_ASN1_UINTEGER|expecting an integer:218718323

Каково решение этой проблемы?

1 Ответ

3 голосов
/ 31 мая 2019

ASN.1 кодирование INTEGER (как BER или DER) состоит из 1 или более октетов «идентификатора» (обычно 1), за которыми следуют 1 или более октетов «длины», за которыми следуют октеты «содержимого» (длинакоторый определяется предыдущими октетами "length").

Функция c2i_ASN1_INTEGER предполагает, что вы уже проанализировали октеты "identifier" и "length", и преобразует байты "content" в целое число.Это было удалено из OpenSSL 1.1.0, потому что это считается операцией синтаксического анализа очень низкого уровня, которая не должна вызываться приложениями напрямую.

Функция d2i_ASN1_UINTEGER не является прямой заменой c2i_ASN1_INTEGER.Он анализирует все целое число (включая октеты «идентификатор» и «длина»).Если вы передадите ему только октеты содержимого, то первый байт будет интерпретирован как октет «идентификатора».Вероятно, это будет неправильное значение для целого числа, и, вероятно, именно поэтому вы видите ошибку «ожидание целого числа».

Вам нужно будет переписать свой код, чтобы передать целое число в d2i_ASN1_UINTEGER.

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