feat: register simplified crypto capabilities to jsmod

This commit is contained in:
AI Engineer 2026-05-30 18:53:28 +08:00
parent 0d17076c8a
commit 39f2708ec0
4 changed files with 113 additions and 0 deletions

View File

@ -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
View File

@ -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
View File

@ -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
View 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,
})
}