ckalkan

package
v0.0.0-...-d13dd57 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 27, 2023 License: MIT Imports: 7 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrHandler = errors.New("lib handler error")
View Source
var ErrPanic = errors.New("panic recovered")

Functions

This section is empty.

Types

type CertCodeType

type CertCodeType int

CertCodeType определяет тип кодировки

const (
	CertCodeTypeDER    CertCodeType = 257 // Кодировка DER
	CertCodeTypePEM    CertCodeType = 258 // Кодировка PEM
	CertCodeTypeBase64 CertCodeType = 260 // Кодировка Base64
)

Константы, определяющие тип кодировки

type CertProp

type CertProp int

CertProp определяет значение поля/расширения в запросе/сертификате

const (
	CertPropIssuerCountryName   CertProp = 2049 // Страна издателя
	CertPropIssuerSOPN          CertProp = 2050 // Название штата или провинции издателя
	CertPropIssuerLocalityName  CertProp = 2051 // Населённый пункт издателя
	CertPropIssuerOrgName       CertProp = 2052 // Наименование организации издателя
	CertPropIssuerOrgUnitName   CertProp = 2053 // Название организационного подразделения издателя
	CertPropIssuerCommonName    CertProp = 2054 // Имя Фамилия издателя
	CertPropSubjectCountryName  CertProp = 2055 // Страна субъекта
	CertPropSubjectSOPN         CertProp = 2056 // Название штата или провинции субъекта
	CertPropSubjectLocalityName CertProp = 2057 // Населенный пункт субъекта
	CertPropSubjectCommonName   CertProp = 2058 // Общее имя субъекта
	CertPropSubjectGivenName    CertProp = 2059 // Имя субъекта
	CertPropSubjectSurname      CertProp = 2060 // Фамилия субъекта
	CertPropSubjectSerialNumber CertProp = 2061 // Серийный номер субъекта
	CertPropSubjectEmail        CertProp = 2062 // e-mail субъекта
	CertPropSubjectOrgName      CertProp = 2063 // Наименование организации субъекта
	CertPropSubjectOrgUnitName  CertProp = 2064 // Название организационного подразделения субъекта
	CertPropSubjectBc           CertProp = 2065 // Бизнес категория субъекта
	CertPropSubjectDc           CertProp = 2066 // Доменный компонент субъекта
	CertPropNotBefore           CertProp = 2067 // Дата действителен с
	CertPropNotAfter            CertProp = 2068 // Дата действителен по
	CertPropKeyUsage            CertProp = 2069 // Использование ключа
	CertPropExtKeyUsage         CertProp = 2070 // Расширенное использование ключа
	CertPropAuthKeyID           CertProp = 2071 // Идентификатор ключа центра сертификации
	CertPropSubjKeyID           CertProp = 2072 // Идентификатор ключа субъекта
	CertPropCertCN              CertProp = 2073 // Серийный номер сертификата
	CertPropIssuerDN            CertProp = 2074 // Отличительное имя издателя
	CertPropSubjectDN           CertProp = 2075 // Отличительное имя субъекта
	CertPropSignatureAlg        CertProp = 2076 // Алгоритм подписи
	CertPropPubKey              CertProp = 2077 // Получение открытого ключа
	CertPropPoliciesID          CertProp = 2078 // Получение идентификатора политики сертификата
	CertPropOCSP                CertProp = 2079 // Получение URL-адреса OCSP
	CertPropGetCRL              CertProp = 2080 // Получение URL-адреса CRL
	CertPropGetDeltaCRL         CertProp = 2081 // Получение URL-адреса delta CRL
)

Константы, определяющие значение поля/расширения в запросе/сертификате.

type CertType

type CertType int

CertType определяет принадлежность сертификата

const (
	CertTypeCA           CertType = 513 // Корневой сертификат УЦ
	CertTypeIntermediate CertType = 514 // Сертификат промежуточного УЦ
	CertTypeUser         CertType = 516 // Сертификат пользователя
)

