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