mirror of
https://github.com/xiaoqidun/ofdgo.git
synced 2026-10-29 13:56:32 +08:00
1 parent
5e0da3da28
commit
ee6c9f6a16
82 files changed
+4316
-4310
No files matched your search
+31
-31
@@ -45,37 +45,6 @@ type ParsedSignatureSeal struct {
|
||||
Height float64
|
||||
}
|
||||
|
||||
// ParseSignatureSeal 解析独立SES印章供展示使用,不验证授权、有效期或制章者信任
|
||||
// 入参: data DER编码的电子印章
|
||||
// 返回: *ParsedSignatureSeal 印章信息及独立图像副本, error 解析错误
|
||||
func ParseSignatureSeal(data []byte) (*ParsedSignatureSeal, error) {
|
||||
var raw asn1.RawValue
|
||||
rest, err := asn1.Unmarshal(data, &raw)
|
||||
if err != nil || len(rest) != 0 || raw.Tag != asn1.TagSequence || raw.Class != asn1.ClassUniversal {
|
||||
return nil, fmt.Errorf("invalid SES seal DER")
|
||||
}
|
||||
seal, err := parseSESSeal(raw)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items, _ := asn1Children(raw.Bytes)
|
||||
info, _ := asn1Children(items[0].Bytes)
|
||||
picture, _ := asn1Children(info[3].Bytes)
|
||||
width, err := asn1Integer(picture[2])
|
||||
if err != nil || width <= 0 {
|
||||
return nil, fmt.Errorf("invalid seal picture width")
|
||||
}
|
||||
height, err := asn1Integer(picture[3])
|
||||
if err != nil || height <= 0 {
|
||||
return nil, fmt.Errorf("invalid seal picture height")
|
||||
}
|
||||
format, image := probeSealMedia(seal.PicData)
|
||||
if len(image) == 0 || format != seal.PicType {
|
||||
return nil, fmt.Errorf("invalid seal picture")
|
||||
}
|
||||
return &ParsedSignatureSeal{Info: seal.Info, Type: format, Data: append([]byte(nil), image...), Width: float64(width), Height: float64(height)}, nil
|
||||
}
|
||||
|
||||
// sesSignature SES签章值
|
||||
type sesSignature struct {
|
||||
Timestamp []byte
|
||||
@@ -137,6 +106,37 @@ type sesVerifyResult struct {
|
||||
SignatureTime time.Time
|
||||
}
|
||||
|
||||
// ParseSignatureSeal 解析独立SES印章供展示使用,不验证授权、有效期或制章者信任
|
||||
// 入参: data DER编码的电子印章
|
||||
// 返回: *ParsedSignatureSeal 印章信息及独立图像副本, error 解析错误
|
||||
func ParseSignatureSeal(data []byte) (*ParsedSignatureSeal, error) {
|
||||
var raw asn1.RawValue
|
||||
rest, err := asn1.Unmarshal(data, &raw)
|
||||
if err != nil || len(rest) != 0 || raw.Tag != asn1.TagSequence || raw.Class != asn1.ClassUniversal {
|
||||
return nil, fmt.Errorf("invalid SES seal DER")
|
||||
}
|
||||
seal, err := parseSESSeal(raw)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items, _ := asn1Children(raw.Bytes)
|
||||
info, _ := asn1Children(items[0].Bytes)
|
||||
picture, _ := asn1Children(info[3].Bytes)
|
||||
width, err := asn1Integer(picture[2])
|
||||
if err != nil || width <= 0 {
|
||||
return nil, fmt.Errorf("invalid seal picture width")
|
||||
}
|
||||
height, err := asn1Integer(picture[3])
|
||||
if err != nil || height <= 0 {
|
||||
return nil, fmt.Errorf("invalid seal picture height")
|
||||
}
|
||||
format, image := probeSealMedia(seal.PicData)
|
||||
if len(image) == 0 || format != seal.PicType {
|
||||
return nil, fmt.Errorf("invalid seal picture")
|
||||
}
|
||||
return &ParsedSignatureSeal{Info: seal.Info, Type: format, Data: append([]byte(nil), image...), Width: float64(width), Height: float64(height)}, nil
|
||||
}
|
||||
|
||||
// parseSESSignature 解析SES签章值
|
||||
// 入参: data 签章值数据
|
||||
// 返回: *sesSignature SES签章值, error 错误信息
|
||||
|
||||
Reference in new issue
Block a user