В KalkanCrypt_VerifyData возвращает $outData пустой значение

Здравствуйте> Написал код на php, который извлекает сертифакат из подписанного CMS, которая подписано от клиенткой части с ncaLayer.createCMSSignatureFromBase64( storageType, dataB64); И php код отправляет извлеченный сертификат в формате base64 обратно к jscript.
Теперь я хочу проверить подписанный файл (от клента файл подписан с функций ncaLayer.createCMSSignatureFromBase64). И php код с KalkanCrypt_VerifyData возвращает $outData пустой значение. Почему оно пустое? Вот код php:image

1 Симпатия

Здравствуйте! Можете отправить нам на knca@pki.gov.kz ваш тестовый подписанный файл. Посмотрим и проверим у себя

а как его получить в формате пдф? Я подписываю с ncaLayer и выходит в виде base64. Эту строку преоброзовать в пдф?

Преобразовать в pdf не обязательно. Но, если хотите в таком формате надо base64 преобразовать в байты.

а каком формате он должен быть? он в любой файл преоброзуеться? Какие то каракули выходят когда преоброзовываю в pdf

Если данные были изначально в pdf и подписали его как base64, то можно преобразовать его в байты, тем самым будет возможно просматривать его как pdf документ. А можно и оставить в base64. Здесь нет предпочитаемого варианта. Все зависит от решаемых задач. Как вы преобразуете в pdf?

спасибо что так быстро ответили. В этой теме я ноль. Попыьаюсь по гуглить про пдф в байты

отправил на почту подписанный файл в виде base64. При преоброзовании пдф оно приоткрытии пдф выдает ошибку)

попробовал с detached, тоже не каких сообщений не возвращает взамен. А вот документе написано так в SignDAta_andVerifyDat.docximage
а вот переменная пустая приходит, она в последнем объекте в свойстве mess передаю переменные outData err от php image

Посмотрел ваш случай. Вам надо проверять вот так:

$flags_verify = $KC_SIGN_CMS + $KC_IN_BASE64 + $KC_IN2_BASE64 + $KC_DETACHED_DATA;
$err = KalkanCrypt_VerifyData($alias, $flags_verify, $inData, 0, $inSign, $outData, $outVerifyInfo, $outCertCMS);

в $inData передаем оригинальный файл без подписи в виде base64
в $inSign передаем подпись которую вы прислали на почту в формате base64​
$outData не имеет смысла, так как его значение мы уже знаем по $inData

спасибо большое сработало. image

1 Симпатия

еще вопрос если вы не против. Как теперь можно получить подписанный файл? Который из перемен оно? Это inSign или оригинальный файл inData ?

inSign - значение подписи без файла,
inData - это просто ваш файл, без никаких изменений.

image
а тут сказано что inSign подписанные данные. в inSign я вставил значение cms, то что подписал через ncaLayer.createCMSSignatureFromBase64. inSign в байты преоброзовать, чтобы подписанный документ получит?

в каком формате должен быть подписанный файл? .cms?

Это в случае, если подпись attached.

Не можете из вашей подписи получить подписанный документ. У вас detached подпись.
Вам надо заново получить подпись через ncaLayer.createCMSSignatureFromBase64 с флагом attached

заработало отлично! Спасибо что ответили. Поставил значегие true у функции ncaLayer.createCMSSignatureFromBase64 и теперь atached, то есть подпись с вложенным файлом

1 Симпатия