package cn.unitid.matrix.pkiservice.test.ces;

import cn.unitid.matrix.pkiservice.sdk.ApiException;
import cn.unitid.matrix.pkiservice.sdk.PkiClient;
import cn.unitid.matrix.pkiservice.sdk.PkiOkhttpClient;
import cn.unitid.matrix.pkiservice.sdk.ces.request.P7SignRequest;
import cn.unitid.matrix.pkiservice.sdk.ces.response.P7SignResponse;
import cn.unitid.matrix.pkiservice.sdk.consts.CertSearchEnum;
import cn.unitid.matrix.pkiservice.sdk.consts.DataType;
import cn.unitid.matrix.pkiservice.sdk.consts.SignatureAlgorithm;

/**
 * P7签名测试
 */
public class P7SignTest {

    public static void main(String[] args) {

        // 提供的URL
        String url = "http://172.16.6.76:20501";

        // 您的appKey
        String appKey = "CLxUIrYIO0";

        // 您的appSecret
        String appSecret = "Rsl7kjMrqHrxhDk9uou23IYRnCVjRKJC";

        // 1.原客户端
        PkiClient pkiClient = new PkiOkhttpClient(url, appKey, appSecret);


        String data = "123456";

        P7SignRequest request = new P7SignRequest();

        //通过何种方式进行签名 CERT_ID：证书ID，KEY_INDEX：密钥索引， SN_HEX：证书序列号(十六进制格式)，SN_DEC：证书序列号(十进制格式)，TN_HASH：证书证书指纹，CERT_CN：证书CN ，CERT_DN：证书主题项(DN)
        request.setSignType(CertSearchEnum.CERT_DN);
        //签名项目的值
        request.setSignItemValue("C=CN,UniqueIdentifier=29acecb8354c464fb90b32dbc30ed5912022068,CN=Matrix PKI TSS Test1");
        // 签名数据
        request.setData(data);
        //签名项目的值
        request.setDataType(DataType.ORIGINAL);
        // 摘要算法，SM2证书签名固定为SM3，RSA默认SHA256
        request.setSignatureAlgorithm(SignatureAlgorithm.SM3withSM2);
        // 签名是否包含原文
        request.setAttach(false);
        // 签名后数据格式
        request.setSignDataType(DataType.BASE64);

        try {
            P7SignResponse response = pkiClient.execute(request);
            // 后续业务
            if (response.isSuccess()) {
                System.out.println("成功响应：" + response.getResult());
            } else {
                System.out.println("失败响应：" + response.getBody());
            }
        } catch (ApiException e) {
            e.printStackTrace();
        }

    }


}
