bdcontract-web-ide/js/createWS.js

1 line
3.6 KiB
JavaScript

var createWssocket=function(wsurl,onopen,handler){console.log("[createWS.js] createWssocket : "+wsurl);var retsocket={};var wssocket=new WebSocket(wsurl);wssocket.onerror=function(error){console.log(error)};wssocket.onopen=onopen;var onmessage=function(event){var obj=JSON.parse(event.data);switch(obj.action){case"sendNextSegment":retsocket.sendNextSegment();break;case"sendSeg":retsocket.receiveSeg(obj);C;break;default:handler(event,wssocket)}};var reconnect=function(error){setTimeout(function(){console.log("[createWS.js] try to reconnect");wssocket=new WebSocket(wsurl);wssocket.onclose=reconnect;wssocket.onmessage=onmessage;wssocket.onopen=onopen},1000)};wssocket.onclose=reconnect;retsocket.receiveSeg=function(obj){if(obj.cid=="start"){retsocket.toReceive=""}retsocket.toReceive+=obj.data;if(obj.cid=="done"){console.log("[receiveSeg] Received AllData:"+retsocket.toReceive);var event={};event.data=retsocket.toReceive;retsocket.toReceive="";handler(event)}};wssocket.onmessage=onmessage;retsocket.isSending=false;retsocket.sendList=[];retsocket.monitor=function(){if(!retsocket.isSending){if(retsocket.sendList.length>0){retsocket.send(retsocket.sendList.pop())}}setTimeout(retsocket.monitor,1000)};retsocket.monitor();retsocket.send=function(str){if(retsocket.isSending){retsocket.sendList.push(str);return}if(str.length>1024){retsocket.isSending=true;retsocket.toSend=str.substr(1024);var obj={};obj.isSegment=true;obj.data=str.substr(0,1024);wssocket.send(JSON.stringify(obj))}else{wssocket.send(str)}};retsocket.sendNextSegment=function(){var str=retsocket.toSend;if(str.length>1024){retsocket.toSend=str.substr(1024);var obj={};obj.isSegment=true;obj.data=str.substr(0,1024);wssocket.send(JSON.stringify(obj))}else{retsocket.toSend="";var obj={};obj.isSegment=false;obj.data=str;wssocket.send(JSON.stringify(obj));retsocket.isSending=false;if(retsocket.sendList.length>0){retsocket.send(retsocket.sendList.pop())}}};retsocket.isOpen=function(){return wssocket.readyState};return retsocket};var aesDecrypt=function(data){data=cryptico.b64to256(data);var encryptedBlocks=cryptico.string2bytes(data);var exkey=global.aesKey.slice(0);aes.ExpandKey(exkey);aes.Decrypt(encryptedBlocks,exkey);return cryptico.bytes2string(encryptedBlocks)};var aesEncrypt=function(data,aesKey){var key=aesKey;var exkey=key.slice(0);aes.ExpandKey(exkey);var blocks=my.string2bytes(data);blocks=my.pad16(blocks);aes.Encrypt(blocks,exkey);ciphertext=cryptico.bytes2string(blocks);ciphertext=cryptico.b256to64(ciphertext);return ciphertext};var rsaEncrypt=function(data,rsaKey){var rsa=new RSAKey();rsa.setPublic(rsaKey.n,rsaKey.e1);var result=rsa.encrypt(data);return result};var loadRSAKey=function(rsaKey){var str=cryptico.b64to256(rsaKey);str=str.split(",");var ret={};ret.n=str[0];ret.e1=str[1];ret.e2=str[2];return ret};var testRSA=function(){pubKey=loadRSAKey(global.privKey);reqContent={};reqContent.action="main";reqContent.arg='[{"score":20},{"score":20}]';reqContent.contractID="abc";eReq=encryptReq(reqContent,pubKey);url="http://localhost:8080/SCIDE/SCManager?action=executeContractEncrypted&contractRequest="+encodeURIComponent(JSON.stringify(eReq))};var encryptReq=function(reqContent,pubKey){var aes={};aes.key=cryptico.generateAESKey();var aesObj=JSON.stringify(aes);var rsa=new RSAKey();rsa.setPrivate(pubKey.n,pubKey.e1,pubKey.e2);var encrypedReq={};encrypedReq.action=rsa.decrypt(aesObj);encrypedReq.contractID=reqContent.contractID;reqContent.contractID=undefined;encrypedReq.arg=JSON.stringify(reqContent);encrypedReq.arg=aesEncrypt(encrypedReq.arg,aes.key);encrypedReq.requester=pubKey.n+","+pubKey.e1+","+"0";encrypedReq.requester=cryptico.b256to64(encrypedReq.requester);return encrypedReq};