<?php
namespace App\Lib;
class HSM
{
   protected static $baseurl="http://223.70.139.221:2018";
   protected static $keyIndex=1;
   protected static $encAlg="SM4/CBC/PKCS5Padding";
   protected static $iv="31323334353637383132333435363738";


   //加密
   public static function HsmEncrypt($str){
       $str = bin2hex($str);
       $url= self::$baseurl."/api/hsm/sym/symEncryptInternalForKEK";
       $data=[
           "keyIndex"=>self::$keyIndex,
           "encAlg"=>self::$encAlg,
           "iv"=>self::$iv,
           "plainData"=>$str
       ];
       $data=json_encode($data);
       $encryptStr=self::post($url,$data);
       $r_data=json_decode($encryptStr, true);
      // dd($r_data);
       if($r_data['status']==0){
           return ['encrypt_str'=>$r_data['body']['cipherData'],'status'=>true];
       }else{
           return ['status'=>false];
       }
   }
    //解密
    public static function HsmDecrypt($str){
        $url= self::$baseurl."/api/hsm/sym/symDecryptInternalForKEK";
        $data=[
            "keyIndex"=>self::$keyIndex,
            "encAlg"=>self::$encAlg,
            "iv"=>self::$iv,
            "cipherData"=>$str
        ];
        $data=json_encode($data);
        $encryptStr=self::post($url,$data);
        $r_data=json_decode($encryptStr, true);
        if($r_data['status']==0){
            return ['decrypt_str'=>hex2bin($r_data['body']['plain']),'status'=>true];
        }else{
            return ['status'=>false];
        }
    }
    public function post($url, $data_string)
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($curl, CURLOPT_HTTPHEADER, [
            'Content-Type: application/json; charset=utf-8',
            'Content-Length: ' . strlen($data_string)
        ]);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string);
        $r = curl_exec($curl);
        curl_close($curl);
        return $r;
    }
}
