feat: register simplified cryptosm capabilities to jsmod
This commit is contained in:
parent
4d57b22db8
commit
6af336d550
@ -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
1
go.mod
@ -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
2
go.sum
@ -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
80
js_export.go
Normal 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,
|
||||
})
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user