Documentation
¶
Index ¶
- Constants
- Variables
- func TrimXML(xmlData string) (string, error)
- func WrapWithWSSESoapEnvelope(dataXML, id string) (result string)
- type CertIssuer
- type CertOrganization
- type CertSubject
- type CertSubjectRole
- type CertType
- type CertificateInfo
- type Client
- func (cli *Client) AddSigner(cms, data []byte, isDetached, withTSP bool) (signature []byte, err error)
- func (cli *Client) Close() (err error)
- func (cli *Client) ExtractCMS(cms []byte) ([]byte, error)
- func (cli *Client) GetCertFromCMS(cms []byte, signID int) (string, error)
- func (cli *Client) GetCertFromXML(xml string, signID int) ([]byte, error)
- func (cli *Client) GetCertificateInfo(cert string, checkOCSP bool, crlPath string) (*CertificateInfo, error)
- func (cli *Client) GetTimeFromSig(signature []byte, signID int) (time.Time, error)
- func (cli *Client) HashGOST95(data []byte) (hashed []byte, err error)
- func (cli *Client) HashSHA256(data []byte) (hashed []byte, err error)
- func (cli *Client) ListCertificateAliases() ([]string, error)
- func (cli *Client) LoadCertFromBytes(cert []byte, certType ckalkan.CertType) (err error)
- func (cli *Client) LoadCerts() error
- func (cli *Client) LoadKeyStore(path, password string, alias ...string) error
- func (cli *Client) LoadKeyStoreFromBytes(key []byte, password string, alias ...string) (err error)
- func (cli *Client) Options() Options
- func (cli *Client) Sign(data []byte, isDetached, withTSP bool) (signature []byte, err error)
- func (cli *Client) SignJWT(claims map[string]any, alg string) (string, error)
- func (cli *Client) SignPDF(pdfData []byte, opts PDFSignOptions) ([]byte, error)
- func (cli *Client) SignRaw(data []byte) (signature []byte, err error)
- func (cli *Client) SignWSSE(xmlData, id string) (string, error)
- func (cli *Client) SignXML(xmlData string) (string, error)
- func (cli *Client) SignXMLWithOptions(xmlData string, opts XMLSignOptions) (string, error)
- func (cli *Client) Underlying() *ckalkan.Client
- func (cli *Client) ValidateCert(cert string) (string, error)
- func (cli *Client) ValidateCertCRL(cert, crlPath string) (string, error)
- func (cli *Client) ValidateCertOCSP(cert string, url ...string) (string, error)
- func (cli *Client) Verify(signature []byte) (string, error)
- func (cli *Client) VerifyDetached(signature, data []byte) (string, error)
- func (cli *Client) VerifyJWT(token, cert string) (claims map[string]any, err error)
- func (cli *Client) VerifyPDF(pdfData []byte) (allValid bool, signers []PDFSignerInfo, err error)
- func (cli *Client) VerifyRaw(data, signature []byte, cert string) (result string, err error)
- func (cli *Client) VerifyWSSE(signedXML string) (string, error)
- func (cli *Client) VerifyXML(signedXML string) (result string, err error)
- func (cli *Client) X509CertificateGetInfo(cert string, prop ckalkan.CertProp) (string, error)
- func (cli *Client) X509CertificateGetSummary(cert string) (*Summary, error)
- func (cli *Client) X509ExportCertificateFromStore(alias string) (string, error)
- type Kalkan
- type KeyUsage
- type Logger
- type Option
- func WithCert(cert *x509.Certificate, typ ckalkan.CertType) Option
- func WithCerts(c []OptionsCert) Option
- func WithLogger(logger Logger) Option
- func WithOCSP(u string) Option
- func WithRemoteProdCerts(ctx context.Context) Option
- func WithRemoteTestCerts(ctx context.Context) Option
- func WithTSP(u string) Option
- type Options
- type OptionsCert
- type PDFSignOptions
- type PDFSignerInfo
- type Revocation
- type RevocationType
- type Summary
- type XMLSignOptions
Constants ¶
const ( CertTypeIndividual = "individual" CertTypeOrganization = "organization" )
const ( RevocationTypeOCSP RevocationType = "OCSP" RevocationTypeCRL RevocationType = "CRL" KeyUsageUnknown KeyUsage = "UNKNOWN" KeyUsageAuth KeyUsage = "AUTH" KeyUsageSign KeyUsage = "SIGN" )
Variables ¶
var ( OptsProd = []Option{ WithLogger(defaultLogger), WithTSP(prodTSP), WithOCSP(prodOCSP), } OptsTest = []Option{ WithLogger(defaultLogger), WithTSP(testTSP), WithOCSP(testOCSP), } )
var ( ErrInit = errors.New("unable to refer to KC_GetFunctionList") ErrHTTPCli = errors.New("http cli error") )
var ErrInvalidJWT = errors.New("invalid jwt format")
ErrInvalidJWT возвращается, если строка токена не соответствует формату JWT (header.payload.signature).
var ErrLoadKey = errors.New("load key error")
var ErrNoPDFSignatures = errors.New("gokalkan: pdf document contains no digital signatures")
ErrNoPDFSignatures возвращается VerifyPDF, если в документе нет ни одной подписи (аналог NoSignaturesFoundException в NCANode).
Functions ¶
func TrimXML ¶
TrimXML удаляет текстовые узлы, состоящие только из пробельных символов (аналог NCANode XmlService.removeWhitespace). Экспортировано отдельно от SignXMLWithOptions.TrimXML для использующих SignWSSE - тот принимает не полный документ, а фрагмент (см. SignWSSE), и оборачивает его в SOAP конверт сам, поэтому подрезать пробелы нужно до вызова SignWSSE.
func WrapWithWSSESoapEnvelope ¶
WrapWithWSSESoapEnvelope оборачивает XML документ в SOAP формат, а точнее записывает содержимое под тегом soap:Body
Types ¶
type CertIssuer ¶
type CertOrganization ¶
type CertOrganization struct {
Name string
BIN string
SubjectRole CertSubjectRole
}
type CertSubject ¶
type CertSubjectRole ¶
type CertSubjectRole int
const ( CertSubjectRoleUndefined CertSubjectRole = iota CertSubjectRoleCEO CertSubjectRoleSign CertSubjectRoleSignFinance CertSubjectRoleHR CertSubjectRoleEmployee )
type CertificateInfo ¶
type CertificateInfo struct {
Valid bool
Revocations []Revocation
NotBefore time.Time
NotAfter time.Time
KeyUsage KeyUsage
// KeyUser - набор меток назначения сертификата: "INDIVIDUAL" или "ORGANIZATION",
// и для организации дополнительно роль подписанта ("CEO", "SIGN", "SIGN_FINANCE",
// "HR", "EMPLOYEE"). Кроме "INDIVIDUAL"/"ORGANIZATION"/"CEO" (сверено с NCANode)
// остальные названия ролей - по аналогии, не сверялись с эталоном напрямую.
KeyUser []string
SerialNumber string
SignAlg string
PublicKey string
// Signature - "сырое" значение подписи сертификата (BIT STRING из
// Certificate.signatureValue), в base64. Извлекается обычным ASN.1-разбором
// внешней структуры X.509 (не зависит от алгоритма подписи, GOST в том числе).
Signature string
Subject CertSubject
Organization *CertOrganization
Issuer CertIssuer
}
CertificateInfo - расширенная информация о сертификате, аналог CertificateInfo в NCANode (Java): помимо разбора полей (см. Summary/X509CertificateGetSummary) содержит результат проверки отозванности и агрегированную валидность.
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
func (*Client) AddSigner ¶
func (cli *Client) AddSigner(cms, data []byte, isDetached, withTSP bool) (signature []byte, err error)
AddSigner дописывает ещё одну подпись в уже существующий CMS (со-подпись). Для этого перед вызовом обычно нужно загрузить другой ключ через LoadKeyStore. Существующие подписи (и их метки времени) не затрагиваются - TSP (если withTSP) прикладывается только к новой подписи.
func (*Client) ExtractCMS ¶
ExtractCMS возвращает данные, вложенные в attached (не detached) CMS, без проверки подписи по отдельному источнику данных.
func (*Client) GetCertFromCMS ¶
GetCertFromCMS обеспечивает получение сертификата из CMS.
func (*Client) GetCertFromXML ¶
GetCertFromXML обеспечивает получение сертификата из XML.
func (*Client) GetCertificateInfo ¶
func (cli *Client) GetCertificateInfo(cert string, checkOCSP bool, crlPath string) (*CertificateInfo, error)
GetCertificateInfo возвращает расширенную информацию о сертификате, включая результат проверки отозванности. checkOCSP включает проверку через OCSP (URL берётся из опций клиента, см. WithOCSP/OptsTest/OptsProd). crlPath, если не пустой, включает проверку по локальному файлу CRL (см. ValidateCertCRL).
func (*Client) GetTimeFromSig ¶
func (*Client) ListCertificateAliases ¶
ListCertificateAliases возвращает alias'ы сертификатов/ключей, загруженных текущим вызовом LoadKeyStore/LoadKeyStoreFromBytes (см. KC_GetCertificatesList).
Для типичного PKCS12 с одним ключом возвращает один alias. Поддержка нескольких alias'ов внутри одного PKCS12 не подтверждена вживую (в SDK-примере KC_GetCertificatesList используется только для аппаратных токенов), но сама функция не привязана к типу хранилища - ожидаем, что она корректно перечислит и несколько ключей в PKCS12, если LoadKeyStore (alias="") их все загружает.
func (*Client) LoadCertFromBytes ¶
func (*Client) LoadKeyStore ¶
LoadKeyStore загружает PKCS12. alias - опциональный alias ключа/сертификата внутри контейнера (для PKCS12 с несколькими ключами, см. ListCertificateAliases); при отсутствии передаётся "" - тот же дефолт, что был раньше.
func (*Client) LoadKeyStoreFromBytes ¶
LoadKeyStoreFromBytes загружает PKCS12. alias - см. LoadKeyStore.
func (*Client) SignJWT ¶
SignJWT формирует и подписывает JWT текущим загруженным ключом (см. LoadKeyStore/LoadKeyStoreFromBytes). alg - идентификатор алгоритма подписи в терминах NCANode/kz.gov.pki java-jwt: "GG2015"/"GG2004" для GOST-ключей, "RS256"/"RS384"/"RS512"/"ES256"/"ES384"/"ES512" для остальных - должен соответствовать алгоритму загруженного ключа.
func (*Client) SignPDF ¶
func (cli *Client) SignPDF(pdfData []byte, opts PDFSignOptions) ([]byte, error)
SignPDF подписывает PDF документ (CAdES-detached, incremental update). Текущий загруженный ключ (см. LoadKeyStore/LoadKeyStoreFromBytes) используется как подписант.
func (*Client) SignRaw ¶
SignRaw подписывает произвольные данные текущим загруженным ключом (см. LoadKeyStore/LoadKeyStoreFromBytes) и возвращает "сырую" подпись - без CMS-обёртки, в отличие от Sign. Аналог /x509/sign в NCANode.
func (*Client) SignWSSE ¶
SignWSSE подписывает документ в формате WS-Security (SmartBridge). xmlData - содержимое soap:Body (не полный конверт, конверт строится автоматически).
func (*Client) SignXMLWithOptions ¶
func (cli *Client) SignXMLWithOptions(xmlData string, opts XMLSignOptions) (string, error)
SignXMLWithOptions - расширенная версия SignXML с поддержкой опций, аналогичных NCANode (/xml/sign): referenceUri, clearSignatures, trimXml. Для нескольких подписантов вызывайте последовательно (загружая между вызовами очередной ключ через LoadKeyStore) - каждый новый вызов добавляет ещё один ds:Signature, не трогая предыдущие.
func (*Client) Underlying ¶
Underlying возвращает текущий ckalkan.Client, используемый клиентом gokalkan.
func (*Client) ValidateCertCRL ¶
ValidateCertCRL проверяет сертификат по списку отозванных сертификатов (CRL). crlPath - путь к локальному файлу CRL (нативная библиотека не умеет скачивать CRL самостоятельно, файл нужно предварительно загрузить, см. например test.pki.gov.kz/crl/nca_gost2022_test.crl для тестового окружения).
func (*Client) ValidateCertOCSP ¶
func (*Client) VerifyDetached ¶
VerifyDetached обеспечивает проверку отделенной подписи CMS (detached signature) в base64.
func (*Client) VerifyJWT ¶
VerifyJWT проверяет подпись JWT по сертификату cert (PEM) и возвращает разобранные claims. Не проверяет стандартные временные claims (exp/nbf) - это ответственность вызывающего кода.
func (*Client) VerifyPDF ¶
func (cli *Client) VerifyPDF(pdfData []byte) (allValid bool, signers []PDFSignerInfo, err error)
VerifyPDF проверяет все подписи в PDF документе (по /ByteRange и /Contents каждого поля подписи). Возвращает ErrNoPDFSignatures, если подписей нет.
func (*Client) VerifyRaw ¶
VerifyRaw проверяет "сырую" подпись (см. SignRaw) данных по сертификату cert (PEM). Аналог /x509/verify в NCANode.
func (*Client) VerifyWSSE ¶
VerifyWSSE проверяет подпись SOAP-конверта, подписанного SignWSSE. Нативная проверка XML-подписи (VerifyXML) сама резолвит сертификат подписанта через wsse:KeyIdentifier в KeyInfo, поэтому отдельной реализации не требуется - это тонкий алиас для симметрии с SignWSSE/Java NCANode (/wsse/verify).
func (*Client) X509CertificateGetInfo ¶
func (*Client) X509CertificateGetSummary ¶
X509CertificateGetSummary возвращает информацию о сертификате. Используйте только после Verify, если используется для проверки подписей
func (*Client) X509ExportCertificateFromStore ¶
X509ExportCertificateFromStore экспортирует сертификат текущего загруженного (через LoadKeyStore/LoadKeyStoreFromBytes) ключа. alias обычно "" - тот же, что передавался при загрузке хранилища.
type Kalkan ¶
type Kalkan interface {
LoadKeyStore(path, password string, alias ...string) (err error)
LoadKeyStoreFromBytes(key []byte, password string, alias ...string) (err error)
ListCertificateAliases() ([]string, error)
Sign(data []byte, isDetached, withTSP bool) (signature []byte, err error)
AddSigner(cms, data []byte, isDetached, withTSP bool) (signature []byte, err error)
SignRaw(data []byte) (signature []byte, err error)
VerifyRaw(data, signature []byte, cert string) (string, error)
SignJWT(claims map[string]any, alg string) (string, error)
VerifyJWT(token, cert string) (claims map[string]any, err error)
SignPDF(pdfData []byte, opts PDFSignOptions) ([]byte, error)
VerifyPDF(pdfData []byte) (allValid bool, signers []PDFSignerInfo, err error)
SignXML(xml string) (signedXML string, err error)
SignXMLWithOptions(xmlData string, opts XMLSignOptions) (string, error)
SignWSSE(xml, id string) (signedXML string, err error)
Verify(signature []byte) (string, error)
VerifyXML(signedXML string) (string, error)
VerifyWSSE(signedXML string) (string, error)
VerifyDetached(signature, data []byte) (string, error)
ExtractCMS(cms []byte) ([]byte, error)
GetCertFromCMS(cms []byte, signID int) (string, error)
GetCertFromXML(xml string, signID int) ([]byte, error)
ValidateCert(cert string) (string, error)
ValidateCertOCSP(cert string, url ...string) (string, error)
ValidateCertCRL(cert, crlPath string) (string, error)
X509CertificateGetInfo(inCert string, prop ckalkan.CertProp) (string, error)
X509ExportCertificateFromStore(alias string) (string, error)
HashSHA256(data []byte) ([]byte, error)
HashGOST95(data []byte) ([]byte, error)
Close() error
}
Kalkan - это обертка над методами KalkanCrypt.
type KeyUsage ¶
type KeyUsage string
KeyUsage - упрощённое (в терминах NCA) назначение ключа сертификата. Это НЕ побитовая семантика стандартного X.509 KeyUsage, а бизнес-классификация, которую использует kz.gov.pki-экосистема: сертификат либо для аутентификации, либо для подписи.
type Option ¶
type Option func(o *Options)
func WithCerts ¶
func WithCerts(c []OptionsCert) Option
func WithLogger ¶
func WithRemoteProdCerts ¶
func WithRemoteTestCerts ¶
type Options ¶
type Options struct {
TSP string `json:"tsp"` // URL метки времени
OCSP string `json:"ocsp"` // URL сервиса онлайн проверки статуса сертификата
Certs []OptionsCert `json:"certs"` // Корневые сертификатам
LoadCerts bool `json:"load_certs"`
// contains filtered or unexported fields
}
type OptionsCert ¶
type OptionsCert struct {
Cert *x509.Certificate
Type ckalkan.CertType
}
type PDFSignOptions ¶
PDFSignOptions - опции подписи PDF, аналог PdfSignRequest.PdfSigner в NCANode.
type PDFSignerInfo ¶
type PDFSignerInfo struct {
Valid bool
// Reason/Location/ContactInfo - nil, если соответствующий ключ подписи
// отсутствует в PDF (не то же самое, что пустая строка - см. IsNull() у
// pdf.Value), указатель на "" - если ключ присутствует, но пуст.
Reason *string
Location *string
ContactInfo *string
SignDate time.Time
// VerifyInfo - человекочитаемый отчёт нативной проверки (см. Verify/
// VerifyDetached), пусто если Valid == false из-за ошибки более
// раннего этапа (например, битые /ByteRange).
VerifyInfo string
// SubFilter - значение /SubFilter словаря подписи (например
// "ETSI.CAdES.detached") - формат самой подписи на уровне PDF.
SubFilter string
// CMS - сырые байты подписи (значение /Contents, detached CMS) - для
// извлечения сертификата подписанта см. Client.GetCertFromCMS.
CMS []byte
}
PDFSignerInfo - информация об одной подписи в PDF документе.
type Revocation ¶
type Revocation struct {
Type RevocationType
Revoked bool
Reason string
// RevokedAt - точное время отзыва, если revoked=true и его удалось
// извлечь из текстового отчёта нативной библиотеки (X509ValidateCertificate
// возвращает секцию "Revocation Time: DD.MM.YYYY HH:MM:SS +HH:MM" при
// проверке через OCSP - см. revokedAtRe). Zero value, если не найдено.
RevokedAt time.Time
}
Revocation - результат одной проверки отозванности (OCSP или CRL).
type RevocationType ¶
type RevocationType string
RevocationType - способ проверки отозванности сертификата.
type Summary ¶
type Summary struct {
Type CertType
Subject CertSubject
Organization *CertOrganization
Issuer CertIssuer
PublicKey string
SerialNumber string
NotAfter time.Time
NotBefore time.Time
}
type XMLSignOptions ¶
type XMLSignOptions struct {
// ReferenceURI - id тэга, который нужно подписать (Reference URI="#id").
// Пусто - подписывается документ целиком (Reference URI="").
ReferenceURI string
// ClearSignatures - удалить существующие ds:Signature перед подписью.
ClearSignatures bool
// TrimXML - удалить текстовые узлы, состоящие только из пробельных
// символов, перед подписью (влияет на канонизированные байты).
TrimXML bool
}
XMLSignOptions - опции подписи XML, аналог полей XmlSignRequest в NCANode.