+
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
3abde4d
feat: implemented methods from libKalkanCrypt, which use zip files
Tr8ch Dec 17, 2023
3b747b7
feat: example file for documentation.
Tr8ch Dec 17, 2023
edd7d7d
ckalkan methods for XML added
blsbk Dec 17, 2023
c74d300
feat: implemented SignHash method from libKalkanCrypt
Tr8ch Dec 17, 2023
ce36564
feat: implemented GetTimeFromSig method from ckalkan
Tr8ch Dec 17, 2023
fd6b647
fix: Correct X509ValidateCertificate method to accept flags
ymoldabe Dec 17, 2023
a98e95b
feat: Add types/kalkan.go
ymoldabe Dec 17, 2023
238709b
fix: Correct ValidateCert and ValidateCertOCSP methods
ymoldabe Dec 17, 2023
870119e
feat: Enhance VerifyXML method
ymoldabe Dec 17, 2023
1433dcc
feat: Implement SignXML and SignHash methods
ymoldabe Dec 17, 2023
2a1b3de
feat: X509ExportCertificateFromStore method is implemented from ckalkan
saboopher Dec 17, 2023
0c0edac
feat: X509CertificateGetInfo method is implemented from ckalkan, Cert…
saboopher Dec 17, 2023
f4d66d1
feat: X509ExportCertificateFromStore method is implemented from ckalkan
saboopher Dec 17, 2023
0d162d1
feat: GetCertFromXML method is implemented from ckalkan
saboopher Dec 17, 2023
9935249
feat: examples for GetCertFromXML, X509CertificateGetInfo, X509Export…
saboopher Dec 17, 2023
baeb8e3
fix: use verifyInput struct in input
abdullayerezhep Dec 17, 2023
4e88272
Merge branch 'feat/gokalkan-enhancement' of github.com:Tr8ch/gokalkan…
abdullayerezhep Dec 17, 2023
1cd3fe5
feat: Add examples for SignXML, VerifyXML, SignHash methods
ymoldabe Dec 17, 2023
0ca5a9c
fix: closing NewClient of gokalkan in example file
Tr8ch Dec 17, 2023
fdfe84a
feat: implement SetProxy method from ckalkan
abdullayerezhep Dec 18, 2023
eb76473
Merge branch 'feat/gokalkan-enhancement' of github.com:Tr8ch/gokalkan…
abdullayerezhep Dec 18, 2023
7783fbf
fix: some comments
Tr8ch Dec 18, 2023
3706eee
feat: implemented GetSigAlgFromXML from ckalkan in gokalkan
Tr8ch Dec 18, 2023
2ac60c6
feat: expanded the Kalkan interface{} with new methods
Tr8ch Dec 18, 2023
1186eeb
fix: flag -> flags everywhere, comment for GetTimeForSig()
Tr8ch Dec 19, 2023
0f8ff3a
fix: signId -> signID
Tr8ch Dec 19, 2023
5084e22
refactor: Modify VerifyXML method
ymoldabe Dec 19, 2023
a8895e8
feat: Update examples
ymoldabe Dec 19, 2023
5b07ebb
fix: GetCertFromXML returns []byte instead of string
saboopher Dec 20, 2023
ecb56a7
fix: GetCertFromXML returns []byte instead of string
saboopher Dec 20, 2023
e91d14d
fix: сhanged the incoming parameters for GetTimeFromSIg()
Tr8ch Dec 20, 2023
1e7d3a7
fix: сhanged the incoming parameters for GetTimeFromSIg()
Tr8ch Dec 20, 2023
531a5ea
feat: Update signatures for GetCertFromCMS and GetCertFromXML methods
ymoldabe Dec 23, 2023
72963a0
feat: Update signatures for GetCertFromCMS and GetCertFromXML methods
ymoldabe Dec 23, 2023
d25bef8
feat: Update methods in kalkan.go, modify ValidateCert, remove Valida…
ymoldabe Dec 23, 2023
a46f099
fix: X509ExortCertificateFromStore() method remove input and change o…
abdullayerezhep Dec 27, 2023
6acae17
Merge branch 'feat/gokalkan-enhancement' of github.com:Tr8ch/gokalkan…
abdullayerezhep Dec 27, 2023
e00a1c7
fix: parameters for Sign, SignXML, SignHash are changed to struct
saboopher Jan 2, 2024
20d5c36
fix: parameters for VerifyXML are changed to struct
saboopher Jan 2, 2024
e567a8c
fix: X509CertificateGetInfo method returns a struct CertificateInfo
saboopher Jan 2, 2024
9823745
fix: examples are fixed
saboopher Jan 2, 2024
e087180
fix
Tr8ch Jul 22, 2024
b3a63a1
fix
Tr8ch Jul 22, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions ckalkan/get_cert_from_cms.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import (
)

