crypto-sm/js_export.go

79 lines
1.8 KiB
Go
Raw Permalink Normal View History

package sm
import (
"apigo.cc/go/jsmod"
)
func init() {
jsmod.Register("sm", map[string]any{
// SM3 Hash
"SM3": SM3,
"SM3ToHex": SM3ToHex,
"SM3ToBase64": SM3ToBase64,
"SM3ToURLBase64": SM3ToURLBase64,
// SM4 Symmetric (Stateless)
"SM4EncryptCBC": func(data, key, iv []byte) ([]byte, error) {
s, err := NewSM4CBCAndEraseKey(key, iv)
if err != nil {
return nil, err
}
return s.EncryptBytes(data)
},
"SM4DecryptCBC": func(data, key, iv []byte) ([]byte, error) {
s, err := NewSM4CBCAndEraseKey(key, iv)
if err != nil {
return nil, err
}
return s.DecryptBytes(data)
},
"SM4EncryptGCM": func(data, key, iv []byte) ([]byte, error) {
s, err := NewSM4GCMAndEraseKey(key, iv)
if err != nil {
return nil, err
}
return s.EncryptBytes(data)
},
"SM4DecryptGCM": func(data, key, iv []byte) ([]byte, error) {
s, err := NewSM4GCMAndEraseKey(key, iv)
if err != nil {
return nil, err
}
return s.DecryptBytes(data)
},
// SM2 Asymmetric (Stateless)
"SM2Encrypt": func(data, pubKey []byte) ([]byte, error) {
a, err := NewSM2AndEraseKey(nil, pubKey)
if err != nil {
return nil, err
}
return a.EncryptBytes(data)
},
"SM2Decrypt": func(data, privKey []byte) ([]byte, error) {
a, err := NewSM2AndEraseKey(privKey, nil)
if err != nil {
return nil, err
}
return a.DecryptBytes(data)
},
"SM2Sign": func(data, privKey []byte) ([]byte, error) {
a, err := NewSM2AndEraseKey(privKey, nil)
if err != nil {
return nil, err
}
return a.Sign(data)
},
"SM2Verify": 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,
})
}