From a309b65e80f3f21b5ab7c182acb9764f47c677f1 Mon Sep 17 00:00:00 2001 From: zhouwx <1175765986@qq.com> Date: 星期五, 07 六月 2024 15:48:11 +0800 Subject: [PATCH] 登录key --- src/util/permission.js | 4 src/assets/img/key.png | 0 src/views/Login1.vue | 224 +++++++ src/views/Admin/downLoadKey.vue | 110 +++ src/router/index.js | 8 src/views/Login.vue | 128 +++ src/views/Syunew3W.js | 1374 ++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 1,837 insertions(+), 11 deletions(-) diff --git a/src/assets/img/key.png b/src/assets/img/key.png new file mode 100644 index 0000000..3a746f4 --- /dev/null +++ b/src/assets/img/key.png Binary files differ diff --git a/src/router/index.js b/src/router/index.js index d7648ea..f8e86ef 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -11,6 +11,13 @@ component: () => import('@/views/Login'), meta: { title: '登录' }, }, + { + path: '/downKey', + name: 'downKey', + component: () => import('@/views/Admin/downLoadKey.vue'), + meta: { title: '驱动下载' }, + hidden:true + }, { path: '/home', name: 'home', @@ -148,6 +155,7 @@ // meta: { title: '菜单管理' }, // component: () => import('@/views/Admin/menuManage'), // }, + ] }, ]; diff --git a/src/util/permission.js b/src/util/permission.js index acff799..782617a 100644 --- a/src/util/permission.js +++ b/src/util/permission.js @@ -11,10 +11,10 @@ // 会再次进入路由跳转,next()方法没有参数是直接进入页面,不会再次进入路由拦截,有参数则会,因为跳转, // 所以再次进入路由,再次判断,再次进入路由,再次判断,循环往复无限循环 // 所以一定要加to.path !== 'login'的判断 - if (!token && to.path !== '/') { + if ((!token && to.path !== '/')&&(to.path==='downKey')) { message.error('用户信息已过期,请重新登录'); next('/'); }else { next(); } -}); \ No newline at end of file +}); diff --git a/src/views/Admin/downLoadKey.vue b/src/views/Admin/downLoadKey.vue new file mode 100644 index 0000000..ecf8722 --- /dev/null +++ b/src/views/Admin/downLoadKey.vue @@ -0,0 +1,110 @@ +<template> + <div class="key-box"> + <div class="header"> + <div class="title"> + <div style="width: 300px;text-align: center"> + 自然灾害综合风险预警发布及响应联动系统 + </div> + <div class="center"></div> + <span style="color: #96aec5;">驱动下载</span> + </div> + </div> + <div class="box-center"> + <div style="width: 1200px;margin: 30px auto 0;padding: 0 20px 0;" v-for="(item,index) in state.keyTypes" :key="index"> + <div class="title">{{item.name}}</div> + <a-card style="width: 250px;margin:20px 80px;" hoverable title=""> + <template #extra> + <span style="cursor: pointer;color: #1890ff" @click="downLoad(item)">立即下载</span> + </template> + <template #cover> + <img + style="width: 120px;height: 120px;margin: 1px auto" + alt="example" + :src= keyPic + /> + </template> + <template #actions> + <span>{{item.name}}驱动</span> + </template> + </a-card> + </div> + + </div> + </div> +</template> +<script setup> +import {reactive} from "vue"; +import { message } from 'ant-design-vue'; +import keyPic from '@/assets/img/key.png' + +const state = reactive({ + keyTypes: [ + { + name: 'Windows 版', + url: 'http://oss.bestong8.com/xinjiang/SetUp.exe' + }, + { + name: 'Linux 版', + url: 'http://oss.bestong8.com/xinjiang/linux.zip' + }, + { + name: 'Mac 版', + url: '' + }, + ] +}) + +const downLoad = (item) => { + if(item.url === ''){ + message.warning( "暂未开放苹果系统应用该加密工具。"); + }else{ + const link = document.createElement('a') + link.href =item.url + link.target = '_blank' + link.download = item.name + '.exe' + link.click() + } + + +} + +</script> + + +<style scoped lang="less"> +.key-box{ + margin: 0 auto; + .header{ + text-align: left; + width: 1200px; + margin: 30px auto; + .title{ + display: flex; + align-items: center; + vertical-align: top; + font-size: 24px; + + padding-left: 20px; + .center{ + margin: 0 10px; + content: ""; + height: 54px; + border-left: 2px solid #c7cddc; + } + + } + } + .box-center{ + padding-top: 20px; + padding-bottom: 20px; + min-width: 1200px; + .title{ + font-size: 18px; + font-weight: 600; + border-bottom: 1px solid #d1d7e8; + padding: 10px 0; + margin-bottom: 6px; + } + } +} +</style> diff --git a/src/views/Login.vue b/src/views/Login.vue index b901080..7d00b20 100644 --- a/src/views/Login.vue +++ b/src/views/Login.vue @@ -83,7 +83,32 @@ <a-checkbox :checked="saveAccount" style="color:#fff;" @change="isSave">记住密码</a-checkbox> <!-- <a style="float: right">忘记密码</a>--> </div> - <a-form-item style="text-align: center"> + <div style="margin-bottom: 20px;height: auto;width: 100%;background-color: white;border-radius: 5px"> + <div style="margin-left: 10px;display: flex;align-items: center;justify-content: space-between;padding: 0px 12px;"> + <div v-if="keyMsg"> + <a-icon style="color: lightcoral" type="exclamation-circle"/> + <span style="margin-left: 5px;line-height: 45px;font-size: 16px;color: lightcoral">{{keyMsg}}</span> + </div> + <div v-else> + <a-icon style="color: #52c41a" type="check-circle"/> + <span style="margin-left: 5px;line-height: 45px;font-size: 16px;color: #52c41a">加密证书检测成功</span> + </div> + <a-button + type="primary" + html-type="submit" + style="width: 20%;" + size="small" + @click="checkKey" + > + 重新检测 + </a-button> + </div> + </div> + <div style="margin-bottom: 20px;float: right;" > + <span style="color: #1890ff;cursor: pointer" @click="downLoadLKey">驱动下载</span> + </div> + + <div style="text-align: center"> <a-button type="primary" html-type="submit" @@ -95,7 +120,7 @@ > 登录 </a-button> - </a-form-item> + </div> <center><p>技术支持:技术保障部</p></center> </a-form-model> </div> @@ -107,7 +132,7 @@ import { login, getMenuAdmin } from "@/api/login"; import Cookies from 'js-cookie'; import {Base64} from "js-base64"; - +import SoftKey3W from './Syunew3W.js' export default { name: "login", @@ -119,13 +144,18 @@ // form: this.$form.createForm(this), form: { name: '', - pwd: '' + pwd: '', + keyId:'',//锁id + keyUserName:'',//锁中的用户身份 + returnEncData:'',//签名数据 + rnd:"123"//随机字符 }, rules: { name: [{ required: true, message: '请输入用户名', trigger: 'blur' }], pwd: [{ required: true, message: '请输入用户密码', trigger: 'blur' }] }, - menu: [] + menu: [], + keyMsg: '未检测到加密证书,请确保已连接', }; }, created() { @@ -133,8 +163,18 @@ // this.form.validateFields(); // }); this.hasUserCodeOrPassword() + //检测key + this.checkKey() }, methods: { + downLoadLKey () { + console.log('222') + const { href } = this.$router.resolve({ + path: '/downKey' + }) + window.open(href,'_blank') + + }, hasUserCodeOrPassword(){ if (localStorage.getItem('userName') && localStorage.getItem('userPassword')) { this.form.name = localStorage.getItem('userName') @@ -142,15 +182,85 @@ this.saveAccount = true } }, + async checkKey() { + let mSoftKey3A = new SoftKey3W();//注意,由于USB的操作是异步的,所以所有函数的调用前必须加await !!!!!!!!! + let DevicePath = await mSoftKey3A.FindPort(1);//'查找是否存在多把加密锁 + if (mSoftKey3A.GetLastError() == 0) { + this.keyMsg = "系统发现有2把及以上的加密证书" + return false + } + DevicePath = await mSoftKey3A.FindPort(0);//'查找是否存在加密锁 + if (mSoftKey3A.GetLastError() != 0) { + this.keyMsg = "未检测到加密证书,请确保已连接" + return false + } + this.keyMsg = "" + }, isSave(e){ const t = this t.saveAccount = !t.saveAccount }, + async checkUsbkeyData(){ + let mSoftKey3A = new SoftKey3W();//注意,由于USB的操作是异步的,所以所有函数的调用前必须加await !!!!!!!!! + let DevicePath = await mSoftKey3A.FindPort(1);//'查找是否存在多把加密锁 + console.log(mSoftKey3A,'mSoftKey3A') + if (mSoftKey3A.GetLastError() == 0) { + this.keyMsg = "系统发现有2把及以上的加密证书" + this.$message.warning( "系统发现有2把及以上的加密证书"); + return false + } + DevicePath = await mSoftKey3A.FindPort(0);//'查找是否存在加密锁 + if (mSoftKey3A.GetLastError() != 0) { + this.keyMsg = "未检测到加密证书,请确保已连接" + this.$message.warning( "未检测到加密证书,请确保已连接"); + return false + } + console.log(DevicePath,'devpathhh') + //'读取锁的唯一ID + this.form.keyId=await mSoftKey3A.GetChipID(DevicePath); - handleSubmit() { + if( mSoftKey3A.GetLastError()!= 0 ) + { + this.$message.warning("返回芯片唯一ID时出现错误,错误码为:"+mSoftKey3A.GetLastError().toString()) + return false + } + console.log(this.form.keyId,'this.form.keyId') + //从锁中取出用户身份,与签名后的数据一并送到服务端进行验证。以验证用户身份 + this.form.keyUserName=await mSoftKey3A.GetSm2UserName(DevicePath); + + if( mSoftKey3A.GetLastError()!= 0 ) + { + this.$message.warning( "返回用户身份时出现错误,错误码为:"+mSoftKey3A.GetLastError().toString()); + return false + } + console.log(this.form.keyUserName,'this.form.keyUserName') + //使用默认的PIN码 + var Pin="123" + //这里使用锁中的私钥对身份-用户名及消息-随机数的进行数字签名,使用默认的PIN码,返回签名后的数据 + this.form.rnd=String(parseInt(Math.random()*(65536+1),10)); + this.form.returnEncData=await mSoftKey3A.YtSign(this.form.rnd,Pin,DevicePath); + if( mSoftKey3A.GetLastError()!= 0 ) + { + this.$message.warning( "进行签名时出现错误,错误码为:"+mSoftKey3A.GetLastError().toString()); + return false + } + if(this.form.name!=this.form.keyUserName){ + this.$message.warning( "用户身份不一致,无法登陆"); + return false + } + console.log(this.form.returnEncData,'this.form.returnEncData') + console.log(this.form,'this.form') + return true + }, + + async handleSubmit() { this.$refs.ruleForm.validate(async (valid) => { if (valid) { + let checkUsb=await this.checkUsbkeyData() + if(!checkUsb){ + return + } this.isLoading = true const res = await login(this.form) if (res.data.code === 100) { @@ -211,11 +321,11 @@ h1{font-size: 48px;color:#fff;} } .login { - + .login-form { width: 400px; - margin: 60px auto 0px; - + margin: 60px auto 0px; + } } .ant-tabs{ diff --git a/src/views/Login1.vue b/src/views/Login1.vue new file mode 100644 index 0000000..b901080 --- /dev/null +++ b/src/views/Login1.vue @@ -0,0 +1,224 @@ +<template> + <div class='bd'> + <div class="hedaer"> + <h2>新疆维吾尔自治区自然灾害综合监测预警中心</h2> + <h1>自然灾害综合风险预警发布及响应联动系统</h1> + </div> + <div class="login"> + + <a-form-model + layout="horizontal" + :model="form" + ref="ruleForm" + :rules="rules" + class="login-form" + > + <a-form-model-item ref="name" prop="name"> + <a-input + placeholder="请输入用户名" + size="large" + v-model="form.name" + autocomplete="new-password" + > + <a-icon slot="prefix" type="user" style="color:rgba(0,0,0,.25)" /> + </a-input> + </a-form-model-item> + <a-form-model-item ref="pwd" prop="pwd"> + <a-input-password + type="password" + placeholder="请输入密码" + size="large" + v-model="form.pwd" + autocomplete="new-password" + > + <a-icon slot="prefix" type="lock" style="color:rgba(0,0,0,.25)" /> + </a-input-password> + </a-form-model-item> +<!-- <a-tabs default-active-key="1" @change="callback">--> +<!-- <a-tab-pane key="1" tab="用户名登录">--> +<!-- <a-form-item>--> +<!-- <a-input--> +<!-- placeholder="请输入用户"--> +<!-- size="large"--> +<!-- v-model="form.name"--> +<!-- >--> +<!-- <a-icon slot="prefix" type="user" style="color:rgba(0,0,0,.25)" />--> +<!-- </a-input>--> +<!-- </a-form-item>--> +<!-- <a-form-item>--> +<!-- <a-input-password--> +<!-- type="password"--> +<!-- placeholder="请输入密码"--> +<!-- size="large"--> +<!-- v-model="form.pwd"--> +<!-- >--> +<!-- <a-icon slot="prefix" type="lock" style="color:rgba(0,0,0,.25)" />--> +<!-- </a-input-password>--> +<!-- </a-form-item>--> +<!-- </a-tab-pane>--> +<!-- <a-tab-pane key="2" tab="验证码登录" force-render>--> +<!-- <a-form-item>--> +<!-- <a-input--> +<!-- placeholder="手机号"--> +<!-- size="large"--> +<!-- >--> +<!-- <a-icon slot="prefix" type="mobile" style="color:rgba(0,0,0,.25)" />--> +<!-- </a-input>--> +<!-- </a-form-item>--> +<!-- <a-form-item>--> +<!-- <a-row :gutter="8">--> +<!-- <a-col :span="17">--> +<!-- <a-input placeholder="验证码">--> +<!-- <a-icon slot="prefix" type="mobile" style="color:rgba(0,0,0,.25)" />--> +<!-- </a-input>--> +<!-- </a-col>--> +<!-- <a-col :span="7">--> +<!-- <a-button style="width: 100%">获取验证码</a-button>--> +<!-- </a-col>--> +<!-- </a-row>--> +<!-- </a-form-item>--> +<!-- </a-tab-pane>--> +<!-- </a-tabs>--> + <div style="margin-bottom: 20px"> + <a-checkbox :checked="saveAccount" style="color:#fff;" @change="isSave">记住密码</a-checkbox> +<!-- <a style="float: right">忘记密码</a>--> + </div> + <a-form-item style="text-align: center"> + <a-button + type="primary" + html-type="submit" + style="width: 100%" + size="large" + @click="handleSubmit" + :loading="isLoading" + v-preventReClick="1500" + > + 登录 + </a-button> + </a-form-item> + <center><p>技术支持:技术保障部</p></center> + </a-form-model> + </div> + </div> +</template> + +<script> + +import { login, getMenuAdmin } from "@/api/login"; +import Cookies from 'js-cookie'; +import {Base64} from "js-base64"; + + +export default { + name: "login", + data() { + return { + isLoading: false, + saveAccount: false, + // hasErrors, + // form: this.$form.createForm(this), + form: { + name: '', + pwd: '' + }, + rules: { + name: [{ required: true, message: '请输入用户名', trigger: 'blur' }], + pwd: [{ required: true, message: '请输入用户密码', trigger: 'blur' }] + }, + menu: [] + }; + }, + created() { + // this.$nextTick(() => { + // this.form.validateFields(); + // }); + this.hasUserCodeOrPassword() + }, + methods: { + hasUserCodeOrPassword(){ + if (localStorage.getItem('userName') && localStorage.getItem('userPassword')) { + this.form.name = localStorage.getItem('userName') + this.form.pwd = Base64.decode(localStorage.getItem('userPassword'))//解密 + this.saveAccount = true + } + }, + + isSave(e){ + const t = this + t.saveAccount = !t.saveAccount + }, + + handleSubmit() { + this.$refs.ruleForm.validate(async (valid) => { + if (valid) { + this.isLoading = true + const res = await login(this.form) + if (res.data.code === 100) { + Cookies.set('resTk', res.data.data.tk); + Cookies.set('resUid', res.data.data.uid); + Cookies.set('userInfo',JSON.stringify(res.data.data),{expires: 7}) + if (this.saveAccount) { + localStorage.setItem('userName', this.form.name) + localStorage.setItem('userPassword', Base64.encode(this.form.pwd)) + } else { + localStorage.removeItem('userName') + localStorage.removeItem('userPassword') + } + this.$router.push('/home') + } else { + this.$message.warning(res.data.msg); + } + this.isLoading = false + } else { + console.log('error submit!!'); + return false; + } + }); + }, + + }, +}; +</script> + +<style lang="less" scoped> + p{ + color:#fff; + margin-top: 55px; + } +h2{ + font-size: 30px; +} +.bd { + width: 100%; + height: 100vh; + background: url('../assets/img/bg.jpeg') no-repeat; + background-size: 100% 100%; + background-attachment: fixed;/* 不设置的话页面滑动时,背景会不铺满*/ +} + + +/deep/ .ant-tabs-bar { + border-bottom: 0px; + text-align: center; +} + .hedaer { + margin: 0px auto; + padding-top:200px; + width: 1000px; + text-align: center; + text-shadow:0 0 1px #000; + h2{font-size: 36px;color:#fff;} + h1{font-size: 48px;color:#fff;} + } +.login { + + .login-form { + width: 400px; + margin: 60px auto 0px; + + } +} +.ant-tabs{ + color:#fff; + } +</style> diff --git a/src/views/Syunew3W.js b/src/views/Syunew3W.js new file mode 100644 index 0000000..56c195a --- /dev/null +++ b/src/views/Syunew3W.js @@ -0,0 +1,1374 @@ + + export default class SoftKey3W +{ + static Socket_UK; + static url; + static LastError + constructor() { + + var isIE11 = navigator.userAgent.indexOf('Trident') > -1 && navigator.userAgent.indexOf("rv:11.0") > -1; + var isEDGE= navigator.userAgent.indexOf("Edge") > -1; + var u = document.URL; + if (u.substring(0, 5) == "https") { + if(isIE11 || isEDGE) + { + if(isIE11)this.url = "wss://127.0.0.1:4006/xxx"; else url = "ws://127.0.0.1:4006/xxx"; + } + else + { + this.url = "ws://localhost:4006/xxx"; + } + } else { + this.url = "ws://127.0.0.1:4006/xxx"; + } + + if (typeof MozWebSocket != "undefined") { + this.Socket_UK = new MozWebSocket(this.url,"usbkey-protocol"); + } else { + this.Socket_UK = new WebSocket(this.url,"usbkey-protocol"); + } + this.Socket_UK.onerror = (event) => { + alert('未能连接服务程序,请确定服务程序是否安装。'); + }; + SoftKey3W.LastError=0 + } + + _FindPort = function (UK,start) + { + var msg = + { + FunName: "FindPort", + start: start + }; + UK.send(JSON.stringify(msg)); + }; + + _FindPort_2 = function (UK,start, in_data , verf_data) + { + var msg = + { + FunName: "FindPort_2", + start: start, + in_data: in_data, + verf_data:verf_data + }; + UK.send(JSON.stringify(msg)); + }; + + _FindPort_3 = function (UK,start,in_data,verf_data) + { + var msg = + { + FunName: "FindPort_3", + start: start, + in_data: in_data, + verf_data:verf_data + }; + UK.send(JSON.stringify(msg)); + }; + + _GetVersion = function (UK,Path) + { + var msg = + { + FunName: "GetVersion", + Path: Path + }; + UK.send(JSON.stringify(msg)); + }; + + _GetVersionEx = function (UK,Path) + { + var msg = + { + FunName: "GetVersionEx", + Path: Path + }; + UK.send(JSON.stringify(msg)); + }; + + _GetID_1 = function (UK,Path) + { + var msg = + { + FunName: "GetID_1", + Path: Path + }; + UK.send(JSON.stringify(msg)); + }; + + _GetID_2 = function (UK,Path) + { + var msg = + { + FunName: "GetID_2", + Path: Path + }; + UK.send(JSON.stringify(msg)); + }; + + + _sRead = function (UK,Path) + { + var msg = + { + FunName: "sRead", + Path: Path + }; + UK.send(JSON.stringify(msg)); + }; + + _sWrite = function (UK,InData, Path) + { + var msg = + { + FunName: "sWrite", + InData: InData, + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _sWrite_2 = function (UK,InData, Path) + { + var msg = + { + FunName: "sWrite_2", + InData: InData, + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _sWrite_2Ex = function (UK,InData,Path) + { + var msg = + { + FunName: "sWrite_2Ex", + InData: InData, + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _sWriteEx = function (UK,InData,Path) + { + var msg = + { + FunName: "sWriteEx", + InData: InData, + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _sWriteEx_New = function (UK,InData,Path) + { + var msg = + { + FunName: "sWriteEx_New", + InData: InData, + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _sWrite_2Ex_New = function (UK,InData,Path) + { + var msg = + { + FunName: "sWrite_2Ex_New", + InData: InData, + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + + _YRead= function(Address,HKey,LKey,Path) + { + var msg = + { + FunName: "YRead", + Address:Address, + HKey:HKey, + LKey:LKey, + Path:Path + }; + Socket_UK.send(JSON.stringify(msg)); + }; + + _YWrite= function(InData,Address,HKey,LKey,Path) + { + var msg = + { + FunName: "YWrite", + InData:InData, + Address:Address, + HKey:HKey, + LKey:LKey, + Path:Path + }; + Socket_UK.send(JSON.stringify(msg)); + }; + + + static _SetBuf= function(UK,InData,pos) + { + var msg = + { + FunName: "SetBuf", + InData: InData, + pos:pos + }; + UK.send(JSON.stringify(msg)); + }; + + static _GetBuf= function(UK,pos) + { + var msg = + { + FunName: "GetBuf", + pos: pos + }; + UK.send(JSON.stringify(msg)); + }; + + static _YReadEx= function(UK,Address,len, HKey,LKey,Path) + { + var msg = + { + FunName: "YReadEx", + Address:Address, + len:len, + HKey:HKey, + LKey:LKey, + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + static _YWriteEx= function (UK,Address,len,HKey,LKey,Path) + { + var msg = + { + FunName: "YWriteEx", + Address:Address, + len:len, + HKey:HKey, + LKey:LKey, + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _YReadString = function (UK,Address,len,HKey,LKey,Path) + { + var msg = + { + FunName: "YReadString", + Address:Address, + len:len, + HKey:HKey, + LKey:LKey, + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _YWriteString = function (UK,InString,Address,HKey,LKey,Path) + { + var msg = + { + FunName: "YWriteString", + InString:InString, + Address:Address, + HKey:HKey, + LKey:LKey, + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _SetWritePassword = function (UK,W_Hkey,W_Lkey,new_Hkey,new_Lkey,Path) + { + var msg = + { + FunName: "SetWritePassword", + W_Hkey:W_Hkey, + W_Lkey:W_Lkey, + new_Hkey:new_Hkey, + new_Lkey:new_Lkey, + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _SetReadPassword = function (UK,W_Hkey,W_Lkey,new_Hkey,new_Lkey,Path) + { + var msg = + { + FunName: "SetReadPassword", + W_Hkey:W_Hkey, + W_Lkey:W_Lkey, + new_Hkey:new_Hkey, + new_Lkey:new_Lkey, + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + + _DecString = function (UK,InString,Key) + { + var msg = + { + FunName: "DecString", + InString:InString, + Key:Key + }; + UK.send(JSON.stringify(msg)); + }; + + _EncString = function (UK,InString,Path) + { + var msg = + { + FunName: "EncString", + InString:InString, + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _EncString_New = function (UK,InString,Path) + { + var msg = + { + FunName: "EncString_New", + InString:InString, + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _Cal = function(UK,Path) + { + var msg = + { + FunName: "Cal", + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _Cal_New = function(UK,Path) + { + var msg = + { + FunName: "Cal_New", + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _GetProduceDate= function(UK,Path) + { + var msg = + { + FunName: "GetProduceDate", + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _SetID= function(UK,Seed,Path) + { + var msg = + { + FunName: "SetID", + Seed:Seed, + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _SetCal_2 = function (UK,Key,Path) + { + var msg = + { + FunName: "SetCal_2", + Key:Key, + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _SetCal_2 = function (UK,Key,Path) + { + var msg = + { + FunName: "SetCal_2", + Key:Key, + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _SetCal_New = function (UK,Key,Path) + { + var msg = + { + FunName: "SetCal_New", + Key:Key, + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + static _SetEncBuf= function(UK,InData,pos) + { + var msg = + { + FunName: "SetEncBuf", + InData:InData, + pos: pos + }; + UK.send(JSON.stringify(msg)); + }; + + static _GetEncBuf= function(UK,pos) + { + var msg = + { + FunName: "GetEncBuf", + pos: pos + }; + UK.send(JSON.stringify(msg)); + }; + + + _ReSet = function (UK,Path) + { + var msg = + { + FunName: "ReSet", + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _MacAddr = function (UK) + { + var msg = + { + FunName: "MacAddr" + }; + UK.send(JSON.stringify(msg)); + }; + + + _GetChipID = function (UK,Path) + { + var msg = + { + FunName: "GetChipID", + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + static _StarGenKeyPair= function(UK,Path) + { + var msg = + { + FunName: "StarGenKeyPair", + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + static _GenPubKeyY= function(UK) + { + var msg = + { + FunName: "GenPubKeyY" + }; + UK.send(JSON.stringify(msg)); + }; + + static _GenPubKeyX= function(UK) + { + var msg = + { + FunName: "GenPubKeyX" + }; + UK.send(JSON.stringify(msg)); + }; + + static _GenPriKey= function(UK) + { + var msg = + { + FunName: "GenPriKey" + }; + UK.send(JSON.stringify(msg)); + }; + + _GetPubKeyY = function (UK,Path) + { + var msg = + { + FunName: "GetPubKeyY", + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _GetPubKeyX = function (UK,Path) + { + var msg = + { + FunName: "GetPubKeyX", + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _GetSm2UserName = function (UK,Path) + { + var msg = + { + FunName: "GetSm2UserName", + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _Set_SM2_KeyPair = function (UK,PriKey,PubKeyX,PubKeyY,sm2UserName,Path ) + { + var msg = + { + FunName: "Set_SM2_KeyPair", + PriKey:PriKey, + PubKeyX:PubKeyX, + PubKeyY:PubKeyY, + sm2UserName:sm2UserName, + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _YtSign = function (UK,SignMsg,Pin,Path) + { + var msg = + { + FunName: "YtSign", + SignMsg:SignMsg, + Pin:Pin, + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _YtSign_2 = function (UK,SignMsg,Pin,Path) + { + var msg = + { + FunName: "YtSign_2", + SignMsg:SignMsg, + Pin:Pin, + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _YtVerfiy = function (UK,id,SignMsg,PubKeyX, PubKeyY,VerfiySign,Path) + { + var msg = + { + FunName: "YtVerfiy", + id:id, + SignMsg:SignMsg, + PubKeyX:PubKeyX, + PubKeyY:PubKeyY, + VerfiySign:VerfiySign, + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _SM2_DecString = function (UK,InString,Pin,Path) + { + var msg = + { + FunName: "SM2_DecString", + InString:InString, + Pin:Pin, + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _SM2_EncString = function (UK,InString,Path) + { + var msg = + { + FunName: "SM2_EncString", + InString:InString, + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _YtSetPin = function (UK,OldPin,NewPin,Path) + { + var msg = + { + FunName: "YtSetPin", + OldPin:OldPin, + NewPin:NewPin, + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _FindU = function (UK,start) + { + var msg = + { + FunName: "FindU", + start: start + }; + UK.send(JSON.stringify(msg)); + }; + + _FindU_2 = function (UK,start,in_data,verf_data) + { + var msg = + { + FunName: "FindU_2", + start: start, + in_data: in_data, + verf_data:verf_data + }; + UK.send(JSON.stringify(msg)); + }; + + _FindU_3 = function (UK,start,in_data,verf_data) + { + var msg = + { + FunName: "FindU_3", + start: start, + in_data: in_data, + verf_data:verf_data + }; + UK.send(JSON.stringify(msg)); + }; + + _IsUReadOnly = function (UK,Path) + { + var msg = + { + FunName: "IsUReadOnly", + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _SetUReadOnly = function (UK,Path) + { + var msg = + { + FunName: "SetUReadOnly", + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + _SetHidOnly = function (UK,IsHidOnly,Path) + { + var msg = + { + FunName: "SetHidOnly", + IsHidOnly:IsHidOnly, + Path:Path + }; + UK.send(JSON.stringify(msg)); + }; + + static ResetOrder= function(UK) + { + var msg = + { + FunName: "ResetOrder" + }; + UK.send(JSON.stringify(msg)); + } + + ContinueOrder = function (UK) + { + var msg = + { + FunName: "ContinueOrder" + }; + UK.send(JSON.stringify(msg)); + } + + + _ComputerName= function(UK) + { + var msg = + { + FunName: "ComputerName" + }; + UK.send(JSON.stringify(msg)); + }; + + + + SendCmdAndWait = function(IsReturnErr,fun,param1,param2,param3,param4,param5,param6,param7,param8,param9,param10) +{ + var UK; + + return new Promise((resolve, reject) => { + + if (typeof MozWebSocket != "undefined") { + UK = new MozWebSocket(this.url,"usbkey-protocol"); + } else { + UK = new WebSocket(this.url,"usbkey-protocol"); + } + + try + { + UK.onopen = function() { + SoftKey3W.ResetOrder(UK);// + } + + UK.onmessage =function got_packet(Msg) + { + var UK_Data = JSON.parse(Msg.data); + var return_value; + if(UK_Data.type!="Process")return ;// + switch(UK_Data.order) + { + case 0: + { + fun(UK,param1,param2,param3,param4,param5,param6,param7,param8,param9,param10); + } + break; //!!!!! + case 1: + { + SoftKey3W.LastError=UK_Data.LastError; + return_value=UK_Data.return_value; + if( SoftKey3W.LastError!=0){ + if(IsReturnErr)return_value=SoftKey3W.LastError; + } + // + UK.close(); + + resolve(return_value); + } + break; + } + } + UK.onclose = function(){ + + } + UK.onerror = (event) => { + alert('未能连接服务程序,请确定服务程序是否安装。'); + }; + } + catch(e) + { + alert(e.name + ": " + e.message); + resolve(false); + } + }) +} + + GetLastError = function() + { + return SoftKey3W.LastError; + } + + FindPort = function(start) + { + return this.SendCmdAndWait(false,this._FindPort,start); + } + + FindPort_2= function( start,in_data, verf_data ) + { + return this.SendCmdAndWait(false,this._FindPort_2,start,in_data, verf_data); + }; + + GetVersionEx= function(KeyPath) + { + return this.SendCmdAndWait(false,this._GetVersionEx,KeyPath); + }; + + GetVersion= function(KeyPath) + { + return this.SendCmdAndWait(false,this._GetVersion,KeyPath); + }; + + + + GetID_1= function(KeyPath) + { + return this.SendCmdAndWait(false,this._GetID_1,KeyPath); + } + + GetID_2= function(KeyPath) + { + return this.SendCmdAndWait(false,this._GetID_2,KeyPath); + + } + + GetChipID= function(KeyPath) + { + return this.SendCmdAndWait(false,this._GetChipID,KeyPath); + + }; + + SetWritePassword= function( W_HKey, W_LKey, new_HKey, new_LKey,KeyPath) + { + return this.SendCmdAndWait(true,this._SetWritePassword, W_HKey, W_LKey, new_HKey, new_LKey,KeyPath); + } + + SetReadPassword= function( W_HKey, W_LKey, new_HKey, new_LKey,KeyPath) + { + return this.SendCmdAndWait(true,this._SetReadPassword,W_HKey, W_LKey, new_HKey, new_LKey,KeyPath); + } + + + SetCal_2= function( Key,KeyPath) + { + return this.SendCmdAndWait(true,this._SetCal_2,Key,KeyPath); + } + + SetCal_New= function(Key,KeyPath) + { + return this.SendCmdAndWait(true,this._SetCal_New,Key,KeyPath); + } + + + EncString= function( InString,KeyPath) + { + return this.SendCmdAndWait(false,this._EncString,InString,KeyPath); + } + + EncString_New= function( InString,KeyPath) + { + return this.SendCmdAndWait(false,this._EncString_New, InString,KeyPath); + } + + + + Cal= function(Inbuf,KeyPath) + { + return SubCal(_Cal,Inbuf,KeyPath); + } + + Cal_New= function(Inbuf,KeyPath) + { + return SubCal(_Cal_New,Inbuf,KeyPath) + } + + + + sWriteEx= function( in_data ,KeyPath) + { + return this.SendCmdAndWait(false,this._sWriteEx,in_data ,KeyPath); + } + + sWrite_2Ex= function( in_data ,KeyPath) + { + return this.SendCmdAndWait(false,this._sWrite_2Ex,in_data ,KeyPath); + } + + sWriteEx_New= function( in_data ,KeyPath) + { + return this.SendCmdAndWait(false,this._sWriteEx_New,in_data ,KeyPath); + } + + sWrite_2Ex_New= function( in_data ,KeyPath) + { + return this.SendCmdAndWait(false,this._sWrite_2Ex_New,in_data ,KeyPath); + } + + sWrite= function( in_data ,KeyPath) + { + return this.SendCmdAndWait(true,this._sWrite,in_data ,KeyPath); + } + + sWrite_2= function( in_data ,KeyPath) + { + return this.SendCmdAndWait(true,this._sWrite_2,in_data ,KeyPath); + } + + sRead= function(KeyPath) + { + return this.SendCmdAndWait(false,this._sRead,KeyPath); + } + + + YWriteEx = function(indata, address, nlen, HKey, LKey,KeyPath) + { + var UK; + + return new Promise((resolve, reject) => { + + if (typeof MozWebSocket != "undefined") { + UK = new MozWebSocket(this.url,"usbkey-protocol"); + } else { + UK = new WebSocket(this.url,"usbkey-protocol"); + } + + try + { + var i=0,order; + UK.onopen = function() { + SoftKey3W.ResetOrder(UK);// + + } + + UK.onmessage =function got_packet(Msg) + { + var UK_Data = JSON.parse(Msg.data); + var return_value; + if(UK_Data.type!="Process")return ;// + if(UK_Data.order<nlen) + { + SoftKey3W._SetBuf(UK,indata[UK_Data.order],UK_Data.order); + return; + } + else{ + order=UK_Data.order-nlen; + } + + switch(order) + { + case 0: + { + SoftKey3W.LastError=UK_Data.LastError; + if( SoftKey3W.LastError!=0){ UK.close();resolve(UK_Data.return_value);return ; } + SoftKey3W._YWriteEx(UK,address, nlen, HKey, LKey,KeyPath); + } + break; //!!!!! + case 1: + { + SoftKey3W.LastError=UK_Data.LastError; + return_value=UK_Data.return_value; + if( SoftKey3W.LastError!=0){ + return_value=SoftKey3W.LastError; + } + + UK.close(); + + resolve(return_value); + } + break; + } + } + UK.onclose = function(){ + + } + UK.onerror = (event) => { + alert('未能连接服务程序,请确定服务程序是否安装。'); + }; + } + catch(e) + { + alert(e.name + ": " + e.message); + resolve(false); + } + }) +} + + + YWriteString= function(InString,Address , HKey, LKey,KeyPath) + { + return this.SendCmdAndWait(true,this._YWriteString,InString,Address , HKey, LKey,KeyPath); + } + + YReadEx= function(address, nlen, HKey, LKey,KeyPath ) + { + var outb = new Uint8Array(nlen); + var UK; + return new Promise((resolve, reject) => { + + if (typeof MozWebSocket != "undefined") { + UK = new MozWebSocket(this.url,"usbkey-protocol"); + } else { + UK = new WebSocket(this.url,"usbkey-protocol"); + } + + try + { + var i,order; + UK.onopen = function() { + SoftKey3W.ResetOrder(UK);// + + } + + UK.onmessage =function got_packet(Msg) + { + var UK_Data = JSON.parse(Msg.data); + var return_value; + if(UK_Data.type!="Process")return ;// + if(UK_Data.order<2) + { + + switch(UK_Data.order) + { + case 0: + { + SoftKey3W._YReadEx(UK,address, nlen, HKey, LKey,KeyPath); + } + break; //!!!!! + case 1: + { + SoftKey3W.LastError=UK_Data.LastError; + if( SoftKey3W.LastError!=0){ UK.close();resolve(outb);return ; } + + i=0; + SoftKey3W._GetBuf(UK,i);// + } + break; + } + } + else{ + SoftKey3W.LastError=UK_Data.LastError; + if( SoftKey3W.LastError!=0){ UK.close();resolve(outb);return ; } + outb[i]=UK_Data.return_value; + i++; + if( UK_Data.LastError!=0 || i>=nlen) + { + UK.close();resolve(outb);return ; + } + SoftKey3W._GetBuf(UK,i);// + + } + } + UK.onclose = function(){ + + } + UK.onerror = (event) => { + alert('未能连接服务程序,请确定服务程序是否安装。'); + }; + } + catch(e) + { + alert(e.name + ": " + e.message); + resolve(false); + } + }) + return outb; + } + + YReadString= function( Address, nlen, HKey, LKey,KeyPath) + { + return this.SendCmdAndWait(false,this._YReadString,Address, nlen, HKey, LKey,KeyPath); + } + + + YRead= function(Address,HKey,LKey,Path) + { + return this.SendCmdAndWait(false,this._YRead,Address,HKey,LKey,Path); + }; + + YWrite= function(InData,Address,HKey,LKey,Path) + { + return this.SendCmdAndWait(true,this._YWrite,InData,Address,HKey,LKey,Path) + }; + + + ReSet= function( KeyPath ) + { + return this.SendCmdAndWait(true,this._ReSet,KeyPath); + } + + + SetCal= function( HKey, LKey, new_HKey, new_LKey, KeyPath) + { + return this.SendCmdAndWait(true,this._SetCal,HKey, LKey, new_HKey, new_LKey,KeyPath); + } + + + + SetID= function( Seed, KeyPath) + { + return this.SendCmdAndWait(true,this._SetID, Seed,KeyPath); + } + + GetProduceDate= function( KeyPath) + { + return this.SendCmdAndWait(false,this._GetProduceDate,KeyPath); + } + + SetHidOnly= function( IsHidOnly, KeyPath) + { + return this.SendCmdAndWait(true,this._SetHidOnly, IsHidOnly,KeyPath); + } + + + SetUReadOnly= function(KeyPath) + { + return this.SendCmdAndWait(true,this._SetUReadOnly,KeyPath); + } + + + StarGenKeyPair = function(KeyPath) + { + var KeyPairInfo={ + GenPriKey:"", + GenPubKeyX:"", + GenPubKeyY:"", + } + var UK; + + return new Promise((resolve, reject) => { + + if (typeof MozWebSocket != "undefined") { + UK = new MozWebSocket(this.url,"usbkey-protocol"); + } else { + UK = new WebSocket(this.url,"usbkey-protocol"); + } + try + { + UK.onopen = function() { + SoftKey3W.ResetOrder(UK);// + } + + UK.onmessage =function got_packet(Msg) + { + var UK_Data = JSON.parse(Msg.data); + var return_value; + if(UK_Data.type!="Process")return ;// + switch(UK_Data.order) + { + case 0: + { + SoftKey3W._StarGenKeyPair(UK,KeyPath); + } + break; // + case 1: + { + SoftKey3W.LastError=UK_Data.LastError; + if( SoftKey3W.LastError!=0){UK.close(); resolve(KeyPairInfo);return ;} + SoftKey3W._GenPriKey(UK); + } + break; + case 2: + { + SoftKey3W.LastError=UK_Data.LastError; + if( SoftKey3W.LastError!=0){UK.close(); resolve(KeyPairInfo);return ;} + KeyPairInfo.GenPriKey=UK_Data.return_value; + SoftKey3W._GenPubKeyX(UK); + } + break; + case 3: + { + SoftKey3W.LastError=UK_Data.LastError; + if( SoftKey3W.LastError!=0){UK.close(); resolve(KeyPairInfo);return ;} + KeyPairInfo.GenPubKeyX=UK_Data.return_value; + SoftKey3W._GenPubKeyY(UK); + } + break; + case 4: + { + SoftKey3W.LastError=UK_Data.LastError; + if( SoftKey3W.LastError!=0){UK.close(); resolve(KeyPairInfo);return ;} + KeyPairInfo.GenPubKeyY=UK_Data.return_value; + + UK.close(); resolve(KeyPairInfo);return ; + } + break; + } + } + UK.onclose = function(){ + + } + UK.onerror = (event) => { + alert('未能连接服务程序,请确定服务程序是否安装。'); + }; + } + catch(e) + { + alert(e.name + ": " + e.message); + resolve(false); + } + }) + } + + + + Set_SM2_KeyPair= function(PriKey, PubKeyX, PubKeyY, SM2_UserName, KeyPath) + { + return this.SendCmdAndWait(true,this._Set_SM2_KeyPair,PriKey, PubKeyX, PubKeyY, SM2_UserName,KeyPath); + } + + Get_SM2_PubKey= function(KeyPath) + { + return this.SendCmdAndWait(false,this._Get_SM2_PubKey,KeyPath); + } + + GetPubKeyX= function(KeyPath) + { + return this.SendCmdAndWait(false,this._GetPubKeyX,KeyPath); + } + + GetPubKeyY= function(KeyPath) + { + return this.SendCmdAndWait(false,this._GetPubKeyY,KeyPath); + } + + GetSm2UserName= function(KeyPath) + { + return this.SendCmdAndWait(false,this._GetSm2UserName,KeyPath); + } + + SM2_EncBuf= function( InBuf, inlen, KeyPath) + { + return this.SendCmdAndWait(true,this._SM2_EncBuf, InBuf, inlen,KeyPath); + } + + SM2_DecBuf= function( InBuf, inlen, pin, KeyPath) + { + return this.SendCmdAndWait(true,this._SM2_DecBuf,InBuf, inlen, pin, KeyPath); + } + + SM2_EncString= function(InString, KeyPath) + { + return this.SendCmdAndWait(false,this._SM2_EncString,InString, KeyPath); + } + + SM2_DecString= function(InString, pin, KeyPath) + { + return this.SendCmdAndWait(false,this._SM2_DecString,InString, pin,KeyPath); + } + + YtSetPin= function(old_pin, new_pin, KeyPath) + { + return this.SendCmdAndWait(true,this._YtSetPin,old_pin, new_pin, KeyPath); + } + + + YtSign= function(msg, pin, KeyPath) + { + return this.SendCmdAndWait(false,this._YtSign,msg, pin, KeyPath); + } + + YtSign_2= function(msg, pin, KeyPath) + { + return this.SendCmdAndWait(false,this._YtSign_2,msg, pin, KeyPath); + } + + MacAddr= function() + { + return this.SendCmdAndWait(false,this._MacAddr); + } + + ComputerName= function() + { + return this.SendCmdAndWait(false,this._ComputerName); + }; + + SubCal = function(Fun,Inbuf,KeyPath) + { + var UK;var outb = new Uint8Array(8); + return new Promise((resolve, reject) => { + + if (typeof MozWebSocket != "undefined") { + UK = new MozWebSocket(this.url,"usbkey-protocol"); + } else { + UK = new WebSocket(this.url,"usbkey-protocol"); + } + + try + { + var i=0,order;var bIsEnc=true; + UK.onopen = function() { + SoftKey3W.ResetOrder(UK);// + + } + + UK.onmessage =function got_packet(Msg) + { + var UK_Data = JSON.parse(Msg.data); + var return_value; + if(UK_Data.type!="Process")return ;// + if(bIsEnc) + { + if(UK_Data.order<8) + { + SoftKey3W._SetEncBuf(UK,Inbuf[UK_Data.order],UK_Data.order); + return; + } + else{ + order=UK_Data.order-8; + } + + switch(order) + { + case 0: + { + SoftKey3W.LastError=UK_Data.LastError; + if( SoftKey3W.LastError!=0){UK.close(); resolve(outb);return ;} + Fun(UK, KeyPath); + } + break; // + case 1: + { + SoftKey3W.LastError=UK_Data.LastError; + return_value=UK_Data.return_value; + if( SoftKey3W.LastError!=0){UK.close(); resolve(outb);return ;} + bIsEnc=false;i=0; + SoftKey3W.ResetOrder(UK); + + } + break; + } + } + else{ + SoftKey3W.LastError=UK_Data.LastError; + if( SoftKey3W.LastError!=0){ + UK.close(); + resolve(outb);return ; + } + if(UK_Data.order<8) + { + if(UK_Data.order>0) + { + outb[i-1]=UK_Data.return_value; + } + SoftKey3W._GetEncBuf(UK,i);// + i++; + } + else{ + outb[i-1]=UK_Data.return_value; + UK.close(); + resolve(outb);return ; + } + } + } + UK.onclose = function(){ + + } + UK.onerror = (event) => { + alert('未能连接服务程序,请确定服务程序是否安装。'); + }; + } + catch(e) + { + alert(e.name + ": " + e.message); + resolve(false); + } + }) +} + + +} + -- Gitblit v1.9.2