// 假设我们有一个名为 sm4 的模块,它提供了加密功能
const sm4 = require('sm-crypto'); // 这里需要替换为实际的路径或库名

function SM4Encrypt_ECB(plainText, secretKey, hexString = false) {
  const sm4Context = {
    isPadding: true,
    mode: 'encrypt', // 使用加密模式
  };

  let key;
  if (!hexString) {
    key = wx.arrayBufferToBase64(new TextEncoder().encode(secretKey));
  } else {
    key = decodeHexString(secretKey); // 需要自己实现decodeHexString函数
  }

  // 设置加密密钥
  sm4.setKey(sm4Context, key);

  // 加密数据
  const encryptedData = sm4.encryptECB(sm4Context, new TextEncoder().encode(plainText));

  // 返回编码后的结果
  return encodeBytesToHex(encryptedData);
}

function decodeHexString(hexString) {
  // 实现与C# Decode方法相同的逻辑
  if (hexString.length % 2 !== 0) {
    throw new Error("Hexadecimal string must have an even length");
  }
  let bytes = [];
  for (let i = 0; i < hexString.length; i += 2) {
    bytes.push(parseInt(hexString.substr(i, 2), 16));
  }
  return bytes;
}

function encodeBytesToHex(bytes) {
  // 实现与C# Encode方法相同的逻辑
  let hexString = '';
  for (let byte of bytes) {
    hexString += ('0' + byte.toString(16)).slice(-2);
  }
  return hexString;
}

module.exports = {
  SM4Encrypt_ECB,
};