Константы, определяющие принадлежность сертификата

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client структура для взаимодействия с библиотекой KC

func NewClient

func NewClient() (*Client, error)

NewKCClient возвращает клиента для работы с KC.

func (*Client) Close

func (cli *Client) Close() (err error)

Close закрывает связь с динамической библиотекой.

func (*Client) Finalize

func (cli *Client) Finalize()

Finalize освобождает ресурсы криптопровайдера KalkanCryptCOM и завершает работу библиотеки

func (*Client) GetCertFromCMS

func (cli *Client) GetCertFromCMS(cms string, signID int, flag Flag) (cert string, err error)

GetCertFromCMS обеспечивает получение сертификата из CMS.

func (*Client) GetCertFromXML

func (cli *Client) GetCertFromXML(xml string, signID int, flag Flag) (cert string, err error)

GetCertFromXML обеспечивает получение сертификата из xml.

func (*Client) GetCertificatesList

func (cli *Client) GetCertificatesList() (certs string, err error)

GetCertificatesList обеспечивает получение списка сертификатов в виде строки и их количество.

func (*Client) GetLastError

func (cli *Client) GetLastError() ErrorCode

GetLastError возвращает код последней ошибки.

func (*Client) GetLastErrorString

func (cli *Client) GetLastErrorString() (code ErrorCode, message string)

GetLastErrorString возвращает текст последней ошибки.

func (*Client) GetTokens

func (cli *Client) GetTokens(store StoreType) (tokens string, err error)

GetTokens обеспечивает получение указателя на строку подключенных устройств типа storage и их количество.

func (*Client) HashData

func (cli *Client) HashData(algo HashAlgo, dataB64 string, flag Flag) (result string, err error)

HashData возвращается хеш dataB64 в base64.

func (*Client) Init

func (cli *Client) Init() (err error)

Init инициализирует библиотеку

func (*Client) LoadKeyStore

func (cli *Client) LoadKeyStore(password, containerPath string, storeType StoreType, alias string) (err error)

LoadKeyStore загружает ключи/сертификат из хранилища

func (*Client) SetProxy

func (cli *Client) SetProxy(flag Flag, proxyURL *url.URL) (err error)

SetProxy устанавливает прокси.

func (*Client) SignData

func (cli *Client) SignData(inSign, inData, alias string, flag Flag) (result string, err error)

SignData используется для подписи текста в формате base64.

func (*Client) SignWSSE

func (cli *Client) SignWSSE(xml, alias string, flags Flag, signNodeID string) (signedXML string, err error)

SignWSSE подписывает документ XML в формате WSSec, который требутся для SmartBridge.

Параметры:

- xml - строка XML

- alias - label (alias) сертификата

- flags - флаги

- signNodeID - идентификатор тэга, который необходимо подписать. Передать "", если необходимо подписать все содержимое документа.

func (*Client) SignXML

func (cli *Client) SignXML(xml, alias string, flags Flag, signNodeID, parentSignNode, parentNameSpace string) (signedXML string, err error)

SignXML подписывает данные в формате XML.

Параметры:

- xml - входящий xml

- alias - label (alias) сертификата

- flags - флаги

- signNodeID - идентификатор тэга, который необходимо подписать. Передать "", если необходимо подписать все содержимое документа.

- parentSignNode - идентификатор тэга, в который необходимо поместить значение подписи.

- parentNameSpace - пространство имен тэга, в который необходимо поместить значение подписи. Если пространство имен есть, но не будет указано - то тег не найдется.

func (*Client) TSASetURL

func (cli *Client) TSASetURL(url string)

TSASetURL установка адреса сервиса TSA.

func (*Client) VerifyData

func (cli *Client) VerifyData(inSign, inData, alias string, flag Flag) (result *VerifiedData, err error)

VerifyData обеспечивает проверку подписи.

func (*Client) VerifyXML

func (cli *Client) VerifyXML(xml, alias string, flags Flag) (result string, err error)

VerifyXML обеспечивает проверку подписи данных в формате XML.

func (*Client) X509CertificateGetInfo

