Ошибка [SIGSEGV] в KalcanCrypt[php] при вызове X509LoadCertificateFromBuffer

Здравствуйте.
при вызове KalkanCrypt_X509LoadCertificateFromBuffer($cert, $encodeType), php-fpm падает с ошибкой [SIGSEGV]

в $cert передаю содержимое файла сертификата (например root_gost.pem)
в $encodeType передаю флаг кодировки KC_CERT_PEM = 0x102;

текущая версия php 8.0.26 fpm
установлены libltdl-dev libpcsclite-dev
KalcanCrypt [NTS] для php 8.0
версия SDK2.0 от 2023-02-01

поведение индентично на версиях php 7.4 | 8.0 | 8.0.1 | 8.0.2 | 8.0.3 | 8.0.29 | 8.0.30

Если загрузка сертификатов производится из файлов, или из хранилища - ошибок нет.

Только что обновил SDK. Ошибка также присутсвтует.

php: 8.2 fpm

libs:

  • libltdl-dev
  • libpcsclite-dev

KalcanCrypt 2.0.8 [NTS] для php 8.2
SDK version from 2023-07-13

Здравствуйте! Да, имеет место быть такой проблеме. Спасибо за обратную связь! В следующих обновлениях исправим.

печаль.
Если еще ошибки найду отдельными постами публиковать или в эту тему?

думаю, лучше отдельными

1 Симпатия

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

В методе загрузки из файле загружаем как промежуточный, корневой или пользовательский. А в этом загружаем только как пользовательский сертификат.

Если загружать корневые и промежуточные сертификаты методом LoadCertificateFromFile с флагом KC_CERT_USER(0x204), то при подписании библиотека не видит эти сертификаты и пытается искать в системе.

В связи с этим вопрос - какое поведение будет в свете отсутствия данного флага у загрузки из буфера и сможет ли KalkanCrypt построит цепь из загруженного?

Для загрузки именно промежуточного сертификата, используется флаг: KC_CERT_INTERMEDIATE
Для корневого же - KC_CERT_CA
Иначе, из файла, сертификаты не попадут в библиотеку KalkanCrypt

Ок. Но если этот метод LoadCertificateFromBuffer загружает всё как пользовательские - то как его использовать?

Метод LoadCertificateFromBuffer загружает только пользовательский сертификат в память.
Не совсем понял вопрос, что имеете ввиду под “как его использовать?”

Ок. Добавьте пожалуйста это в документацию или переименуйте метод (например в LoadUserCertificateFromBuffer) так как это крайне не очевидно.
Я изначально полагал, что просто есть два способа загрузки из файла или из буфера. Но как оказалось есть ньюанс.