Не найдена функция i2c_ASN1_INTEGER во включаемых файлах OpenSSL lib - PullRequest
0 голосов
/ 05 мая 2018

Я компилирую OpenSSL 1.1.0h на MacOS и сталкиваюсь с проблемой, когда функция int i2c_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **pp) не определена ни в одном из включаемых файлов. Восстановление исходного кода OpenSSL Я вижу, что функция определена в файлах asn1_locl.h и a_int.c, но ее нет в открытом интерфейсе скомпилированных библиотек.

По сути, я играю с некоторыми примерами проверки квитанции Apple In App Purchase, и все они предполагают, что эта функция определена в asn1.h. i2c_ASN1_INTEGER используется для /* Convert ASN1 INTEGER content octets to ASN1_INTEGER structure */.

Я использую следующие команды для компиляции библиотеки:

./Configure darwin64-x86_64-cc
make depend
make

Когда я собираю OpenSSL 1.0.2o, используя этот процесс, функция определяется в asn1.h, как и ожидалось ...

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

В случае разбора квитанции Apple, поскольку мы не используем большие целые числа (например, BIGNUM), вот небольшая функция, которая может анализировать целое число в long long.

long long longLongFromASN1Content(const uint8_t *ptr, int length) {
assert(length <= sizeof(long long));

long long v = 0;
for (int i = 0; i< length; i++) {
    if (i > 0) v <<= 8;
    v |= ptr[i];
}
return v;

}

0 голосов
/ 05 мая 2018

Восстановление исходного кода OpenSSL Я вижу, что функция определена в файлах asn1_locl.h и a_int.c, но ее нет в открытом интерфейсе скомпилированных библиотек.

Произошли существенные изменения в OpenSSL в версии 1.1.0 , что привело к непосредственному удалению существенных функций из общедоступного интерфейса:

На этой странице обсуждаются изменения API для OpenSSL версии 1.1. Общая цель изменений API состоит в том, чтобы сделать многие структуры данных непрозрачными к приложениям. Сокрытие данных дает ряд преимуществ:

  • Поля могут быть изменены без нарушения бинарной совместимости
  • Приложения более надежны и могут быть более уверены в правильности
  • Помогает определить, какие (новые) методы доступа и сеттеры, например, необходимы

Приложения, которые поддерживают OpenSSL 1.0.2 (и ниже) и OpenSSL 1.1.0 (и выше) следует посетить раздел Уровень совместимости ниже. Уровень совместимости обеспечивает функции OpenSSL 1.1.0, такие как RSA_get0_key, для клиентов OpenSSL 1.0.2. Исходный код доступен для скачивания ниже

Если вы обнаружите, что ваша библиотека или программа используется для работы с OpenSSL 1.0.2 но больше не работает с OpenSSL 1.1.0, пожалуйста, добавьте детали в обсуждение ниже на Вещи, которые больше не работают .

Относительно

все они предполагают, что эта функция определена в asn1.h

Я бы сказал, что это не очень хорошее предположение для OpenSSL v1.1.0.

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