func (cli *Client) X509CertificateGetInfo(inCert string, prop CertProp) (result string, err error)

func (*Client) X509ExportCertificateFromStore

func (cli *Client) X509ExportCertificateFromStore(alias string) (result string, err error)

X509ExportCertificateFromStore экспортирует сертификата из хранилища.

func (*Client) X509LoadCertificateFromBuffer

func (cli *Client) X509LoadCertificateFromBuffer(inCert []byte, flag CertCodeType) (err error)

func (*Client) X509LoadCertificateFromFile

func (cli *Client) X509LoadCertificateFromFile(certPath string, certType CertType) (err error)

func (*Client) X509ValidateCertificate

func (cli *Client) X509ValidateCertificate(inCert string, validateType ValidateType, validatePath string) (result string, err error)

X509ValidateCertificate - осуществляет проверку сертификата:

- проверка срока действия,

- построение цепочки сертификатов,

- проверка отозванности по OCSP или CRL.

Если validateType:

- ValidateTypeCRL - в параметр path необходимо указывать путь к файлу crl. Например: X509ValidateCertificate(gostCert, ValidateTypeCRL, "/tmp/nca_gost.crl")

- ValidateTypeOCSP - в параметр path необходимо указывать url OCSP. По умолчанию передается url http://ocsp.pki.gov.kz. Например: X509ValidateCertificate(gostCert, ValidateTypeOCSP, "http://ocsp.pki.gov.kz")

- ValidateTypeNothing - не производятся проверки по CRL или OCSP. Параметр path игнорируется. Например: X509ValidateCertificate(gostCert, ValidateTypeNothing, "")

func (*Client) XMLFinalize

func (cli *Client) XMLFinalize()

XMLFinalize освобождает память и завершает работу библиотеки с модулями, отвечающие за парсинг, подпись и проверку данных в формате XML. Не надо вызывать каждый раз при подписи. Можно только один раз после цикла подписания xml файлов

type ErrorCode

