Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Библиотека для работы с ЭЦП РК 🔑 🇰🇿

License

NotificationsYou must be signed in to change notification settings

gokalkan/gokalkan

Repository files navigation

pkg-imgreportcard-img

Пакетgokalkan является оберткой над нативными методами библиотеки KalkanCrypt.

KalkanCrypt является основной библиотекой для работы с ЭЦП ключами от pki.gov.kz ипозволяет подписывать, верифицировать, вытаскивать данные и много чего другого связанногос электронными подписями, цифровыми сертификатами и ключами.

Особенности пакетаgokalkan:

  • Поддержка мультипоточности
  • Без зависимостей
  • Чистый код
  • Напрямую вызывает нативные методы KalkanCrypt

Перед использованием

Чтобы использовать библиотеку требуется провести подготовку:

1. Получить SDK

Обратиться вpki.gov.kz чтобы получить SDK. SDK представляет из себя набор библиотек для Java и C.

2. Установить CA сертификаты

Сертификаты лежат по путиSDK/C/Linux/ca-certs/Ubuntu. В папке находятся два типа сертификатов -production иtest. Для их установки приготовлены скрипты в той же директории. При запуске понадобятся sudo права.

3. Скопировать .so файлы

Файлы лежат в директорииSDK 2.0/C/Linux/C/libs/v2.0.4. Команда для копирования:

sudo cp -f libkalkancryptwr-64.so.2.0.4 /usr/lib/libkalkancryptwr-64.so

Установка

Версия Go 1.17+

go get github.com/gokalkan/gokalkan

Загрузка хранилища PKCS12

Загрузка хранилища с ключом и сертификатом (например ЭЦП ключ, который начинается сRSA...):

package mainimport ("fmt""log""github.com/gokalkan/gokalkan")var (certPath="test_cert/GOSTKNCA.p12"// путь к хранилищуcertPassword="Qwerty12"// пароль// P.S. никогда не храните пароли в коде)funcmain() {// для тестаopts:=gokalkan.OptsTest// для прода// opts := gokalkan.OptsProdcli,err:=gokalkan.NewClient(opts...)iferr!=nil {log.Fatal("new kalkan client create error",err)}// Обязательно закрывайте клиент, иначе приведет к утечкам ресурсовdefercli.Close()// Подгружаем хранилище с паролемerr=cli.LoadKeyStore(certPath,certPassword)iferr!=nil {log.Fatal("load key store error",err)}}

Следует отметить, что при инициализации gokalkan клиента нужно указывать опцию.Есть две опции -OptsTest иOptsProd. Нужно выбрать одну из них в зависимости от окружения.

Подпись XML документа

Для того чтобы подписать XML документ, нужно передать документ в виде строки:

signedXML,err:=cli.SignXML("<root>GoKalkan</root>")fmt.Println("Подписанный XML",signedXML)fmt.Println("Ошибка",err)

Проверка подписи на XML документе

Проверка подписи документа вернет ошибку, если документ подписан неверно либо сроку сертификата с которым подписан истёк.

serial,err:=cli.VerifyXML(signedXML)fmt.Println("Серийный номер",serial)fmt.Println("Ошибка",err)

Подпись XML документа для SmartBridge

Для того чтобы подписать XML документ в формате SignWSSE, нужно передать документ в виде строкии id для SOAP Body. Функция обернет документ вsoap:Envelope и запишет внутриsoap:Body.

signedXML,err:=cli.SignWSSE("<root>gokalkan</root>","12345")fmt.Println("Подписанный XML в формате WSSE",signedXML)fmt.Println("Ошибка",err)

Получение времени когда был подписан документ 2 подписантом

signTime,err:=c.GetTimeFromSig(cmsFileBody,1)fmt.Println("Время подписи",signTime)fmt.Println("Ошибка",err)

Получение значение поля из сертификата

Внимание! Сертификат должен быть в формате PEM.

value,err:=c.X509CertificateGetInfo(certBody,ckalkan.CertPropSubjectCommonName)fmt.Println("Значение",value)fmt.Println("Ошибка",err)

Получение сводной информации о сертификате

Внимание! Сертификат должен быть в формате PEM.

info,err:=c.X509CertificateGetSummary(certBody)fmt.Println("Информация",info)fmt.Println("Ошибка",err)

Бенчмарки

Команда запуска бенчмарка:

gotest -bench SignXML -run=^$ -benchmem

Характеристики хост машины:

  • goos: linux
  • goarch: amd64
  • cpu: Intel(R) Core(TM) i5-8500 CPU @ 3.00GHz
БенчмаркКол-во цикловСредн. время выполненияСредн. потребление ОЗУСредн. кол-во аллокаций
BenchmarkSignXML-62809422310 ns/op2792 B/op8 allocs/op

Контрибьютеры ✨


Zulbukharov Abylaikhan

Tlekbai Ali

Kilibayev Azat

Лицензия

The MIT License (MIT) 2021 -Abylaikhan Zulbukharov.

Please have a look at theLICENSE.md for more details.


[8]ページ先頭

©2009-2025 Movatter.jp