package union_pay

import (
	"encoding/base64"
	"fmt"
	"github.com/tjfoc/gmsm/sm4"
)

func Encrypt(txt, key, iv []byte) (string, error) {
	pk := HexToBytes(key)

	err := sm4.SetIV(iv)
	if err != nil {
		return "", fmt.Errorf("sm4.SetIV err:%v", err)
	}
	cipherTxt, err := sm4.Sm4Cbc(pk, txt, true)
	if err != nil {
		return "", fmt.Errorf("sm4.Sm4Cbc err:%v", err)
	}

	return base64.StdEncoding.EncodeToString(cipherTxt), nil
}

func Decrypt(txt string, key []byte, iv []byte) (string, error) {
	plainText, err := base64.StdEncoding.DecodeString(txt)
	if err != nil {
		return "", fmt.Errorf("base64.StdEncoding.DecodeString err:%v", err)
	}
	pk := HexToBytes(key)

	err = sm4.SetIV(iv)
	if err != nil {
		return "", fmt.Errorf("sm4.SetIV err:%v", err)
	}
	cipherTxt, err := sm4.Sm4Cbc(pk, plainText, false)
	if err != nil {
		return "", fmt.Errorf("sm4.Sm4Cbc err:%v", err)
	}

	return string(cipherTxt), nil
}