type ErrorCode int64 // Код ошибки времени выполнения
const (
	ErrorCodeOK                           ErrorCode = 0         // Нет ошибки
	ErrorCodeErrorReadPKCS12              ErrorCode = 149946370 // Невозможно прочитать файл формата pkcs#12
	ErrorCodeErrorOpenPKCS12              ErrorCode = 149946371 // Невозможно открыть файл формата pkcs12
	ErrorCodeInvalidPropID                ErrorCode = 149946372 // Недопустимый идентификатор расширения сертификата
	ErrorCodeBufferTooSmall               ErrorCode = 149946373 // Размер буфера слишком мал
	ErrorCodeCertParseError               ErrorCode = 149946374 // Невозможно разобрать (распарсить) сертификат
	ErrorCodeInvalidFlag                  ErrorCode = 149946375 // Недопустимый флаг
	ErrorCodeOpenFileErr                  ErrorCode = 149946376 // Невозможно открыть файл
	ErrorCodeInvalidPassword              ErrorCode = 149946377 // Неправильный пароль
	ErrorCodeMemoryError                  ErrorCode = 149946381 // Невозможно выделить память
	ErrorCodeCheckChainError              ErrorCode = 149946382 // Не найден сертификат УЦ или сертификат пользователя при проверки цепочки
	ErrorCodeValidTypeError               ErrorCode = 149946384 // Недопустимый тип валидации сертификата
	ErrorCodeBadCRLFormat                 ErrorCode = 149946385 // Некорректный формат CRL
	ErrorCodeLoadCRLError                 ErrorCode = 149946386 // Невозможно загрузить CRL
	ErrorCodeLoadCRLsError                ErrorCode = 149946387 // Невозможно загрузить CRL-ы
	ErrorCodeUnknownAlg                   ErrorCode = 149946389 // Неизвестный алгоритм подписи
	ErrorCodeKeyNotFound                  ErrorCode = 149946390 // Не найден приватный ключ пользователя
	ErrorCodeSignInitError                ErrorCode = 149946391 // Невозможно инициализировать менеджера подписи
	ErrorCodeSignError                    ErrorCode = 149946392 // Не удалось сгенерировать цифровую подпись
	ErrorCodeEncodeError                  ErrorCode = 149946393 // Ошибка шифрования
	ErrorCodeInvalidFlags                 ErrorCode = 149946394 // Недопустимые флаги
	ErrorCodeCertNotFound                 ErrorCode = 149946395 // Не найден сертификат пользователя
	ErrorCodeVerifySignError              ErrorCode = 149946396 // Ошибка верификации подписи xml
	ErrorCodeBase64DecodeError            ErrorCode = 149946397 // Ошибка дешифровки из Base 64
	ErrorCodeUnknownCMSFormat             ErrorCode = 149946398 // Неизвестный формат CMS
	ErrorCodeCACertNotFound               ErrorCode = 149946400 // Не найден сертификат УЦ
	ErrorCodeXMLSecInitError              ErrorCode = 149946401 // Ошибка инициализации xmlsec
	ErrorCodeLoadTrustedCertsErr          ErrorCode = 149946402 // Ошибка загрузки доверенных сертификатов
	ErrorCodeSignInvalid                  ErrorCode = 149946403 // Недопустимая подпись xml
	ErrorCodeNoSignFound                  ErrorCode = 149946404 // Не найдена подпись во входных данных
	ErrorCodeDecodeError                  ErrorCode = 149946405 // Ошибка дешифрования
	ErrorCodeXMLParseError                ErrorCode = 149946406 // Невозможно разобрать (распарсить) xml
	ErrorCodeXMLAddIDError                ErrorCode = 149946407 // Не удалось добавить атрибут ID
	ErrorCodeXMLInternalError             ErrorCode = 149946408 // Ошибка при работе с xml
	ErrorCodeXMLSetSignError              ErrorCode = 149946409 // Не удалось подписать xml
	ErrorCodeOpenSSLError                 ErrorCode = 149946410 // Ошибка openssl
	ErrorCodeNoTokenFound                 ErrorCode = 149946412 // Не найден токен
	ErrorCodeOCSPAddCertErr               ErrorCode = 149946413 // Не удалось добавить сертификат в ocsp
	ErrorCodeOCSPParseURLErr              ErrorCode = 149946414 // Не удалось разобрать url
	ErrorCodeOCSPAddHostErr               ErrorCode = 149946415 // Не удалось добавить хост
	ErrorCodeOCSPReqErr                   ErrorCode = 149946416 // Не удалось добавить текущее время в запрос
	ErrorCodeOCSPConnectionErr            ErrorCode = 149946417 // Ошибка подключения к OCSP респондеру
	ErrorCodeVerifyNoData                 ErrorCode = 149946418 // Нет входных данных для верификации
	ErrorCodeIDAttrNotFound               ErrorCode = 149946419 // Не найден атрибут ID
	ErrorCodeIDRange                      ErrorCode = 149946420 // Некорректный идентификатор
	ErrorCodeReaderNotFound               ErrorCode = 149946423 // Не найден ридер
	ErrorCodeGetCertPropErr               ErrorCode = 149946424 // Не удалось получить значение атрибута
	ErrorCodeSignFormat                   ErrorCode = 149946425 // Неизвестный формат подписи
	ErrorCodeInDataFormat                 ErrorCode = 149946426 // Неизвестный формат входных данных
	ErrorCodeOutDataFormat                ErrorCode = 149946427 // Неизвестный формат выходных данных
	ErrorCodeVerifyInitError              ErrorCode = 149946428 // Невозможно инициализировать менеджера верификации подписи
	ErrorCodeVerifyError                  ErrorCode = 149946429 // Не удалось верифицировать цифровую подпись
	ErrorCodeHashError                    ErrorCode = 149946430 // Не удалось хэшировать данные
	ErrorCodeSignHashError                ErrorCode = 149946431 // Не удалось подписать хэшированные данные
	ErrorCodeCACertsNotFound              ErrorCode = 149946432 // Не найден сертификат УЦ в хранилище сертификатов
	ErrorCodeCertTimeInvalid              ErrorCode = 149946434 // Срок действия сертификата истек либо еще не наступил
	ErrorCodeConvertError                 ErrorCode = 149946435 // Ошибка записи сертификата в структуру X509
	ErrorCodeTSACreateQuery               ErrorCode = 149946436 // Ошибка генерации запроса timestamp
	ErrorCodeCreateObj                    ErrorCode = 149946437 // Ошибка записи OID в ASN1 структуру
	ErrorCodeCreateNoNce                  ErrorCode = 149946438 // Ошибка генерации уникального числа
	ErrorCodeHTTPError                    ErrorCode = 149946439 // Ошибка протокола http
	ErrorCodeCADESBESFailed               ErrorCode = 149946440 // Ошибка проверки расширения CADESBES в CMS
	ErrorCodeCADESTFailed                 ErrorCode = 149946441 // Ошибка проверки подписи токена TSA
	ErrorCodeNoTSAToken                   ErrorCode = 149946442 // В подписи не присутствует метка TSA
	ErrorCodeInvalidDigestLen             ErrorCode = 149946443 // Неправильная длина хэша
	ErrorCodeGenRandError                 ErrorCode = 149946444 // Ошибка генерации случайного числа
	ErrorCodeSoapNSError                  ErrorCode = 149946445 // Не найдены заголовки SOAP-сообщений
	ErrorCodeGetPubKey                    ErrorCode = 149946446 // Ошибка экспорта публичного ключа
	ErrorCodeGetCertInfo                  ErrorCode = 149946447 // Ошибка получения информации о сертификате
	ErrorCodeFileReadError                ErrorCode = 149946448 // Ошибка чтения файла
	ErrorCodeCheckError                   ErrorCode = 149946449 // Хэш не совпадает
	ErrorCodeZipExtractErr                ErrorCode = 149946450 // Невозможно открыть архив
	ErrorCodeNoManifestFile               ErrorCode = 149946451 // Не найден MANIFEST
	ErrorCodeVerifyTSHash                 ErrorCode = 149946452 // не удалось проверить Хэш подписи TS
	ErrorCodeXADESTFailed                 ErrorCode = 149946453 // XAdES-T: Ошибка проверки подписи
	ErrorCodeOCSPRespStatMalformedRequest ErrorCode = 149946454 // Неправильный запрос
	ErrorCodeOCSPRespStatInternalError    ErrorCode = 149946455 // Внутренняя ошибка
	ErrorCodeOCSPRespStatTryLater         ErrorCode = 149946456 // Попробуйте позже
	ErrorCodeOCSPRespStatSigRequired      ErrorCode = 149946457 // Должны подписать запрос
	ErrorCodeOCSPRespStatUnauthorized     ErrorCode = 149946458 // Запрос не авторизован
	ErrorCodeVerifyIssuerSerialV2         ErrorCode = 149946459 // не удалось проверить IssuerSerialV2 в XAdES
	ErrorCodeOCSPCheckCertFromResp        ErrorCode = 149946460 // Ошибка проверки сертификата OCSP-респондера
	ErrorCodeCRLExpired                   ErrorCode = 149946461 // CRL-файл просрочен
	ErrorCodeLibraryNotInitialized        ErrorCode = 149946625 // Библиотека не инициализирована
	ErrorCodeEngineLoadErr                ErrorCode = 149946880 // Ошибка подключения (загрузки) модуля (engine)
	ErrorCodeParamError                   ErrorCode = 149947136 // Некорректные входные данные
	ErrorCodeCertStatusOK                 ErrorCode = 149947392 // Статус сертификата – валидный. Используется при проверке сертификата по OCSP. (не является ошибкой, делается запись в лог)
	ErrorCodeCertStatusRevoked            ErrorCode = 149947393 // Статус сертификата – отозван. Используется при проверке сертификата по OCSP.
	ErrorCodeCertStatusUnknown            ErrorCode = 149947394 // Статус сертификата – неизвестен. Используется при проверке сертификата по OCSP. Например, не удалось установить издателя сертификата.
)

