From 39f2708ec05276a394b27abc30a50c986e72134d Mon Sep 17 00:00:00 2001 From: AI Engineer Date: Sat, 30 May 2026 18:53:28 +0800 Subject: [PATCH] feat: register simplified crypto capabilities to jsmod --- CHANGELOG.md | 5 +++ go.mod | 1 + go.sum | 2 + js_export.go | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 113 insertions(+) create mode 100644 js_export.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 94c9aa8..6d3fbf7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # 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 ### Added diff --git a/go.mod b/go.mod index 70abdf5..9dbd0dc 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.25.0 require ( apigo.cc/go/cast v1.3.3 apigo.cc/go/encoding v1.3.1 + apigo.cc/go/jsmod v1.0.0 apigo.cc/go/safe v1.3.1 golang.org/x/crypto v0.51.0 ) diff --git a/go.sum b/go.sum index 74463c1..2445a56 100644 --- a/go.sum +++ b/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/encoding v1.3.1 h1:y8O58KYAyulkThg1O2ji2BqjnFoSvk42sit9I3z+K7Y= 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/go.mod h1:mZ/4Soa3bk+XvDaqPWJuUe1bfEi4eThBj1XmEAuYxsk= apigo.cc/go/safe v1.3.1 h1:irTCqPAC97gGsX/Lw5AzLelDt1xXLEZIAaVhLELWe9Q= diff --git a/js_export.go b/js_export.go new file mode 100644 index 0000000..c70c20a --- /dev/null +++ b/js_export.go @@ -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, + }) +}