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
.