Update v0.7
Messages sent are signed and verified on receive
This commit is contained in:
parent
f01103ec2c
commit
a8e46f38a2
48
app.js
48
app.js
@ -10,6 +10,48 @@ if (!window.indexedDB) {
|
|||||||
var contacts = [];
|
var contacts = [];
|
||||||
var receiverID,senderID;
|
var receiverID,senderID;
|
||||||
var selfwebsocket;
|
var selfwebsocket;
|
||||||
|
var privKey = prompt("Enter Private Key : ")
|
||||||
|
|
||||||
|
var wallets = {
|
||||||
|
ecparams: EllipticCurve.getSECCurveByName("secp256k1"),
|
||||||
|
getPubKeyHex: function(privateKeyHex){
|
||||||
|
var key = new Bitcoin.ECKey(privateKeyHex);
|
||||||
|
if(key.priv == null){
|
||||||
|
alert("Invalid Private key");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
key.setCompressed(true);
|
||||||
|
var pubkeyHex = key.getPubKeyHex();
|
||||||
|
return pubkeyHex;
|
||||||
|
},
|
||||||
|
sign: function (msg, privateKeyHex) {
|
||||||
|
var key = new Bitcoin.ECKey(privateKeyHex);
|
||||||
|
key.setCompressed(true);
|
||||||
|
|
||||||
|
var privateKeyArr = key.getBitcoinPrivateKeyByteArray();
|
||||||
|
privateKey = BigInteger.fromByteArrayUnsigned(privateKeyArr);
|
||||||
|
var messageHash = Crypto.SHA256(msg);
|
||||||
|
|
||||||
|
var messageHashBigInteger = new BigInteger(messageHash);
|
||||||
|
var messageSign = Bitcoin.ECDSA.sign(messageHashBigInteger, key.priv);
|
||||||
|
|
||||||
|
var sighex = Crypto.util.bytesToHex(messageSign);
|
||||||
|
return sighex;
|
||||||
|
},
|
||||||
|
verify: function (msg, signatureHex, publicKeyHex) {
|
||||||
|
var msgHash = Crypto.SHA256(msg);
|
||||||
|
var messageHashBigInteger = new BigInteger(msgHash);
|
||||||
|
|
||||||
|
var sigBytes = Crypto.util.hexToBytes(signatureHex);
|
||||||
|
var signature = Bitcoin.ECDSA.parseSig(sigBytes);
|
||||||
|
|
||||||
|
var publicKeyPoint = this.ecparams.getCurve().decodePointHex(publicKeyHex);
|
||||||
|
|
||||||
|
var verify = Bitcoin.ECDSA.verifyRaw(messageHashBigInteger, signature.r, signature.s,
|
||||||
|
publicKeyPoint);
|
||||||
|
return verify;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function convertStringToInt(string){
|
function convertStringToInt(string){
|
||||||
return parseInt(string,10);
|
return parseInt(string,10);
|
||||||
@ -353,6 +395,8 @@ function initselfWebSocket(){
|
|||||||
console.log(evt.data);
|
console.log(evt.data);
|
||||||
try{
|
try{
|
||||||
var data = JSON.parse(evt.data);
|
var data = JSON.parse(evt.data);
|
||||||
|
if(!wallets.verify(data.msg,data.sign,data.pubKey))
|
||||||
|
return
|
||||||
var time = Date.now();
|
var time = Date.now();
|
||||||
var disp = document.getElementById(data.from);
|
var disp = document.getElementById(data.from);
|
||||||
var msgdiv = document.createElement('div');
|
var msgdiv = document.createElement('div');
|
||||||
@ -412,7 +456,9 @@ function sendMsg(){
|
|||||||
console.log(msg);
|
console.log(msg);
|
||||||
var ws = new WebSocket("ws://"+contacts[receiverID].onionAddr+"/ws");
|
var ws = new WebSocket("ws://"+contacts[receiverID].onionAddr+"/ws");
|
||||||
ws.onopen = function(evt){
|
ws.onopen = function(evt){
|
||||||
var data = JSON.stringify({from:senderID,msg:msg});
|
var sign = wallets.sign(msg,privKey)
|
||||||
|
var pubkeyHex = wallets.getPubKeyHex(privKey)
|
||||||
|
var data = JSON.stringify({from:senderID,msg:msg,sign:sign,pubKey:pubkeyHex});
|
||||||
ws.send(data);
|
ws.send(data);
|
||||||
console.log(`sentMsg : ${data}`);
|
console.log(`sentMsg : ${data}`);
|
||||||
time = Date.now();
|
time = Date.now();
|
||||||
|
|||||||
3127
registerID.js
3127
registerID.js
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user