Порядок проверки на backend

Всех приветствую, не совсем понимаю что мне делать на backend, а именно какой порядок вызов методов для проверки подписи от NCLayer (https://github.com/sigex-kz/ncalayer-js-client).

  1. На backend создаю base64 строку которую нужно подписать
  2. Отправляю её на frontend
  3. Пользователь подписывает
  4. Отправляю эту подпись вида “-----BEGIN CMS-----MIIPVQYJKoZ…” на backend
    Тут у меня начинаются трудности я использую SDK PHP LINUX, я так понимаю мне нужно вызвать метод KalkanCrypt_VerifyData() но метод принимает 8 параметров, а у меня по сути ничего кроме этой строки из п. 4 и данных которые были подписаны нет.
    Возможно я сам себя запутал, прошу помощи.
    Я хочу получить данные подписанта, могу ли я вытащить их из этой строки? Затем выполнить все необходимые проверки.
    Далее я хочу сгенерировать cms файл и вложить в него подписанный файл (данные) и подпись, это я могу реализовать с помощью kalkan? или это делается уже любыми другими библиотеками?

вы сделали? если да то как?

Здравствуйте!

Вам необходимо вызвать так:

KalkanCrypt_Init(); //Инициализация библиотеки
//Входные параметры
//$inSign = “-----BEGIN CMS-----MIIPVQYJKoZ…”;  //Подпись, которую необходимо проверить
//$flags_verify = //$KC_SIGN_CMS + //$KC_IN_PEM + //$KC_OUT_PEM; //Флаги проверяемой подписи
//$idCert = 1; //Номер сертификата из подписи
//$alias = ""; //Алиас сертификата (Нужно передавать, когда проверяется DraftSign, а сертификат находится на токене)
//$inData = ""; //Исходные данные (Нужно передавать, в случае если подпись без вложенных данных - DetachedSign)
//Выходные параметры
//$outData  = ""; //Исходные данные
//$outVerifyInfo  = ""; //Информация о проверке
//$outCert  = "";  //Сертификат подписанта
//$err = KalkanCrypt_VerifyData(//$alias, //$flags_verify, //$inData, //$idCert, //$inSign, //$outData, //$outVerifyInfo,	//$outCert);
if (//$err > 0){
   echo "Error: ".//$err."\n";
   print_r(KalkanCrypt_GetLastErrorString());
}

При успешной проверке, вы получите ответ в //$outVerifyInfo:

Signature N 1
- CAdES-BES: verify signer certificate hash - OK.
Verify - OK
CMS Verify - OK	

Необходимо проверить сертификат на статус “Отозванность”:

//Входные параметры
//$flags_validate = //$KC_USE_OCSP; //Тип проверки валидности сертификата - OCSP
//$validPath = "http://test.pki.gov.kz/ocsp/"; //Путь к OCSP сервису НУЦ РК
//$flag_validate = 0; //В случае, если нужно вывести ответ сервиса, то флаги указываем: //$KC_GET_OCSP_RESPONSE + //$KC_OUT_BASE64
//Выходные параметры
//$outInfo = ""; //Информация о проверке
//$getResp = ""; //Ответ сервиса OCSP, если нужно его сохранить.
//$err = KalkanCrypt_X509ValidateCertificate(//$outCert, //$flags_validate, //$validPath, 0, //$outInfo, //$flag_validate, //$getResp);
if (//$err > 0){
   echo "Error: ".//$err."\n";
   print_r(KalkanCrypt_GetLastErrorString());
}

При успешной проверке, вы получите ответ в //$outInfo:

OCSP: check certificate status: good
	certificateSerialNumber=56...8D
	This Update: 28.10.2025 00:21:20 +05:00
Verify chain and certificates: - OK

Далее необходимо получить информацию из сертификата:

//Входные параметры
//$inCert = //$outCert;
//$flag = //$KC_CERTPROP_ISSUER_COUNTRYNAME; //Здесь указываете тот флаг, которую информацию необходимо получить из сертификата. 
//Выходные параметры
//$OutData = "";
//$err = KalkanCrypt_X509CertificateGetInfo(//$flag, //$outCert, //$OutData);
if (//$err > 0 && //$err != 149946424){
	echo "Error: ".//$err."\n";
} else {
	echo"//$OutData."\n";
}	

Затем поочередно вызываете последний метод, указывая нужный флаг. Перечень флагов есть в документации SDK 2.0\PHP_Linux\docs\Описание KalkanCryptPHP.docx: Константы, определяющие значение поля/расширения в запросе/сертификате

p.s. комментарии перед $ удалите. Иначе на форуме не поместить код на php