Experimental: replace OpenSSL RC4 functions with pure JS ('npm install' required)
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
const CryptoJS = require('crypto-js');
|
const CryptoJS = require('crypto-js');
|
||||||
const endianness = require('endianness');
|
const endianness = require('endianness');
|
||||||
|
var RC4 = require('rc4-crypto');
|
||||||
var crypto = require('crypto');
|
var crypto = require('crypto');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -296,7 +297,7 @@ class WTVSec {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Starts an encryption session
|
* Starts an encryption session
|
||||||
* @param {Number} rc4session Session Type (0 = enc k1, 1 = dec k1, 3 = enc k2, 4 = dec k2, default: all)
|
* @param {Number} rc4session Session Type (0 = enc k1, 1 = dec k1, 2 = enc k2, 3 = dec k2, default: all)
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
SecureOn(rc4session = null) {
|
SecureOn(rc4session = null) {
|
||||||
@@ -310,22 +311,22 @@ class WTVSec {
|
|||||||
var key2 = this.wordArrayToBuffer(this.hRC4_Key2);
|
var key2 = this.wordArrayToBuffer(this.hRC4_Key2);
|
||||||
switch (rc4session) {
|
switch (rc4session) {
|
||||||
case 0:
|
case 0:
|
||||||
this.RC4Session[0] = crypto.createCipheriv('rc4', key1,'');
|
this.RC4Session[0] = new RC4.RC4(key1);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
this.RC4Session[1] = crypto.createDecipheriv('rc4', key1,'');
|
this.RC4Session[1] = new RC4.RC4(key1);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
this.RC4Session[2] = crypto.createCipheriv('rc4', key2,'');
|
this.RC4Session[2] = new RC4.RC4(key2);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
this.RC4Session[3] = crypto.createDecipheriv('rc4', key2,'');
|
this.RC4Session[3] = new RC4.RC4(key2);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
this.RC4Session[0] = crypto.createCipheriv('rc4', key1, '');
|
this.RC4Session[0] = new RC4.RC4(key1);
|
||||||
this.RC4Session[1] = crypto.createDecipheriv('rc4', key1, '');
|
this.RC4Session[1] = new RC4.RC4(key1);
|
||||||
this.RC4Session[2] = crypto.createCipheriv('rc4', key2, '');
|
this.RC4Session[2] = new RC4.RC4(key2);
|
||||||
this.RC4Session[3] = crypto.createDecipheriv('rc4', key2, '');
|
this.RC4Session[3] = new RC4.RC4(key2);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -355,10 +356,10 @@ class WTVSec {
|
|||||||
}
|
}
|
||||||
if (data.words) {
|
if (data.words) {
|
||||||
data = this.wordArrayToBuffer(data);
|
data = this.wordArrayToBuffer(data);
|
||||||
} else if (data.constructor === ArrayBuffer) {
|
} else if (data.constructor === ArrayBuffer || typeof data == 'string') {
|
||||||
data = new Buffer.from(data);
|
data = new Buffer.from(data);
|
||||||
}
|
}
|
||||||
return this.RC4Session[session_id].update(data);
|
return this.RC4Session[session_id].updateFromBuffer(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -386,10 +387,10 @@ class WTVSec {
|
|||||||
}
|
}
|
||||||
if (data.words) {
|
if (data.words) {
|
||||||
data = this.wordArrayToBuffer(data);
|
data = this.wordArrayToBuffer(data);
|
||||||
} else if (data.constructor === ArrayBuffer) {
|
} else if (data.constructor === ArrayBuffer || typeof data == 'string') {
|
||||||
data = new Buffer.from(data);
|
data = new Buffer.from(data);
|
||||||
}
|
}
|
||||||
return this.RC4Session[session_id].update(data);
|
return this.RC4Session[session_id].updateFromBuffer(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
6
zefie_wtvp_minisrv/package-lock.json
generated
6
zefie_wtvp_minisrv/package-lock.json
generated
@@ -22,6 +22,7 @@
|
|||||||
"newsie": "^1.2.1",
|
"newsie": "^1.2.1",
|
||||||
"nntp-server-zefie": "^3.1.0",
|
"nntp-server-zefie": "^3.1.0",
|
||||||
"proxy-agent": "^6.3.0",
|
"proxy-agent": "^6.3.0",
|
||||||
|
"rc4-crypto": "^1.5.0",
|
||||||
"sanitize-html": "^2.11.0",
|
"sanitize-html": "^2.11.0",
|
||||||
"socks-proxy-agent": "^8.0.1",
|
"socks-proxy-agent": "^8.0.1",
|
||||||
"strftime": "^0.10.2",
|
"strftime": "^0.10.2",
|
||||||
@@ -1155,6 +1156,11 @@
|
|||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/rc4-crypto": {
|
||||||
|
"version": "1.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/rc4-crypto/-/rc4-crypto-1.5.0.tgz",
|
||||||
|
"integrity": "sha512-0auP5EfZ21/RP437NgmH+eCTgwDGA611KYCU/2ywk1aIUhR1rHToI4z3ZtQ9BRZYw44M9htklIZK5khkBJerAw=="
|
||||||
|
},
|
||||||
"node_modules/safe-buffer": {
|
"node_modules/safe-buffer": {
|
||||||
"version": "5.2.1",
|
"version": "5.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||||
|
|||||||
@@ -6,8 +6,7 @@
|
|||||||
"homepage": "https://github.com/zefie/zefie_wtvp_minisrv",
|
"homepage": "https://github.com/zefie/zefie_wtvp_minisrv",
|
||||||
"license": "GPL3",
|
"license": "GPL3",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node --openssl-legacy-provider app.js",
|
"start": "node app.js",
|
||||||
"start16": "node app.js",
|
|
||||||
"test": "node test.js"
|
"test": "node test.js"
|
||||||
},
|
},
|
||||||
"author": {
|
"author": {
|
||||||
@@ -40,6 +39,7 @@
|
|||||||
"newsie": "^1.2.1",
|
"newsie": "^1.2.1",
|
||||||
"nntp-server-zefie": "^3.1.0",
|
"nntp-server-zefie": "^3.1.0",
|
||||||
"proxy-agent": "^6.3.0",
|
"proxy-agent": "^6.3.0",
|
||||||
|
"rc4-crypto": "^1.5.0",
|
||||||
"sanitize-html": "^2.11.0",
|
"sanitize-html": "^2.11.0",
|
||||||
"socks-proxy-agent": "^8.0.1",
|
"socks-proxy-agent": "^8.0.1",
|
||||||
"strftime": "^0.10.2",
|
"strftime": "^0.10.2",
|
||||||
|
|||||||
Reference in New Issue
Block a user