function SoftUKey(SoftKey3W) { this.SoftKey3W = SoftKey3W; } /** * uKey写入用户名 * @param userName 用户名 * @param callback 回调函数 */ SoftUKey.prototype.setUserName = function (userName, callback) { try { let s_simnew1 = new this.SoftKey3W(); //创建UK类 let DevicePath, PriKey, PubKeyX, PubKeyY; // 开启监听 s_simnew1.Socket_UK.onopen = function() { s_simnew1.ResetOrder();//这里调用ResetOrder将计数清零,这样,消息处理处就会收到0序号的消息,通过计数及序号的方式,从而生产流程 } // 监听获取到的信息 s_simnew1.Socket_UK.onmessage = function(Msg) { let UK_Data = JSON.parse(Msg.data); if(UK_Data.type!="Process")return ;//如果不是流程处理消息,则跳过 // 根据收到的序号执行函数 switch(UK_Data.order) { case 0: s_simnew1.FindPort(0); //发送命令取UK的路径 break; case 1: if(UK_Data.LastError!=0) { window.alert ( "未发现加密锁,请插入加密锁"); s_simnew1.Socket_UK.close(); return false; } // 设置路径 DevicePath=UK_Data.return_value;//获得返回的UK的路径 //产生密钥对 s_simnew1.StarGenKeyPair(DevicePath); break; case 2: if(UK_Data.LastError!=0){ window.alert("产生密钥对出现错误,错误码为:"+UK_Data.LastError.toString()); s_simnew1.Socket_UK.close(); return false; } //获取生成的私钥 s_simnew1.GenPriKey(); break; case 3: if(UK_Data.LastError!=0){ window.alert("获取生成的私钥时错误,错误码为:"+UK_Data.LastError.toString()); s_simnew1.Socket_UK.close(); return false; } PriKey = UK_Data.return_value; //获取生成的公钥X s_simnew1.GenPubKeyX(); break; case 4: if(UK_Data.LastError!=0){ window.alert("获取生成的公钥X时错误,错误码为:"+UK_Data.LastError.toString()); s_simnew1.Socket_UK.close(); return false; } PubKeyX = UK_Data.return_value; //获取生成的公钥Y s_simnew1.GenPubKeyY(); break; case 5: if(UK_Data.LastError!=0){ window.alert("获取生成的公钥Y时错误,错误码为:"+UK_Data.LastError.toString()); s_simnew1.Socket_UK.close(); return false; } PubKeyY = UK_Data.return_value; //设置密钥对及用户身份到锁中 s_simnew1.Set_SM2_KeyPair(PriKey,PubKeyX,PubKeyY,userName,DevicePath); break; case 6: if(UK_Data.LastError!=0){ window.alert("设置密钥对及用户身份时出现错误,错误码为:"+UK_Data.LastError.toString()); s_simnew1.Socket_UK.close(); return false; } // 执行回调函数 if(typeof callback == 'function') { callback({ PriKey, PubKeyX, PubKeyY, userName, DevicePath }); } //所有工作处理完成后,关掉Socket s_simnew1.Socket_UK.close(); break; } } // 关闭监听 s_simnew1.Socket_UK.onclose = function() { console.log("关闭设置用户名称") } return true; }catch(e) { console.log("设置用户名称异常:"+e); } } /** * 读取uKey中的用户名 * @param callback * @return {boolean} */ SoftUKey.prototype.getUserName = function(callback) { try { let s_simnew1 = new this.SoftKey3W(); //创建UK类 let DevicePath, userName; // 开启监听 s_simnew1.Socket_UK.onopen = function() { s_simnew1.ResetOrder();//这里调用ResetOrder将计数清零,这样,消息处理处就会收到0序号的消息,通过计数及序号的方式,从而生产流程 } // 监听获取到的信息 s_simnew1.Socket_UK.onmessage = function(Msg) { let UK_Data = JSON.parse(Msg.data); if(UK_Data.type!="Process")return ;//如果不是流程处理消息,则跳过 // 根据收到的序号执行函数 switch(UK_Data.order) { case 0: s_simnew1.FindPort(0); //发送命令取UK的路径 break; case 1: if(UK_Data.LastError!=0) { window.alert ( "未发现加密锁,请插入加密锁"); s_simnew1.Socket_UK.close(); return false; } // 设置路径 DevicePath=UK_Data.return_value;//获得返回的UK的路径 //返回设置在锁中的身份 s_simnew1.GetSm2UserName(DevicePath); break; case 2: if(UK_Data.LastError!=0){ window.alert("返回设置在锁中的用户身份时出现错误,错误码为:"+UK_Data.LastError.toString()); s_simnew1.Socket_UK.close(); return false; } userName = UK_Data.return_value; // 执行回调函数 if(typeof callback == 'function') { callback({ userName, }); } //所有工作处理完成后,关掉Socket s_simnew1.Socket_UK.close(); break; } } // 关闭监听 s_simnew1.Socket_UK.onclose = function() { console.log("关闭读取用户名称") } return true; }catch (e) { console.log("读取用户名称异常:"+e); } } /** * 获取ukey的签名 * @param randomNumber * @param callback */ SoftUKey.prototype.getSign = function(randomNumber, callback) { try { let s_simnew1 = new this.SoftKey3W(); //创建UK类 let inPath, sign, uKeyId, publicX, publicY; // 开启监听 s_simnew1.Socket_UK.onopen = function() { s_simnew1.ResetOrder();//这里调用ResetOrder将计数清零,这样,消息处理处就会收到0序号的消息,通过计数及序号的方式,从而生产流程 } // 监听获取到的信息 s_simnew1.Socket_UK.onmessage = function(Msg) { let UK_Data = JSON.parse(Msg.data); if(UK_Data.type!="Process")return ;//如果不是流程处理消息,则跳过 // 根据收到的序号执行函数 switch(UK_Data.order) { case 0: s_simnew1.FindPort(0); //发送命令取UK的路径 break; case 1: if(UK_Data.LastError!=0) { window.alert ( "未发现加密锁,请插入加密锁"); s_simnew1.Socket_UK.close(); return false; } // 设置路径 inPath=UK_Data.return_value;//获得返回的UK的路径 s_simnew1.GetProduceDate(inPath);//返回芯片唯一ID break; case 2: if(UK_Data.LastError!=0){ window.alert("返回芯片唯一ID时出现错误,错误码为:"+UK_Data.LastError.toString()); s_simnew1.Socket_UK.close(); return false; } uKeyId = UK_Data.return_value; //返回设置在锁中的公钥X s_simnew1.GetPubKeyX(inPath); break; case 3: if(UK_Data.LastError!=0){ window.alert("返回设置在锁中的公钥X时出现错误,错误码为:"+UK_Data.LastError.toString()); s_simnew1.Socket_UK.close(); return false; } publicX = UK_Data.return_value; // 返回设置在锁中的公钥Y s_simnew1.GetPubKeyY(inPath); break; case 4: if(UK_Data.LastError!=0){ window.alert("返回设置在锁中的公钥Y时出现错误,错误码为:"+UK_Data.LastError.toString()); s_simnew1.Socket_UK.close(); return false; } publicY = UK_Data.return_value; // 对数据进行签名 s_simnew1.YtSign(randomNumber,"123", inPath); break; case 5: if(UK_Data.LastError!=0){ window.alert("对数据进行签名时出现错误,错误码为:"+UK_Data.LastError.toString()); s_simnew1.Socket_UK.close(); return false; } sign = UK_Data.return_value; // 执行回调函数 if(typeof callback == 'function') { callback({ inPath, sign, uKeyId, publicX, publicY, }); } //所有工作处理完成后,关掉Socket s_simnew1.Socket_UK.close(); break; } } // 关闭监听 s_simnew1.Socket_UK.onclose = function() { console.log("关闭获取签名") } }catch (e) { console.log("获取签名异常:"+e) } } export default SoftUKey;