implements authenticated encryption
This commit is contained in:
parent
e9dbf341fc
commit
50d37aa22e
5 changed files with 48 additions and 6 deletions
|
|
@ -15,6 +15,7 @@
|
||||||
"mocha": "~1.18.2",
|
"mocha": "~1.18.2",
|
||||||
"chai": "~1.9.1",
|
"chai": "~1.9.1",
|
||||||
"crypto-js": "http://crypto-js.googlecode.com/files/CryptoJS%20v3.1.2.zip",
|
"crypto-js": "http://crypto-js.googlecode.com/files/CryptoJS%20v3.1.2.zip",
|
||||||
|
"sjcl":"1.0.0",
|
||||||
"file-saver": "*"
|
"file-saver": "*"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,12 +10,18 @@ var config = {
|
||||||
//port: 10009,
|
//port: 10009,
|
||||||
//path: '/',
|
//path: '/',
|
||||||
//
|
//
|
||||||
key: 'g23ihfh82h35rf',
|
key: 'g23ihfh82h35rf', // api key for the peerjs server
|
||||||
host:'162.242.219.26',
|
host:'162.242.219.26', // peerjs server
|
||||||
port:10009,
|
port:10009,
|
||||||
path: '/',
|
path: '/',
|
||||||
maxPeers: 15,
|
maxPeers: 15,
|
||||||
debug: 3
|
// debug: 3,
|
||||||
|
sjclParams: {
|
||||||
|
salt: 'cc295e13e14edcc0', // choose your own salt (hex string)
|
||||||
|
iter:500,
|
||||||
|
mode:'ccm',
|
||||||
|
ts:parseInt(64),
|
||||||
|
}
|
||||||
},
|
},
|
||||||
limits: {
|
limits: {
|
||||||
totalCopayers: 10,
|
totalCopayers: 10,
|
||||||
|
|
|
||||||
|
|
@ -518,6 +518,7 @@
|
||||||
<script src="lib/bitcore.js"></script>
|
<script src="lib/bitcore.js"></script>
|
||||||
<script src="lib/crypto-js/rollups/aes.js"></script>
|
<script src="lib/crypto-js/rollups/aes.js"></script>
|
||||||
<script src="lib/file-saver/FileSaver.js"></script>
|
<script src="lib/file-saver/FileSaver.js"></script>
|
||||||
|
<script src="lib/sjcl/sjcl.js"></script>
|
||||||
<script src="lib/socket.io.js"></script>
|
<script src="lib/socket.io.js"></script>
|
||||||
<script src="js/copayBundle.js"></script>
|
<script src="js/copayBundle.js"></script>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,12 @@ function Network(opts) {
|
||||||
this.debug = opts.debug || 3;
|
this.debug = opts.debug || 3;
|
||||||
this.maxPeers = opts.maxPeers || 10;
|
this.maxPeers = opts.maxPeers || 10;
|
||||||
this.opts = { key: opts.key };
|
this.opts = { key: opts.key };
|
||||||
|
this.sjclParams = opts.sjclParams || {
|
||||||
|
salt: 'f28bfb49ef70573c',
|
||||||
|
iter:500,
|
||||||
|
mode:'ccm',
|
||||||
|
ts:parseInt(64),
|
||||||
|
};
|
||||||
|
|
||||||
// For using your own peerJs server
|
// For using your own peerJs server
|
||||||
['port', 'host', 'path', 'debug'].forEach(function(k) {
|
['port', 'host', 'path', 'debug'].forEach(function(k) {
|
||||||
|
|
@ -152,10 +158,11 @@ Network.prototype._addCopayer = function(copayerId, isInbound) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Network.prototype._onData = function(data, isInbound, peerId) {
|
Network.prototype._onData = function(encStr, isInbound, peerId) {
|
||||||
var sig, payload;
|
var sig, payload;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
var data = this._decrypt(encStr);
|
||||||
payload= JSON.parse(data);
|
payload= JSON.parse(data);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log('### ERROR IN DATA: "%s" ', data, isInbound, e);
|
console.log('### ERROR IN DATA: "%s" ', data, isInbound, e);
|
||||||
|
|
@ -355,13 +362,39 @@ Network.prototype.getPeer = function() {
|
||||||
return this.peer;
|
return this.peer;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Network.prototype._encryptFor = function(copayerId, payloadStr) {
|
||||||
|
var cBits= sjcl.codec.hex.toBits(copayerId);
|
||||||
|
var pass64= sjcl.codec.base64.fromBits(cBits);
|
||||||
|
var plainText = sjcl.codec.utf8String.toBits(payloadStr);
|
||||||
|
var p = this.sjclParams; // auth strength
|
||||||
|
ct = sjcl.encrypt(pass64, plainText, p);//,p, rp);
|
||||||
|
var c = JSON.parse(ct);
|
||||||
|
var toSend = {
|
||||||
|
iv: c.iv,
|
||||||
|
ct: c.ct,
|
||||||
|
};
|
||||||
|
return JSON.stringify(toSend);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Network.prototype._decrypt = function(encStr) {
|
||||||
|
var i = JSON.parse(encStr);
|
||||||
|
for (var k in this.sjclParams) {
|
||||||
|
i[k] = this.sjclParams[k];
|
||||||
|
}
|
||||||
|
var str= JSON.stringify(i);
|
||||||
|
var cBits= sjcl.codec.hex.toBits(this.copayerId);
|
||||||
|
var pass64= sjcl.codec.base64.fromBits(cBits);
|
||||||
|
var pt = sjcl.decrypt(pass64, str);
|
||||||
|
return pt;
|
||||||
|
};
|
||||||
|
|
||||||
Network.prototype._sendToOne = function(copayerId, payloadStr, sig, cb) {
|
Network.prototype._sendToOne = function(copayerId, payloadStr, sig, cb) {
|
||||||
var peerId = this.peerFromCopayer(copayerId);
|
var peerId = this.peerFromCopayer(copayerId);
|
||||||
if (peerId !== this.peerId) {
|
if (peerId !== this.peerId) {
|
||||||
var dataConn = this.connections[peerId];
|
var dataConn = this.connections[peerId];
|
||||||
if (dataConn) {
|
if (dataConn) {
|
||||||
dataConn.send(payloadStr);
|
dataConn.send(this._encryptFor(copayerId, payloadStr));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
console.log('[WebRTC.js.255] WARN: NO CONNECTION TO:', peerId); //TODO
|
console.log('[WebRTC.js.255] WARN: NO CONNECTION TO:', peerId); //TODO
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,8 @@
|
||||||
"url": "https://github.com/bitpay/copay/issues"
|
"url": "https://github.com/bitpay/copay/issues"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "mocha"
|
"test": "mocha",
|
||||||
|
"postinstall": "cd lib/sjcl;./configure;make;cp sjcl.js ../"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/bitpay/copay",
|
"homepage": "https://github.com/bitpay/copay",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue