Мультиподпись файлов

Добрый день!
При мультиподписи файлов в получаю непонятный\неверный результат.
Выполняю действия на 64х-битной библиотеке COM(Windows).
Мои действия:
Первая подпись

Flags: KC_SIGN_CMS + KC_IN_BASE64 +KC_OUT_PEM = 530

indata = “SGVsbG8gV29ybGQhISE=”

outSign = “”

KC.SignData("",530,indata, outSign)

outSign ="-----BEGIN CMS-----MIIJBAYJKoZIhvcNAQcCoI…JL8Sbm8knNvogBTE=-----END CMS-----

Проверяю резултат на Ezsigner. Проверку прошел все хорошо.
image

Вторая подпись

Flags: KC_SIGN_CMS + KC_IN_PEM +KC_OUT_BASE64 = 2 054

indata = “”

outSign ="-----BEGIN CMS-----MIIJBAYJKoZIhvcNAQcCoI…JL8Sbm8knNvogBTE=-----END CMS-----

SignData("",2054, indata, outSign)

outSign =“MIII+wYJKoZIhvcNAQcCoIII7D…dR6UTfA0ZkA”

При проверке на Ezsigner выдает только 2-ую подпись и если извлечь файл, то он будет пустым.

Прошу помочь разобраться с данным вопросом.

Добрый день!
Дело в том, что при повторном подписании, вы передаете подпись в формате PEM в одну строку.
Передайте в том же формате, как вы ее получили - с переносами.

А есть ли ограничения на размер файла?
Получаю ошибку
KCR_BUFFER_TOO_SMALL 0x08F00005 Размер буфера слишком мал

Очень странно. А можете прислать данные, которые подписываете и полное описание параметров в методе SignData()?

Первая подпись
Flags: KC_SIGN_CMS + KC_WITH_TIMESTAMP + KC_IN_BASE64 +KC_OUT_PEM = 786
indata = “Ссылка”
outSign = “”
KC.SignData("", 786, indata, outSign)
outSign = “ссылка”

Вторая подпись
Flags: KC_SIGN_CMS + KC_WITH_TIMESTAMP + KC_IN_PEM +KC_OUT_PEM = 774
indata = “”
outSign = “Ссылка”
KC.SignData("", 774, indata, outSign)

Добрый день!
У меня все подписи/проверки прошли успешно.

Какую версию библиотек из SDK Вы используете? И какое название?
На почту дополнил ответ мультиподписью.

Добрый день!
Очень рад, что у Вас все получилось, но почему у меня выходит ошибка? Что я делаю не так?
У меня COM(Windows) версии v2.6.1.3.

Теперь понятно. Вы используете старую версию библиотеки (Октябрь 2020 года), в которой возможно были проблемы с памятью.

Обновите SDK. Актуальная версия 3.0.0.6.
По ссылке pki.gov.kz/get-sdk/ введите e-mail, который был указан при первичном получении SDK.

Основная реализация на 1С. Но сегодня попробовали проверить подписать на Delphi воспользовавшись примером из SDK(пришлось немного изменить код в части indata). Получили ошибку
Get TSA token - OK.
ERROR 0x8f00005: Sign Data - buffer too small.
По итогу тоже самое.
Какие методы вы использовали для получения файла, который ранее прислали?

Попробовали и через CSharp. Результат тот же.

@Danil
Опытным путем было установлено, что данная ошибка появляется если размер CMS-контейнера начинает превышать 31КБ.

Добрый день. Ошибка повторяется и при отправке подписи в переменной inData и outSign?
Попробуйте отправить на повторное подписание в переменной inSign.

Добрый день!
Версия библиотеки: 3.0.0.6 COM_Windows x64
Удалось реализовать мультиподпись файлов при помощи следующей схемы:

Первая подпись
kalkanFlags = KC_SIGN_CMS + KC_IN_BASE64 +KC_OUT_PEM + KC_WITH_TIMESTAMP + KC_WITH_CERT
inData = строка в формате base64
outSign = пустая строка
SignData(“” , kalkanFlags, inData, outSign)
РезультатПодписи = outSign

Последующие подписи
kalkanFlags = KC_SIGN_CMS + KC_IN_PEM +KC_OUT_PEM + KC_WITH_TIMESTAMP + KC_WITH_CERT
inData = РезультатПодписи
outSign = пустая строка
SignData(“” , kalkanFlags, inData, outSign)
РезультатПодписи = outSign

Способ реализации указанный в документации к комплекту разработчика работает пока размер подписываемого контейнера не превышает 32КБ. Каждое подписание увеличивает размер контейнера в зависимости от “флагов”, что ограничивает возможное количество подписей одного файла.

В этой связи прошу внести дополнения в документацию.

Спасибо @Danil -у за помощь в реализации и своевременную консультацию.

Благодарю за замечание. Мы постараемся разобраться в ситуации и устранить в ближайшее время.