feat: register simplified cryptosm capabilities to jsmod

This commit is contained in:
AI Engineer 2026-05-30 18:53:32 +08:00
parent 4d57b22db8
commit 6af336d550
4 changed files with 88 additions and 0 deletions

View File

@ -1,5 +1,10 @@
# Changelog: @go/crypto-sm
## [v1.3.2] - 2026-05-30
### Added
- **JSMOD 注册**:将核心国密能力注册到 `jsmod` (注册名: `cryptoSM`)。提供 SM3, SM4 (GCM/CBC), SM2 (加密/签名) 的极简无状态 API。
## [v1.1.0] - 2026-05-07
### Added

1
go.mod
View File

@ -6,6 +6,7 @@ require (
apigo.cc/go/cast v1.3.3
apigo.cc/go/crypto v1.3.1
apigo.cc/go/encoding v1.3.1
apigo.cc/go/jsmod v1.0.0
apigo.cc/go/safe v1.3.1
github.com/emmansun/gmsm v0.28.0
)

2
go.sum
View File

@ -4,6 +4,8 @@ apigo.cc/go/crypto v1.3.1 h1:ulQ2zX9bUWirk0sEacx1Srsjs2Jow7HlZq7ED7msNcg=
apigo.cc/go/crypto v1.3.1/go.mod h1:SwHlBFDPddttWgFFtzsEMla8CM/rcFy9nvdsJjW4CIs=
apigo.cc/go/encoding v1.3.1 h1:y8O58KYAyulkThg1O2ji2BqjnFoSvk42sit9I3z+K7Y=
apigo.cc/go/encoding v1.3.1/go.mod h1:xAJk5b83VZ31mXMTnyp0dfMoBKfT/AHDn0u+cQfojgY=
apigo.cc/go/jsmod v1.0.0 h1:lVQMq0tCno4kbHlQ3j5wzsm+v24J+bznIoHxpton0pE=
apigo.cc/go/jsmod v1.0.0/go.mod h1:bmyeZtOAP/j5am+YRnaiM89smysK24K7ebk0koFtsSw=
apigo.cc/go/rand v1.3.1 h1:7FvsI6PtQ5XrWER0dTiLVo0p7GIxRidT/TBKhVy93j8=
apigo.cc/go/rand v1.3.1/go.mod h1:mZ/4Soa3bk+XvDaqPWJuUe1bfEi4eThBj1XmEAuYxsk=
apigo.cc/go/safe v1.3.1 h1:irTCqPAC97gGsX/Lw5AzLelDt1xXLEZIAaVhLELWe9Q=

80
js_export.go Normal file
View File

@ -0,0 +1,80 @@
package sm
import (
"apigo.cc/go/jsmod"
)
func init() {
jsmod.Register("cryptoSM", map[string]any{
// SM3 Hash
"sm3": Sm3,
"sm3ToHex": Sm3ToHex,
"sm3ToBase64": Sm3ToBase64,
"sm3ToUrlBase64": Sm3ToUrlBase64,
// SM4 GCM (Stateless)
"encrypt": func(data, key, iv []byte) ([]byte, error) {
s, err := NewSM4GCMAndEraseKey(key, iv)
if err != nil {
return nil, err
}
return s.EncryptBytes(data)
},
"decrypt": func(data, key, iv []byte) ([]byte, error) {
s, err := NewSM4GCMAndEraseKey(key, iv)
if err != nil {
return nil, err
}
return s.DecryptBytes(data)
},
// SM4 CBC (Stateless)
"encryptCBC": func(data, key, iv []byte) ([]byte, error) {
s, err := NewSM4CBCAndEraseKey(key, iv)
if err != nil {
return nil, err
}
return s.EncryptBytes(data)
},
"decryptCBC": func(data, key, iv []byte) ([]byte, error) {
s, err := NewSM4CBCAndEraseKey(key, iv)
if err != nil {
return nil, err
}
return s.DecryptBytes(data)
},
// SM2 (Stateless)
"encryptSM2": func(data, pubKey []byte) ([]byte, error) {
a, err := NewSM2AndEraseKey(nil, pubKey)
if err != nil {
return nil, err
}
return a.EncryptBytes(data)
},
"decryptSM2": func(data, privKey []byte) ([]byte, error) {
a, err := NewSM2AndEraseKey(privKey, nil)
if err != nil {
return nil, err
}
return a.DecryptBytes(data)
},
"signSM2": func(data, privKey []byte) ([]byte, error) {
a, err := NewSM2AndEraseKey(privKey, nil)
if err != nil {
return nil, err
}
return a.Sign(data)
},
"verifySM2": func(data, sig, pubKey []byte) (bool, error) {
a, err := NewSM2AndEraseKey(nil, pubKey)
if err != nil {
return false, err
}
return a.Verify(data, sig)
},
// Key Generation
"generateSM2KeyPair": GenerateSM2KeyPair,
})
}