func GetErrorCode

func GetErrorCode(err error) (code ErrorCode, ok bool)

GetErrorCode извлекает из ошибки ErrorCode из ошибка типа KalkanError.

func (ErrorCode) Hex

func (t ErrorCode) Hex() string

func (ErrorCode) String

func (t ErrorCode) String() string

type Flag

type Flag int

Flag представляет собой флаги для KalcanCrypt

const (
	FlagSignDraft       Flag = 1      // Сырая подпись (draft sign)
	FlagSignCMS         Flag = 2      // Подпись в формате CMS
	FlagInPEM           Flag = 4      // Входные данные в формате PEM
	FlagInDER           Flag = 8      // Входные данные в кодировке DER
	FlagInBase64        Flag = 16     // Входные данные в кодировке BASE64
	FlagIn2Base64       Flag = 32     // Дополнительные входные данные в кодировке BASE64
	FlagDetachedData    Flag = 64     // Отсоединенная подпись
	FlagWithCert        Flag = 128    // Вложить сертификат в подпись
	FlagWithTimestamp   Flag = 256    // Добавить в подпись метку времени
	FlagOutPEM          Flag = 512    // Выходные данные в формате PEM
	FlagOutDER          Flag = 1024   // Выходные данные в кодировке DER
	FlagOutBase64       Flag = 2048   // Выходные данные в кодировке BASE64
	FlagProxyOff        Flag = 4096   // Отключить использование прокси-сервера и стереть настройки.
	FlagProxyOn         Flag = 8192   // Включить и установить настройки прокси-сервера (адрес и порт)
	FlagProxyAuth       Flag = 16384  // Прокси-сервер требует авторизацию (логин/пароль)
	FlagInFile          Flag = 32768  // Использовать, если параметр inData/outData содержит абсолютный путь к файлу
	FlagNoCheckCertTime Flag = 65536  // Не проверять срок действия сертификата при построении цепочки до корневого (для проверки старых подписей с просроченным сертификатом)
	FlagHashSHA256      Flag = 131072 // Алгоритм хеширования sha256
	FlagHashGOST95      Flag = 262144 // Алгоритм хеширования Gost34311_95
)