// GetCertFromCMS обеспечивает получение сертификата из CMS.
func (cli *Client) GetCertFromCMS(cms string, signID int, flag Flag) (cert string, err error) {
func (cli *Client) GetCertFromCMS(cms string, signID int, flags Flag) (cert string, err error) {
defer func() {
if r := recover(); r != nil {
if err != nil {
Expand All @@ -40,7 +40,7 @@ func (cli *Client) GetCertFromCMS(cms string, signID int, flag Flag) (cert strin
cCMS,
C.int(len(cms)),
C.int(signID),
C.int(int(flag)),
C.int(int(flags)),
(*C.char)(outCert),
(*C.int)(unsafe.Pointer(&outCertLen)),
))
Expand Down
55 changes: 55 additions & 0 deletions ckalkan/get_cert_from_xml.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package ckalkan

// #cgo LDFLAGS: -ldl
// #include <dlfcn.h>
// #include "KalkanCrypt.h"
//
// unsigned long getCertFromXML(const char *inXML, int inXMLLength, int inSignID, char *outCert, int *outCertLength) {
// return kc_funcs->KC_getCertFromXML(inXML, inXMLLength, inSignID, outCert, outCertLength);
// }
import "C"
import (
"fmt"
"unsafe"
)

// GetCertFromXML обеспечивает получение сертификата из XML.
func (cli *Client) GetCertFromXML(xml string, signID int) (cert []byte, err error) {
defer func() {
if r := recover(); r != nil {
if err != nil {
err = fmt.Errorf("%w: panic: %s", err, r)
return
}

err = fmt.Errorf("%w: %s", ErrPanic, r)
}
}()

cXML := C.CString(xml)
defer C.free(unsafe.Pointer(cXML))

outCertLen := 50000
outCert := C.malloc(C.ulong(C.sizeof_uchar * outCertLen))
defer C.free(outCert)

cli.mu.Lock()
defer cli.mu.Unlock()

rc := int(C.getCertFromXML(
cXML,
C.int(len(xml)),
C.int(signID),
(*C.char)(outCert),
(*C.int)(unsafe.Pointer(&outCertLen)),
))

err = cli.wrapError(rc)
if err != nil {
return cert, err
}

cert = C.GoBytes(unsafe.Pointer(outCert), C.int(outCertLen))

return cert, nil
}
56 changes: 56 additions & 0 deletions ckalkan/get_cert_from_zip_file.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package ckalkan

// #cgo LDFLAGS: -ldl
// #include <dlfcn.h>
// #include "KalkanCrypt.h"
//
// unsigned long getCertFromZipFile(char* inZipFile, int flags, int inSignID, char *outCert, int *outCertLength) {
// return kc_funcs->KC_getCertFromZipFile(inZipFile, flags, inSignID, outCert, outCertLength);
// }
import "C"
import (
"fmt"
"unsafe"
)

// GetCertFromZipFile обеспечивает получение сертификата из .zip архива.
func (cli *Client) GetCertFromZipFile(zipFile string, flags Flag, signID int) (cert string, err error) {
defer func() {
if r := recover(); r != nil {
if err != nil {
err = fmt.Errorf("%w: panic: %s", err, r)
return
}

err = fmt.Errorf("%w: %s", ErrPanic, r)
}
}()

cli.mu.Lock()
defer cli.mu.Unlock()

cZipFile := C.CString(zipFile)
defer C.free(unsafe.Pointer(cZipFile))

outCertLen := 50000
outCert := C.malloc(C.ulong(C.sizeof_uchar * outCertLen))
defer C.free(outCert)

rc := int(C.getCertFromZipFile(
cZipFile,
C.int(int(flags)),
C.int(signID),
(*C.char)(outCert),
(*C.int)(unsafe.Pointer(&outCertLen)),
))

err = cli.wrapError(rc)
if err != nil {
return cert, err
}

cert = C.GoString((*C.char)(outCert))

return cert, nil

}
54 changes: 54 additions & 0 deletions ckalkan/get_sig_alg_from_xml.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package ckalkan

// #cgo LDFLAGS: -ldl
// #include <dlfcn.h>
// #include "KalkanCrypt.h"
//
// unsigned long getSigAlgFromXML(const char *xml_in, int xml_in_size, char *retSigAlg, int *retLen) {
// return kc_funcs->KC_getSigAlgFromXML(xml_in, xml_in_size, retSigAlg, retLen);
// }
import "C"
import (
"fmt"
"unsafe"
)

// GetSigAlgFromXML обеспечивает получение алгоритма подписи из XML.
func (cli *Client) GetSigAlgFromXML(xmlIn string) (sigAlg string, err error) {
defer func() {
if r := recover(); r != nil {
if err != nil {
err = fmt.Errorf("%w: panic: %s", err, r)
return
}

err = fmt.Errorf("%w: %s", ErrPanic, r)
}
}()

cli.mu.Lock()
defer cli.mu.Unlock()

cXML := C.CString(xmlIn)
defer C.free(unsafe.Pointer(cXML))

retLen := 50000
retSigAlg := C.malloc(C.ulong(C.sizeof_uchar * retLen))
defer C.free(retSigAlg)

rc := int(C.getSigAlgFromXML(
cXML,
C.int(len(xmlIn)),
(*C.char)(retSigAlg),
(*C.int)(unsafe.Pointer(&retLen)),
))

err = cli.wrapError(rc)
if err != nil {
return sigAlg, err
}

sigAlg = C.GoString((*C.char)(retSigAlg))

return sigAlg, nil
}
58 changes: 58 additions & 0 deletions ckalkan/get_time_from_sig.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package ckalkan

// #cgo LDFLAGS: -ldl
// #include <dlfcn.h>
// #include "KalkanCrypt.h"
//
// unsigned long GetTimeFromSig(char *inData, int inDataLength, int flags, int inSigId, time_t *outDateTime) {
// return kc_funcs->KC_GetTimeFromSig(inData, inDataLength, flags, inSigId, outDateTime);
// }
import "C"
import (
"fmt"
"time"
"unsafe"
)

// GetTimeFromSig обеспечивает получение времени подписи из CMS.
//
// *inData - входные данные (подпись, в текущей версии только формата CAdES)*
//
// *flags - должны быть установлены флаги входящего формата(PEM, DER, ...etc)*
func (cli *Client) GetTimeFromSig(inData string, flags Flag, inSigId int) (outDateTime time.Time, err error) {
defer func() {
if r := recover(); r != nil {
if err != nil {
err = fmt.Errorf("%w: panic: %s", err, r)
return
}

err = fmt.Errorf("%w: %s", ErrPanic, r)
}
}()

cli.mu.Lock()
defer cli.mu.Unlock()

cData := C.CString(inData)
defer C.free(unsafe.Pointer(cData))

var outDateTimeC C.time_t

rc := int(C.GetTimeFromSig(
cData,
C.int(len(inData)),
C.int(int(flags)),
C.int(inSigId),
&outDateTimeC,
))

err = cli.wrapError(rc)
if err != nil {
return outDateTime, err
}

outDateTime = time.Unix(int64(outDateTimeC), 0)

return outDateTime, nil
}
4 changes: 2 additions & 2 deletions ckalkan/hash_data.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ const (
)

// HashData возвращается хеш dataB64 в base64.
func (cli *Client) HashData(algo HashAlgo, dataB64 string, flag Flag) (result string, err error) {
func (cli *Client) HashData(algo HashAlgo, dataB64 string, flags Flag) (result string, err error) {
defer func() {
if r := recover(); r != nil {
if err != nil {
Expand Down Expand Up @@ -51,7 +51,7 @@ func (cli *Client) HashData(algo HashAlgo, dataB64 string, flag Flag) (result st

rc := int(C.hashData(
kcAlgo,
C.int(int(flag)),
C.int(int(flags)),
kcInData,
C.int(inDataLength),
(*C.uchar)(outData),
Expand Down
4 changes: 2 additions & 2 deletions ckalkan/set_proxy.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import (
)

// SetProxy устанавливает прокси.
func (cli *Client) SetProxy(flag Flag, proxyURL *url.URL) (err error) {
func (cli *Client) SetProxy(flags Flag, proxyURL *url.URL) (err error) {
defer func() {
if r := recover(); r != nil {
if err != nil {
Expand Down Expand Up @@ -48,7 +48,7 @@ func (cli *Client) SetProxy(flag Flag, proxyURL *url.URL) (err error) {
defer C.free(unsafe.Pointer(cProxyPass))

rc := int(C.setProxy(
C.int(int(flag)),
C.int(int(flags)),
cProxyAddr,
cProxyPort,
cProxyUser,
Expand Down
4 changes: 2 additions & 2 deletions ckalkan/sign_data.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import (
)

// SignData используется для подписи текста в формате base64.
func (cli *Client) SignData(inSign, inData, alias string, flag Flag) (result string, err error) {
func (cli *Client) SignData(inSign, inData, alias string, flags Flag) (result string, err error) {
defer func() {
if r := recover(); r != nil {
if err != nil {
Expand Down Expand Up @@ -48,7 +48,7 @@ func (cli *Client) SignData(inSign, inData, alias string, flag Flag) (result str

rc := int(C.signData(
kcAlias,
C.int(int(flag)),
C.int(int(flags)),
kcInData,
C.int(inDataLength),
(*C.uchar)(kcInSign),
Expand Down
65 changes: 65 additions & 0 deletions ckalkan/sign_hash.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package ckalkan

// #cgo LDFLAGS: -ldl
// #include <dlfcn.h>
// #include "KalkanCrypt.h"
//
// unsigned long signHash(char *alias, int flags, char *inHash, int inHashLength, unsigned char *outSign, int *outSignLength) {
// return kc_funcs->SignHash(alias, flags, inHash, inHashLength, outSign, outSignLength);
// }
import "C"
import (
"fmt"
"unsafe"
)

// SignHash Подписывает входные хэшированные данные.
//
// Параметры:
// - algo - алгоритм подписывания ("sha256", "Gost34311_95", "GostR3411_2015_512")
// - inHash - хэшированные данные
// - flag - флаги
func (cli *Client) SignHash(algo HashAlgo, inHash string, flags Flag) (signedHash string, err error) {
defer func() {
if r := recover(); r != nil {
if err != nil {
err = fmt.Errorf("%w: panic: %s", err, r)
return
}

err = fmt.Errorf("%w: %s", ErrPanic, r)
}
}()

cli.mu.Lock()
defer cli.mu.Unlock()

cAlias := C.CString(string(algo))
defer C.free(unsafe.Pointer(cAlias))

cInHash := C.CString(inHash)
defer C.free(unsafe.Pointer(cInHash))

inHashLength := len(inHash)
outSignLength := 50000 + 2*inHashLength
outSign := C.malloc(C.ulong(C.sizeof_uchar * outSignLength))
defer C.free(outSign)

rc := int(C.signHash(
cAlias,
C.int(int(flags)),
cInHash,
C.int(inHashLength),
(*C.uchar)(outSign),
(*C.int)(unsafe.Pointer(&outSignLength)),
))

err = cli.wrapError(rc)
if err != nil {
return signedHash, err
}

signedHash = C.GoString((*C.char)(outSign))

return signedHash, nil
}
Loading
点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载