feat(crypto): 具名化 JS 导出并动态包裹错误(by AI)
This commit is contained in:
parent
530cd2ae03
commit
cac5d5a6e2
@ -1,5 +1,10 @@
|
|||||||
# Changelog: @go/crypto
|
# Changelog: @go/crypto
|
||||||
|
|
||||||
|
## v1.5.3 (2026-06-21)
|
||||||
|
- **重构与错误堆栈支持**:
|
||||||
|
- 重构 `js_export.go`,将 `Encrypt`、`Decrypt` 等匿名函数以及 `Generate*KeyPair` 类接口改写为具名函数,并动态使用 `jsmod.MakeError` 包裹返回的 error。
|
||||||
|
- 升级 `cast` 依赖至 v1.5.3,`encoding` 依赖至 v1.5.4,`jsmod` 依赖至 v1.5.3,`safe` 依赖至 v1.5.2,`rand` 依赖至 v1.5.3。
|
||||||
|
|
||||||
## v1.5.2 (2026-06-11)
|
## v1.5.2 (2026-06-11)
|
||||||
- **版本对齐**: 基础设施全局对齐 v1.5.2。
|
- **版本对齐**: 基础设施全局对齐 v1.5.2。
|
||||||
|
|
||||||
|
|||||||
10
go.mod
10
go.mod
@ -3,14 +3,14 @@ module apigo.cc/go/crypto
|
|||||||
go 1.25.0
|
go 1.25.0
|
||||||
|
|
||||||
require (
|
require (
|
||||||
apigo.cc/go/cast v1.5.2
|
apigo.cc/go/cast v1.5.3
|
||||||
apigo.cc/go/encoding v1.5.3
|
apigo.cc/go/encoding v1.5.4
|
||||||
apigo.cc/go/jsmod v1.5.2
|
apigo.cc/go/jsmod v1.5.3
|
||||||
apigo.cc/go/safe v1.5.1
|
apigo.cc/go/safe v1.5.2
|
||||||
golang.org/x/crypto v0.52.0
|
golang.org/x/crypto v0.52.0
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
apigo.cc/go/rand v1.5.2
|
apigo.cc/go/rand v1.5.3
|
||||||
golang.org/x/sys v0.45.0 // indirect
|
golang.org/x/sys v0.45.0 // indirect
|
||||||
)
|
)
|
||||||
|
|||||||
200
js_export.go
200
js_export.go
@ -34,72 +34,152 @@ func init() {
|
|||||||
"MakeToken": MakeToken,
|
"MakeToken": MakeToken,
|
||||||
|
|
||||||
// AES GCM (Stateless)
|
// AES GCM (Stateless)
|
||||||
"Encrypt": func(data, key, iv []byte) ([]byte, error) {
|
"Encrypt": jsEncrypt,
|
||||||
s, err := NewAESGCMAndEraseKey(key, iv)
|
"Decrypt": jsDecrypt,
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return s.EncryptBytes(data)
|
|
||||||
},
|
|
||||||
"Decrypt": func(data, key, iv []byte) ([]byte, error) {
|
|
||||||
s, err := NewAESGCMAndEraseKey(key, iv)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return s.DecryptBytes(data)
|
|
||||||
},
|
|
||||||
|
|
||||||
// AES CBC (Stateless)
|
// AES CBC (Stateless)
|
||||||
"EncryptCBC": func(data, key, iv []byte) ([]byte, error) {
|
"EncryptCBC": jsEncryptCBC,
|
||||||
s, err := NewAESCBCAndEraseKey(key, iv)
|
"DecryptCBC": jsDecryptCBC,
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return s.EncryptBytes(data)
|
|
||||||
},
|
|
||||||
"DecryptCBC": func(data, key, iv []byte) ([]byte, error) {
|
|
||||||
s, err := NewAESCBCAndEraseKey(key, iv)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return s.DecryptBytes(data)
|
|
||||||
},
|
|
||||||
|
|
||||||
// RSA (Stateless)
|
// RSA (Stateless)
|
||||||
"RSAEncrypt": func(data, pubKey []byte) ([]byte, error) {
|
"RSAEncrypt": jsRSAEncrypt,
|
||||||
a, err := NewRSAAndEraseKey(nil, pubKey)
|
"RSADecrypt": jsRSADecrypt,
|
||||||
if err != nil {
|
"RSASign": jsRSASign,
|
||||||
return nil, err
|
"RSAVerify": jsRSAVerify,
|
||||||
}
|
|
||||||
return a.EncryptBytes(data)
|
|
||||||
},
|
|
||||||
"RSADecrypt": func(data, privKey []byte) ([]byte, error) {
|
|
||||||
a, err := NewRSAAndEraseKey(privKey, nil)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return a.DecryptBytes(data)
|
|
||||||
},
|
|
||||||
"RSASign": func(data, privKey []byte) ([]byte, error) {
|
|
||||||
a, err := NewRSAAndEraseKey(privKey, nil)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return a.Sign(data)
|
|
||||||
},
|
|
||||||
"RSAVerify": func(data, sig, pubKey []byte) (bool, error) {
|
|
||||||
a, err := NewRSAAndEraseKey(nil, pubKey)
|
|
||||||
if err != nil {
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
return a.Verify(data, sig)
|
|
||||||
},
|
|
||||||
|
|
||||||
// Key Generation
|
// Key Generation
|
||||||
"GenerateRSAKeyPair": GenerateRSAKeyPair,
|
"GenerateRSAKeyPair": jsGenerateRSAKeyPair,
|
||||||
"GenerateECDSAKeyPair": GenerateECDSAKeyPair,
|
"GenerateECDSAKeyPair": jsGenerateECDSAKeyPair,
|
||||||
"GenerateEd25519KeyPair": GenerateEd25519KeyPair,
|
"GenerateEd25519KeyPair": jsGenerateEd25519KeyPair,
|
||||||
"GenerateX25519KeyPair": GenerateX25519KeyPair,
|
"GenerateX25519KeyPair": jsGenerateX25519KeyPair,
|
||||||
"DeriveKey": DeriveKey,
|
"DeriveKey": DeriveKey,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func jsEncrypt(data, key, iv []byte) ([]byte, error) {
|
||||||
|
s, err := NewAESGCMAndEraseKey(key, iv)
|
||||||
|
if err != nil {
|
||||||
|
return nil, jsmod.MakeError(err)
|
||||||
|
}
|
||||||
|
res, err := s.EncryptBytes(data)
|
||||||
|
if err != nil {
|
||||||
|
return nil, jsmod.MakeError(err)
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func jsDecrypt(data, key, iv []byte) ([]byte, error) {
|
||||||
|
s, err := NewAESGCMAndEraseKey(key, iv)
|
||||||
|
if err != nil {
|
||||||
|
return nil, jsmod.MakeError(err)
|
||||||
|
}
|
||||||
|
res, err := s.DecryptBytes(data)
|
||||||
|
if err != nil {
|
||||||
|
return nil, jsmod.MakeError(err)
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func jsEncryptCBC(data, key, iv []byte) ([]byte, error) {
|
||||||
|
s, err := NewAESCBCAndEraseKey(key, iv)
|
||||||
|
if err != nil {
|
||||||
|
return nil, jsmod.MakeError(err)
|
||||||
|
}
|
||||||
|
res, err := s.EncryptBytes(data)
|
||||||
|
if err != nil {
|
||||||
|
return nil, jsmod.MakeError(err)
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func jsDecryptCBC(data, key, iv []byte) ([]byte, error) {
|
||||||
|
s, err := NewAESCBCAndEraseKey(key, iv)
|
||||||
|
if err != nil {
|
||||||
|
return nil, jsmod.MakeError(err)
|
||||||
|
}
|
||||||
|
res, err := s.DecryptBytes(data)
|
||||||
|
if err != nil {
|
||||||
|
return nil, jsmod.MakeError(err)
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func jsRSAEncrypt(data, pubKey []byte) ([]byte, error) {
|
||||||
|
a, err := NewRSAAndEraseKey(nil, pubKey)
|
||||||
|
if err != nil {
|
||||||
|
return nil, jsmod.MakeError(err)
|
||||||
|
}
|
||||||
|
res, err := a.EncryptBytes(data)
|
||||||
|
if err != nil {
|
||||||
|
return nil, jsmod.MakeError(err)
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func jsRSADecrypt(data, privKey []byte) ([]byte, error) {
|
||||||
|
a, err := NewRSAAndEraseKey(privKey, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, jsmod.MakeError(err)
|
||||||
|
}
|
||||||
|
res, err := a.DecryptBytes(data)
|
||||||
|
if err != nil {
|
||||||
|
return nil, jsmod.MakeError(err)
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func jsRSASign(data, privKey []byte) ([]byte, error) {
|
||||||
|
a, err := NewRSAAndEraseKey(privKey, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, jsmod.MakeError(err)
|
||||||
|
}
|
||||||
|
res, err := a.Sign(data)
|
||||||
|
if err != nil {
|
||||||
|
return nil, jsmod.MakeError(err)
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func jsRSAVerify(data, sig, pubKey []byte) (bool, error) {
|
||||||
|
a, err := NewRSAAndEraseKey(nil, pubKey)
|
||||||
|
if err != nil {
|
||||||
|
return false, jsmod.MakeError(err)
|
||||||
|
}
|
||||||
|
res, err := a.Verify(data, sig)
|
||||||
|
if err != nil {
|
||||||
|
return false, jsmod.MakeError(err)
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func jsGenerateRSAKeyPair(bitSize int) ([]byte, []byte, error) {
|
||||||
|
priv, pub, err := GenerateRSAKeyPair(bitSize)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, jsmod.MakeError(err)
|
||||||
|
}
|
||||||
|
return priv, pub, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func jsGenerateECDSAKeyPair(bitSize int) ([]byte, []byte, error) {
|
||||||
|
priv, pub, err := GenerateECDSAKeyPair(bitSize)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, jsmod.MakeError(err)
|
||||||
|
}
|
||||||
|
return priv, pub, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func jsGenerateEd25519KeyPair() ([]byte, []byte, error) {
|
||||||
|
priv, pub, err := GenerateEd25519KeyPair()
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, jsmod.MakeError(err)
|
||||||
|
}
|
||||||
|
return priv, pub, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func jsGenerateX25519KeyPair() ([]byte, []byte, error) {
|
||||||
|
priv, pub, err := GenerateX25519KeyPair()
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, jsmod.MakeError(err)
|
||||||
|
}
|
||||||
|
return priv, pub, nil
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user