Compare commits

..

2 Commits
v1.5.0 ... main

Author SHA1 Message Date
AI Engineer
46f9b1f6d9 feat: align JS exports to PascalCase, fix acronyms, and rename module to 'sm' (by AI) 2026-06-09 20:12:24 +08:00
AI Engineer
31b3b43ac1 fix: align with go/encoding v1.5.1 (by AI) 2026-06-08 21:19:26 +08:00
6 changed files with 47 additions and 45 deletions

View File

@ -1,5 +1,11 @@
# Changelog: @go/crypto-sm # Changelog: @go/crypto-sm
## v1.5.2 (2026-06-08)
- **JS 对齐 & 重命名**:
- 注册模块名更正为极简的 `"sm"`
- 所有 JS 导出方法统一为 PascalCase + 缩写全大写(如 `SM3`, `SM4EncryptCBC`, `GenerateSM2KeyPair`)。
- **Go 源码纠偏**: 修正了 Go 层级的方法命名(`Sm3` -> `SM3` 等),确保全库命名规范绝对统一。
## [v1.3.2] - 2026-05-30 ## [v1.3.2] - 2026-05-30
### Added ### Added

4
go.mod
View File

@ -13,6 +13,6 @@ require (
require ( require (
apigo.cc/go/rand v1.5.0 // indirect apigo.cc/go/rand v1.5.0 // indirect
golang.org/x/crypto v0.51.0 // indirect golang.org/x/crypto v0.52.0 // indirect
golang.org/x/sys v0.44.0 // indirect golang.org/x/sys v0.45.0 // indirect
) )

6
go.sum
View File

@ -12,7 +12,5 @@ apigo.cc/go/safe v1.5.0 h1:W1NblmcU8cex1f9Y5z8mNLUJOzZTE1s6fszb3FbhGnk=
apigo.cc/go/safe v1.5.0/go.mod h1:OfQ5d6COePSGEuPvMeOk6KagX2sezw7nvKh7exj9SeM= apigo.cc/go/safe v1.5.0/go.mod h1:OfQ5d6COePSGEuPvMeOk6KagX2sezw7nvKh7exj9SeM=
github.com/emmansun/gmsm v0.28.0 h1:0WyTHmQgaAfM8IwMnNMJCfEiK999cZ2J8csfcZ2Ooco= github.com/emmansun/gmsm v0.28.0 h1:0WyTHmQgaAfM8IwMnNMJCfEiK999cZ2J8csfcZ2Ooco=
github.com/emmansun/gmsm v0.28.0/go.mod h1:9lKtK8f3c7wh2z0g6fsqRbay69V1jWYDcBaytyuR95M= github.com/emmansun/gmsm v0.28.0/go.mod h1:9lKtK8f3c7wh2z0g6fsqRbay69V1jWYDcBaytyuR95M=
golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988=
golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY=
golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ=
golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=

View File

@ -5,22 +5,36 @@ import (
) )
func init() { func init() {
jsmod.Register("cryptoSM", map[string]any{ jsmod.Register("sm", map[string]any{
// SM3 Hash // SM3 Hash
"sm3": Sm3, "SM3": SM3,
"sm3ToHex": Sm3ToHex, "SM3ToHex": SM3ToHex,
"sm3ToBase64": Sm3ToBase64, "SM3ToBase64": SM3ToBase64,
"sm3ToUrlBase64": Sm3ToUrlBase64, "SM3ToURLBase64": SM3ToURLBase64,
// SM4 GCM (Stateless) // SM4 Symmetric (Stateless)
"encrypt": func(data, key, iv []byte) ([]byte, error) { "SM4EncryptCBC": func(data, key, iv []byte) ([]byte, error) {
s, err := NewSM4CBCAndEraseKey(key, iv)
if err != nil {
return nil, err
}
return s.EncryptBytes(data)
},
"SM4DecryptCBC": func(data, key, iv []byte) ([]byte, error) {
s, err := NewSM4CBCAndEraseKey(key, iv)
if err != nil {
return nil, err
}
return s.DecryptBytes(data)
},
"SM4EncryptGCM": func(data, key, iv []byte) ([]byte, error) {
s, err := NewSM4GCMAndEraseKey(key, iv) s, err := NewSM4GCMAndEraseKey(key, iv)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return s.EncryptBytes(data) return s.EncryptBytes(data)
}, },
"decrypt": func(data, key, iv []byte) ([]byte, error) { "SM4DecryptGCM": func(data, key, iv []byte) ([]byte, error) {
s, err := NewSM4GCMAndEraseKey(key, iv) s, err := NewSM4GCMAndEraseKey(key, iv)
if err != nil { if err != nil {
return nil, err return nil, err
@ -28,45 +42,29 @@ func init() {
return s.DecryptBytes(data) return s.DecryptBytes(data)
}, },
// SM4 CBC (Stateless) // SM2 Asymmetric (Stateless)
"encryptCBC": func(data, key, iv []byte) ([]byte, error) { "SM2Encrypt": func(data, pubKey []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) a, err := NewSM2AndEraseKey(nil, pubKey)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return a.EncryptBytes(data) return a.EncryptBytes(data)
}, },
"decryptSM2": func(data, privKey []byte) ([]byte, error) { "SM2Decrypt": func(data, privKey []byte) ([]byte, error) {
a, err := NewSM2AndEraseKey(privKey, nil) a, err := NewSM2AndEraseKey(privKey, nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return a.DecryptBytes(data) return a.DecryptBytes(data)
}, },
"signSM2": func(data, privKey []byte) ([]byte, error) { "SM2Sign": func(data, privKey []byte) ([]byte, error) {
a, err := NewSM2AndEraseKey(privKey, nil) a, err := NewSM2AndEraseKey(privKey, nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return a.Sign(data) return a.Sign(data)
}, },
"verifySM2": func(data, sig, pubKey []byte) (bool, error) { "SM2Verify": func(data, sig, pubKey []byte) (bool, error) {
a, err := NewSM2AndEraseKey(nil, pubKey) a, err := NewSM2AndEraseKey(nil, pubKey)
if err != nil { if err != nil {
return false, err return false, err
@ -75,6 +73,6 @@ func init() {
}, },
// Key Generation // Key Generation
"generateSM2KeyPair": GenerateSM2KeyPair, "GenerateSM2KeyPair": GenerateSM2KeyPair,
}) })
} }

14
sm3.go
View File

@ -5,7 +5,7 @@ import (
"github.com/emmansun/gmsm/sm3" "github.com/emmansun/gmsm/sm3"
) )
func Sm3(data ...[]byte) []byte { func SM3(data ...[]byte) []byte {
hash := sm3.New() hash := sm3.New()
for _, v := range data { for _, v := range data {
hash.Write(v) hash.Write(v)
@ -13,14 +13,14 @@ func Sm3(data ...[]byte) []byte {
return hash.Sum(nil) return hash.Sum(nil)
} }
func Sm3ToHex(data []byte) string { func SM3ToHex(data []byte) string {
return encoding.HexToString(Sm3(data)) return encoding.Hex(SM3(data))
} }
func Sm3ToBase64(data []byte) string { func SM3ToBase64(data []byte) string {
return encoding.Base64ToString(Sm3(data)) return encoding.Base64(SM3(data))
} }
func Sm3ToUrlBase64(data []byte) string { func SM3ToURLBase64(data []byte) string {
return encoding.UrlBase64ToString(Sm3(data)) return encoding.URLBase64(SM3(data))
} }

View File

@ -36,8 +36,8 @@ func TestSM2(t *testing.T) {
func TestSM3(t *testing.T) { func TestSM3(t *testing.T) {
data := []byte("hello sm3") data := []byte("hello sm3")
h1 := sm.Sm3(data) h1 := sm.SM3(data)
h2 := sm.Sm3(data) h2 := sm.SM3(data)
if !bytes.Equal(h1, h2) { t.Error("SM3 non-deterministic") } if !bytes.Equal(h1, h2) { t.Error("SM3 non-deterministic") }
} }