Compare commits
No commits in common. "main" and "v1.3.2" have entirely different histories.
@ -1,11 +1,5 @@
|
|||||||
# 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
|
||||||
|
|||||||
16
go.mod
16
go.mod
@ -3,16 +3,16 @@ module apigo.cc/go/crypto-sm
|
|||||||
go 1.25.0
|
go 1.25.0
|
||||||
|
|
||||||
require (
|
require (
|
||||||
apigo.cc/go/cast v1.5.0
|
apigo.cc/go/cast v1.3.3
|
||||||
apigo.cc/go/crypto v1.5.0
|
apigo.cc/go/crypto v1.3.1
|
||||||
apigo.cc/go/encoding v1.5.0
|
apigo.cc/go/encoding v1.3.1
|
||||||
apigo.cc/go/jsmod v1.5.0
|
apigo.cc/go/jsmod v1.0.0
|
||||||
apigo.cc/go/safe v1.5.0
|
apigo.cc/go/safe v1.3.1
|
||||||
github.com/emmansun/gmsm v0.28.0
|
github.com/emmansun/gmsm v0.28.0
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
apigo.cc/go/rand v1.5.0 // indirect
|
apigo.cc/go/rand v1.3.1 // indirect
|
||||||
golang.org/x/crypto v0.52.0 // indirect
|
golang.org/x/crypto v0.51.0 // indirect
|
||||||
golang.org/x/sys v0.45.0 // indirect
|
golang.org/x/sys v0.44.0 // indirect
|
||||||
)
|
)
|
||||||
|
|||||||
30
go.sum
30
go.sum
@ -1,16 +1,18 @@
|
|||||||
apigo.cc/go/cast v1.5.0 h1:UBGJtFQ8eJPMQXs37cUgqd7YQo1zI9opuSDBDmn2/pE=
|
apigo.cc/go/cast v1.3.3 h1:aln5eDR5DZVWVzZ/y5SJh1gQNgWv2sT82I25NaO9g34=
|
||||||
apigo.cc/go/cast v1.5.0/go.mod h1:z2GW5p5WCZGEqVVIJUdhl232vRbLf2Qu4EDlEakX/D8=
|
apigo.cc/go/cast v1.3.3/go.mod h1:lGlwImiOvHxG7buyMWhFzcdvQzmSaoKbmr7bcDfUpHk=
|
||||||
apigo.cc/go/crypto v1.5.0 h1:Nxz7a6VKCdvaF258IU0NkjQyureOLxfR308Sy2iftUI=
|
apigo.cc/go/crypto v1.3.1 h1:ulQ2zX9bUWirk0sEacx1Srsjs2Jow7HlZq7ED7msNcg=
|
||||||
apigo.cc/go/crypto v1.5.0/go.mod h1:F9M6nXv+5328r1ZwbTvI6fcr8VdgqHVzALOcsdv6ntE=
|
apigo.cc/go/crypto v1.3.1/go.mod h1:SwHlBFDPddttWgFFtzsEMla8CM/rcFy9nvdsJjW4CIs=
|
||||||
apigo.cc/go/encoding v1.5.0 h1:EJNdRVDOMoI2DAvZwQNQTbYuqB/6zsEzvg7lS5pQI+I=
|
apigo.cc/go/encoding v1.3.1 h1:y8O58KYAyulkThg1O2ji2BqjnFoSvk42sit9I3z+K7Y=
|
||||||
apigo.cc/go/encoding v1.5.0/go.mod h1:8++NfZj3hWig0qh2g7GQRw/4LpSvCYMWUZ+8J+x58cA=
|
apigo.cc/go/encoding v1.3.1/go.mod h1:xAJk5b83VZ31mXMTnyp0dfMoBKfT/AHDn0u+cQfojgY=
|
||||||
apigo.cc/go/jsmod v1.5.0 h1:JgQtJNiJWy1NOP9AzE8NX5VXJkpO/x3GqLsCCSny5Ec=
|
apigo.cc/go/jsmod v1.0.0 h1:lVQMq0tCno4kbHlQ3j5wzsm+v24J+bznIoHxpton0pE=
|
||||||
apigo.cc/go/jsmod v1.5.0/go.mod h1:bmyeZtOAP/j5am+YRnaiM89smysK24K7ebk0koFtsSw=
|
apigo.cc/go/jsmod v1.0.0/go.mod h1:bmyeZtOAP/j5am+YRnaiM89smysK24K7ebk0koFtsSw=
|
||||||
apigo.cc/go/rand v1.5.0 h1:1o8hh8fhdBuk1/h02IvugvamuT3dkWbVJrqEJVQKB2E=
|
apigo.cc/go/rand v1.3.1 h1:7FvsI6PtQ5XrWER0dTiLVo0p7GIxRidT/TBKhVy93j8=
|
||||||
apigo.cc/go/rand v1.5.0/go.mod h1:Lh98S2dm9UY0X+M+kNQQEKyXHG5pcCKSFPyXN0QCGdk=
|
apigo.cc/go/rand v1.3.1/go.mod h1:mZ/4Soa3bk+XvDaqPWJuUe1bfEi4eThBj1XmEAuYxsk=
|
||||||
apigo.cc/go/safe v1.5.0 h1:W1NblmcU8cex1f9Y5z8mNLUJOzZTE1s6fszb3FbhGnk=
|
apigo.cc/go/safe v1.3.1 h1:irTCqPAC97gGsX/Lw5AzLelDt1xXLEZIAaVhLELWe9Q=
|
||||||
apigo.cc/go/safe v1.5.0/go.mod h1:OfQ5d6COePSGEuPvMeOk6KagX2sezw7nvKh7exj9SeM=
|
apigo.cc/go/safe v1.3.1/go.mod h1:XdOpBhN2vkImalaykYXXmEpczqWa1y3ah6/Q72cdRqE=
|
||||||
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.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988=
|
golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI=
|
||||||
golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY=
|
golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8=
|
||||||
|
golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ=
|
||||||
|
golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
|
||||||
|
|||||||
58
js_export.go
58
js_export.go
@ -5,36 +5,22 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
jsmod.Register("sm", map[string]any{
|
jsmod.Register("cryptoSM", map[string]any{
|
||||||
// SM3 Hash
|
// SM3 Hash
|
||||||
"SM3": SM3,
|
"sm3": Sm3,
|
||||||
"SM3ToHex": SM3ToHex,
|
"sm3ToHex": Sm3ToHex,
|
||||||
"SM3ToBase64": SM3ToBase64,
|
"sm3ToBase64": Sm3ToBase64,
|
||||||
"SM3ToURLBase64": SM3ToURLBase64,
|
"sm3ToUrlBase64": Sm3ToUrlBase64,
|
||||||
|
|
||||||
// SM4 Symmetric (Stateless)
|
// SM4 GCM (Stateless)
|
||||||
"SM4EncryptCBC": func(data, key, iv []byte) ([]byte, error) {
|
"encrypt": 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)
|
||||||
},
|
},
|
||||||
"SM4DecryptGCM": func(data, key, iv []byte) ([]byte, error) {
|
"decrypt": 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
|
||||||
@ -42,29 +28,45 @@ func init() {
|
|||||||
return s.DecryptBytes(data)
|
return s.DecryptBytes(data)
|
||||||
},
|
},
|
||||||
|
|
||||||
// SM2 Asymmetric (Stateless)
|
// SM4 CBC (Stateless)
|
||||||
"SM2Encrypt": func(data, pubKey []byte) ([]byte, error) {
|
"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)
|
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)
|
||||||
},
|
},
|
||||||
"SM2Decrypt": func(data, privKey []byte) ([]byte, error) {
|
"decryptSM2": 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)
|
||||||
},
|
},
|
||||||
"SM2Sign": func(data, privKey []byte) ([]byte, error) {
|
"signSM2": 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)
|
||||||
},
|
},
|
||||||
"SM2Verify": func(data, sig, pubKey []byte) (bool, error) {
|
"verifySM2": 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
|
||||||
@ -73,6 +75,6 @@ func init() {
|
|||||||
},
|
},
|
||||||
|
|
||||||
// Key Generation
|
// Key Generation
|
||||||
"GenerateSM2KeyPair": GenerateSM2KeyPair,
|
"generateSM2KeyPair": GenerateSM2KeyPair,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
14
sm3.go
14
sm3.go
@ -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.Hex(SM3(data))
|
return encoding.HexToString(Sm3(data))
|
||||||
}
|
}
|
||||||
|
|
||||||
func SM3ToBase64(data []byte) string {
|
func Sm3ToBase64(data []byte) string {
|
||||||
return encoding.Base64(SM3(data))
|
return encoding.Base64ToString(Sm3(data))
|
||||||
}
|
}
|
||||||
|
|
||||||
func SM3ToURLBase64(data []byte) string {
|
func Sm3ToUrlBase64(data []byte) string {
|
||||||
return encoding.URLBase64(SM3(data))
|
return encoding.UrlBase64ToString(Sm3(data))
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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") }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user