type HashAlgo

type HashAlgo string
const (
	HashAlgoSHA256 HashAlgo = "sha256"
	HashAlgoGOST95 HashAlgo = "Gost34311_95"
)

type KalkanError

type KalkanError struct {
	// contains filtered or unexported fields
}

func (KalkanError) Error

func (e KalkanError) Error() string

type StoreType

type StoreType int

StoreType представляет собой вид хранилища/носителя.

const (
	StoreTypePKCS12     StoreType = 1   // Файловая система
	StoreTypeKZIDCard   StoreType = 2   // Удостоверение личности гражданина РК
	StoreTypeKazToken   StoreType = 4   // Казтокен
	StoreTypeEToken     StoreType = 8   // eToken 72k
	StoreTypeJaCarta    StoreType = 16  // JaCarta
	StoreTypeX509Cert   StoreType = 32  // Сертификат X509
	StoreTypeAKey       StoreType = 64  // aKey
	StoreTypeEToken5110 StoreType = 128 // eToken 5110
)

type ValidateType

type ValidateType int

ValidateType - это тип валидации сертификата

const (
	ValidateTypeNothing     ValidateType = 1025   // Не делать проверок
	ValidateTypeCRL         ValidateType = 1026   // Проверка сертификата по списку отозванных сертификатов
	ValidateTypeOCSP        ValidateType = 1028   // Проверка сертификата посредством сервиса OCSP
	ValidateGetOCSPResponse ValidateType = 524288 // Получить ответ от OCSP-сервиса
)

Константы, определяющие тип валидации

type VerifiedData

type VerifiedData struct {
	Cert []byte
	Info []byte
	Data []byte
}

VerifiedData структура возвращаемая от метода KCVerifyData

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL