feat(签名验签): 完善签名验签功能
build.yaml / build (push) Successful in 33s

This commit is contained in:
2026-07-08 13:02:08 +08:00
parent 6bfb11df71
commit 06c5cea4d1
4 changed files with 617 additions and 58 deletions
+38 -2
View File
@@ -19,6 +19,8 @@ import (
"encoding/asn1"
"encoding/binary"
"encoding/xml"
"fmt"
"strconv"
"strings"
)
@@ -113,10 +115,17 @@ func (r *Reader) SignatureStampPositions(stamps []SignatureStamp) ([]SignatureSt
pages := signaturePageNumbers(doc)
positions := make([]SignatureStampPosition, 0, len(stamps))
for _, stamp := range stamps {
box, _ := ParseBox(stamp.Boundary)
page, ok := pages[stamp.PageRef]
if !ok {
return nil, fmt.Errorf("signature stamp page not found: %s", stamp.PageRef)
}
box, err := parseSignatureStampBox(stamp.Boundary)
if err != nil {
return nil, err
}
positions = append(positions, SignatureStampPosition{
ID: stamp.ID,
Page: pages[stamp.PageRef],
Page: page,
PageID: stamp.PageRef,
Boundary: stamp.Boundary,
Box: box,
@@ -125,6 +134,33 @@ func (r *Reader) SignatureStampPositions(stamps []SignatureStamp) ([]SignatureSt
return positions, nil
}
// parseSignatureStampBox 解析签名外观区域
// 入参: s 区域字符串
// 返回: Box 矩形对象, error 错误信息
func parseSignatureStampBox(s string) (Box, error) {
parts := strings.Fields(s)
if len(parts) != 4 {
return Box{}, fmt.Errorf("invalid signature stamp boundary: %s", s)
}
x, err := strconv.ParseFloat(parts[0], 64)
if err != nil {
return Box{}, fmt.Errorf("invalid signature stamp boundary: %s", s)
}
y, err := strconv.ParseFloat(parts[1], 64)
if err != nil {
return Box{}, fmt.Errorf("invalid signature stamp boundary: %s", s)
}
w, err := strconv.ParseFloat(parts[2], 64)
if err != nil {
return Box{}, fmt.Errorf("invalid signature stamp boundary: %s", s)
}
h, err := strconv.ParseFloat(parts[3], 64)
if err != nil {
return Box{}, fmt.Errorf("invalid signature stamp boundary: %s", s)
}
return Box{X: x, Y: y, W: w, H: h}, nil
}
// parseSignatures 解析签名文件
// 入参: doc 文档结构
// 返回: error 错误信息