crypto-sm/js_export.go

81 lines
1.8 KiB
Go

package sm
import (
"apigo.cc/go/jsmod"
)
func init() {
jsmod.Register("cryptoSM", map[string]any{
// SM3 Hash
"sm3": Sm3,
"sm3ToHex": Sm3ToHex,
"sm3ToBase64": Sm3ToBase64,
"sm3ToUrlBase64": Sm3ToUrlBase64,
// SM4 GCM (Stateless)
"encrypt": func(data, key, iv []byte) ([]byte, error) {
s, err := NewSM4GCMAndEraseKey(key, iv)
if err != nil {
return nil, err
}
return s.EncryptBytes(data)
},
"decrypt": func(data, key, iv []byte) ([]byte, error) {
s, err := NewSM4GCMAndEraseKey(key, iv)
if err != nil {
return nil, err
}
return s.DecryptBytes(data)
},
// SM4 CBC (Stateless)
"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)
if err != nil {
return nil, err
}
return a.EncryptBytes(data)
},
"decryptSM2": func(data, privKey []byte) ([]byte, error) {
a, err := NewSM2AndEraseKey(privKey, nil)
if err != nil {
return nil, err
}
return a.DecryptBytes(data)
},
"signSM2": func(data, privKey []byte) ([]byte, error) {
a, err := NewSM2AndEraseKey(privKey, nil)
if err != nil {
return nil, err
}
return a.Sign(data)
},
"verifySM2": func(data, sig, pubKey []byte) (bool, error) {
a, err := NewSM2AndEraseKey(nil, pubKey)
if err != nil {
return false, err
}
return a.Verify(data, sig)
},
// Key Generation
"generateSM2KeyPair": GenerateSM2KeyPair,
})
}