forked from gokalkan/gokalkan
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathverify.go
More file actions
65 lines (53 loc) · 2.43 KB
/
Copy pathverify.go
File metadata and controls
65 lines (53 loc) · 2.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package gokalkan
import (
"encoding/base64"
"strings"
"github.com/ncanode-kz/gokalkan/ckalkan"
)
// Verify обеспечивает проверку подписи CMS в base64.
func (cli *Client) Verify(signature []byte) (string, error) {
signatureB64 := base64.StdEncoding.EncodeToString(signature)
flags := ckalkan.FlagSignCMS | ckalkan.FlagInBase64 | ckalkan.FlagOutBase64
resp, err := cli.kc.VerifyData(signatureB64, "", "", flags)
if err != nil {
return "", err
}
return string(resp.Info), err
}
// VerifyXML обеспечивает проверку подписи данных в формате XML.
func (cli *Client) VerifyXML(signedXML string) (result string, err error) {
return cli.kc.VerifyXML(signedXML, "", 0)
}
// VerifyWSSE проверяет подпись SOAP-конверта, подписанного SignWSSE. Нативная
// проверка XML-подписи (VerifyXML) сама резолвит сертификат подписанта через
// wsse:KeyIdentifier в KeyInfo, поэтому отдельной реализации не требуется -
// это тонкий алиас для симметрии с SignWSSE/Java NCANode (/wsse/verify).
func (cli *Client) VerifyWSSE(signedXML string) (string, error) {
return cli.VerifyXML(signedXML)
}
// ExtractCMS возвращает данные, вложенные в attached (не detached) CMS,
// без проверки подписи по отдельному источнику данных.
func (cli *Client) ExtractCMS(cms []byte) ([]byte, error) {
signatureB64 := base64.StdEncoding.EncodeToString(cms)
flags := ckalkan.FlagSignCMS | ckalkan.FlagInBase64 | ckalkan.FlagOutBase64
resp, err := cli.kc.VerifyData(signatureB64, "", "", flags)
if err != nil {
return nil, err
}
return base64.StdEncoding.DecodeString(strings.TrimSpace(string(resp.Data)))
}
// VerifyDetached обеспечивает проверку отделенной подписи
// CMS (detached signature) в base64.
func (cli *Client) VerifyDetached(signature, data []byte) (string, error) {
signatureB64 := base64.StdEncoding.EncodeToString(signature)
dataB64 := base64.StdEncoding.EncodeToString(data)
flags := ckalkan.FlagSignCMS
flags |= ckalkan.FlagInBase64
flags |= ckalkan.FlagIn2Base64
flags |= ckalkan.FlagDetachedData
resp, err := cli.kc.VerifyData(signatureB64, dataB64, "", flags)
if err != nil {
return "", err
}
return string(resp.Info), err
}