Golang KalkanCryptCOM

Добрый день.
Прошу подсказать, проблема при запуске примера по языку Golang, а точнее ломается при попытке подписать XML файл.

oleutil.MustCallMethod(comtest, “SignXML”, alias, 0, signNodeId, parentSignNode, parentNameSpace, inDataXML, &outSignXML)

fmt.Println(outSignXML) - подписанный документ выходит в терминал.

oleutil.MustCallMethod(comtest, “GetLastErrorString”, &errStr, &rv) - далее когда идет получение ошибки, ломается, см. ниже

GOST engine already loaded
exit status 3221226356

Добрый день!
Подскажите, какую версию библиотеки используете?

Добрый день.
На этой неделе запросил и скачал пакет разработчика, и в описании написано СКЗИ «KALKAN-CRYPT (COM)» v2.8.0.1
Правильно ли я вас понял?

Не совсем. Версия находится в Свойствах к файлу KalkanCryptCOM.dll. Откройте Свойства и выберите “Подробно” - “Версия продукта”

image

Протестировали на версии 3.0.0.4
Ошибку воспроизвести удалось.
Дело в том, что перед отправкой в метод GetLastErrorString() обнулите переменные errStr и rv, т.е.

rv = 0
errStr = “”
oleutil.MustCallMethod(comtest, “GetLastErrorString”, &errStr, &rv)

А надпись “GOST engine already loaded” мы постараемся убрать. Эта надпись не сообщает об ошибке, а является внутренним сообщением.

Круто, спасибо за помощь!

Доброе утро.

Можно еще вопрос, на тестовых сертификатах ошибок не выходит.
Когда меняю на реальный ЭЦП первого руководителя, то пишет:

ERROR 0x8f00040: Load certificate from system store - not found root or intermediate certificate in system store.

Все сертификаты установил в “промежуточные центры сертификации”. ЭЦП также имеется в формате p12 с паролем.

Добрый день!
Вам необходимо установить сертификаты НУЦ и КУЦ. Скачайте их с сайта pki.gov.kz и установите в “Доверенные корневые центры сертификатов”.

Добрый день, установил сертификаты, как вы сказали. Прилагаю скриншот. Но также не может выгрузить из хранилища: Error: 149946432
ERROR 0x8f00040: Load certificate from system store - not found root or intermediate certificate in system store.
image

Еще момент, эти сертификаты будто не валидны.
image

Добрый день!
Вы установили сертификаты с алгоритмом Гост2015.

Предполагаю, что Вы сейчас на бою используете еще старый алгоритм Гост2004.
https://pki.gov.kz/cert/nca_gost.crt
https://pki.gov.kz/cert/root_gost.crt
Вот эти два сертификата поставьте в доверенные.

Дело в том, что данные ключи имеют алгоритм Гост2015. А этот алгоритм не распознается Windows. Соответственно Windows не может проверить подпись сертификата.

Добрый день. По прошлому вопросу разобрался. Спасибо большое.
Еще вопрос, подписал по ЭЦП данные, слово Test, сохранил результат в cms файл и решил проверить на сайте ezSigner, проверку не прошел, ругается на формат файла
image
хотя проверку через библиотеку подписанные данные прошли (скриншот ниже).

image

Добрый день!
Конвертируйте cms из Base64 в бинарный тип данных. И проверка на сайте ezsigner должна будет пройти

Понял, но подписанный файл такого вида, и не получается декодировать в бинарный тип.
Флаг, стоит как - kalkanFlags = 774.

-----BEGIN CMS-----
MIIMggYJKoZIhvcNAQcCoIIMczCCDG8CAQExDjAMBggqgw4DCgEDAQUAMBUGCSqG

Это как я понял “Тип – CMS в формате PEM”.

Чтобы проверить на сайте ezSigner нужен тип “Тип - CMS в формате DER”?
Если да, то как поменять флаг (kalkanFlags = 774)? на какую цифру?
Есть ли справочник этих цифр?

Можете подписать с флагом KC_OUT_DER, если хотите получить в кодировке DER. Более подробное описание можете посмотреть в SDK 2.0\COM_Windows\docs

В примере по языку Golang, флагу присвоено цифровое значение. Как к ней подставить KC_OUT_DER ?
Как ранее писал, указано kalkanFlags = 774.
Здесь SDK 2.0\COM_Windows\docs нету информации, что значение 774 соответствует какому либо коду.

Там указаны в шестнадцатеричном формате:

image

image

Подскажите пожалуйста, что тогда означает 774 из этого списка?
Скриншот из примера пакета разработчика.