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