package com.bootdo.common.utils;

import com.bootdo.datas.tools.gm.PemUtil;
import com.bootdo.datas.tools.gm.SM2Util;
import com.bootdo.datas.tools.gm.SM4Util;
import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.security.*;
import java.text.SimpleDateFormat;
import java.util.Date;

public class LicenseUtil {

    public static boolean checkLicense(){
//        RandomAccessFile srcRAF = null;
//        try {
//            File file = new File("C:\\cicdebserver\\sm2\\license.lic");
//            if(!file.exists()){
//                return false;
//            }
//            srcRAF = new RandomAccessFile("C:\\cicdebserver\\sm2\\license.lic", "r");
//            byte[] rlBuffer = new byte[4];
//            srcRAF.read(rlBuffer);
//
//            //2.读取密钥信封
//            byte[] symmKey = null;
//            srcRAF.read(rlBuffer);
//            int kcLen = toIntLittleEndian(rlBuffer);//读取密钥信封长度
//            if (kcLen > 0) {
//                //2.a读取密钥信封数据
//                byte[] kcBuff = new byte[kcLen + 1];
//                kcBuff[0] = 0x04;
//                int kcrLen = srcRAF.read(kcBuff, 1, kcLen);
//                if (kcrLen != kcLen) {
//                    return false;
//                }
//
//                //2.b解密密钥信封数据
//                KeyPair keyPair = PemUtil.getKeyPair("C:\\cicdebserver\\sm2\\sm2_client_enc_private.key");
//                BCECPrivateKey bcecPrivateKey = (BCECPrivateKey) keyPair.getPrivate();
//                symmKey = SM2Util.decrypt(bcecPrivateKey, kcBuff);
//            }
//            if (symmKey == null) {
//                return false;
//            }
//
//            //3.文件解密
//            byte[] decData = null;
//            srcRAF.read(rlBuffer);
//            int encDataLen = toIntLittleEndian(rlBuffer);
//            if (encDataLen > 0) {
//                byte[] encData = new byte[encDataLen];
//                srcRAF.read(encData);
//                decData = SM4Util.decrypt_Cbc_Padding(symmKey, symmKey, encData);
//            }
//            String licenseTime = new String(decData);
//
//            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//            Date date = new Date();
//            String nowData = df.format(date);
//            Date date1 = df.parse(licenseTime);
//            Date date2 = df.parse(nowData);
//            if (date1.before(date2)) {
//                return false;
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        } finally {
//            try {
//                if (srcRAF != null){
//                    srcRAF.close();
//                }
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
        return true;
    }

    public static void main(String[] args) {
        checkLicense();
    }

    /**
     * 低字节在前（低字节序）256=0x00010000
     */
    public static byte[] toBytesLittleEndian(int n) {
        byte[] b = new byte[4];
        b[0] = (byte) (n & 0xff);
        b[1] = (byte) (n >> 8 & 0xff);
        b[2] = (byte) (n >> 16 & 0xff);
        b[3] = (byte) (n >> 24 & 0xff);
        return b;
    }

    /**
     * 低字节在前（低字节序）0x00010000=256
     */
    public static int toIntLittleEndian(byte[] b) {
        int sum = 0;
        for (int i = 0; i < b.length; i++) {
            sum += (b[i] & 0xff) << (i * 8);
        }
        return sum;
    }
}
