feat: register simplified crypto capabilities to jsmod
This commit is contained in:
parent
0d17076c8a
commit
39f2708ec0
@ -1,5 +1,10 @@
|
|||||||
# Changelog: @go/crypto
|
# Changelog: @go/crypto
|
||||||
|
|
||||||
|
## [v1.3.2] - 2026-05-30
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- **JSMOD 注册**:将核心加解密与 Hash 能力注册到 `jsmod`。提供极简的无状态 API,支持 AES (GCM/CBC), RSA (加解密/签名) 以及各类 Hash/HMAC 算法。
|
||||||
|
|
||||||
## [v1.1.2] - 2026-05-12
|
## [v1.1.2] - 2026-05-12
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|||||||
1
go.mod
1
go.mod
@ -5,6 +5,7 @@ go 1.25.0
|
|||||||
require (
|
require (
|
||||||
apigo.cc/go/cast v1.3.3
|
apigo.cc/go/cast v1.3.3
|
||||||
apigo.cc/go/encoding v1.3.1
|
apigo.cc/go/encoding v1.3.1
|
||||||
|
apigo.cc/go/jsmod v1.0.0
|
||||||
apigo.cc/go/safe v1.3.1
|
apigo.cc/go/safe v1.3.1
|
||||||
golang.org/x/crypto v0.51.0
|
golang.org/x/crypto v0.51.0
|
||||||
)
|
)
|
||||||
|
|||||||
2
go.sum
2
go.sum
@ -2,6 +2,8 @@ apigo.cc/go/cast v1.3.3 h1:aln5eDR5DZVWVzZ/y5SJh1gQNgWv2sT82I25NaO9g34=
|
|||||||
apigo.cc/go/cast v1.3.3/go.mod h1:lGlwImiOvHxG7buyMWhFzcdvQzmSaoKbmr7bcDfUpHk=
|
apigo.cc/go/cast v1.3.3/go.mod h1:lGlwImiOvHxG7buyMWhFzcdvQzmSaoKbmr7bcDfUpHk=
|
||||||
apigo.cc/go/encoding v1.3.1 h1:y8O58KYAyulkThg1O2ji2BqjnFoSvk42sit9I3z+K7Y=
|
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/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 h1:7FvsI6PtQ5XrWER0dTiLVo0p7GIxRidT/TBKhVy93j8=
|
||||||
apigo.cc/go/rand v1.3.1/go.mod h1:mZ/4Soa3bk+XvDaqPWJuUe1bfEi4eThBj1XmEAuYxsk=
|
apigo.cc/go/rand v1.3.1/go.mod h1:mZ/4Soa3bk+XvDaqPWJuUe1bfEi4eThBj1XmEAuYxsk=
|
||||||
apigo.cc/go/safe v1.3.1 h1:irTCqPAC97gGsX/Lw5AzLelDt1xXLEZIAaVhLELWe9Q=
|
apigo.cc/go/safe v1.3.1 h1:irTCqPAC97gGsX/Lw5AzLelDt1xXLEZIAaVhLELWe9Q=
|
||||||
|
|||||||
105
js_export.go
Normal file
105
js_export.go
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
package crypto
|
||||||
|
|
||||||
|
import (
|
||||||
|
"apigo.cc/go/jsmod"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
jsmod.Register("crypto", map[string]any{
|
||||||
|
// Hash
|
||||||
|
"md5": MD5,
|
||||||
|
"md5ToHex": MD5ToHex,
|
||||||
|
"md5ToBase64": MD5ToBase64,
|
||||||
|
"md5ToUrlBase64": MD5ToUrlBase64,
|
||||||
|
"sha1": Sha1,
|
||||||
|
"sha1ToHex": Sha1ToHex,
|
||||||
|
"sha1ToBase64": Sha1ToBase64,
|
||||||
|
"sha1ToUrlBase64": Sha1ToUrlBase64,
|
||||||
|
"sha256": Sha256,
|
||||||
|
"sha256ToHex": Sha256ToHex,
|
||||||
|
"sha256ToBase64": Sha256ToBase64,
|
||||||
|
"sha256ToUrlBase64": Sha256ToUrlBase64,
|
||||||
|
"sha512": Sha512,
|
||||||
|
"sha512ToHex": Sha512ToHex,
|
||||||
|
"sha512ToBase64": Sha512ToBase64,
|
||||||
|
"sha512ToUrlBase64": Sha512ToUrlBase64,
|
||||||
|
|
||||||
|
// HMAC
|
||||||
|
"hmacMd5": HmacMD5,
|
||||||
|
"hmacSha1": HmacSha1,
|
||||||
|
"hmacSha256": HmacSha256,
|
||||||
|
"hmacSha512": HmacSha512,
|
||||||
|
|
||||||
|
// Token
|
||||||
|
"makeToken": MakeToken,
|
||||||
|
|
||||||
|
// AES GCM (Stateless)
|
||||||
|
"encrypt": func(data, key, iv []byte) ([]byte, error) {
|
||||||
|
s, err := NewAESGCMAndEraseKey(key, iv)
|
||||||
|
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)
|
||||||
|
"encryptCBC": func(data, key, iv []byte) ([]byte, error) {
|
||||||
|
s, err := NewAESCBCAndEraseKey(key, iv)
|
||||||
|
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)
|
||||||
|
"rsaEncrypt": func(data, pubKey []byte) ([]byte, error) {
|
||||||
|
a, err := NewRSAAndEraseKey(nil, pubKey)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
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
|
||||||
|
"generateRSAKeyPair": GenerateRSAKeyPair,
|
||||||
|
"generateECDSAKeyPair": GenerateECDSAKeyPair,
|
||||||
|
"generateEd25519KeyPair": GenerateEd25519KeyPair,
|
||||||
|
"generateX25519KeyPair": GenerateX25519KeyPair,
|
||||||
|
"deriveKey": DeriveKey,
|
||||||
|
})
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user