uses node-rsa instead of keypair

package is a bit bigger but still pure js
same package used by ursa purejs
This commit is contained in:
Romain Beaumont 2017-07-20 17:39:54 +02:00
parent 01c3c95cb4
commit 80f103d2f0
No known key found for this signature in database
GPG key ID: DB60E388B3BCF286
2 changed files with 7 additions and 7 deletions

View file

@ -39,10 +39,10 @@
"buffer-equal": "^1.0.0",
"debug": "^2.2.0",
"endian-toggle": "^0.0.0",
"keypair": "^1.0.1",
"lodash.get": "^4.1.2",
"lodash.merge": "^4.3.0",
"minecraft-data": "^2.17.0",
"node-rsa": "^0.4.2",
"prismarine-nbt": "^1.0.0",
"protodef": "^1.5.1",
"readable-stream": "^2.0.5",

View file

@ -8,7 +8,7 @@ const Server = require('./server');
const UUID = require('uuid-1345');
const endianToggle = require('endian-toggle');
const pluginChannels = require('./client/pluginChannels');
const keypair = require('keypair');
const NodeRSA = require('node-rsa');
module.exports=createServer;
@ -36,7 +36,7 @@ function createServer(options) {
const mcData=require("minecraft-data")(optVersion);
const version = mcData.version;
const serverKey = keypair({bits:1024});
const serverKey = new NodeRSA({b: 1024});
const server = new Server(version.minecraftVersion,options.customPackets);
server.motd = options.motd || "A Minecraft server";
@ -175,9 +175,9 @@ function createServer(options) {
if(needToVerify) {
serverId = crypto.randomBytes(4).toString('hex');
client.verifyToken = crypto.randomBytes(4);
const publicKeyStrArr = serverKey.public.split("\n");
const publicKeyStrArr = serverKey.exportKey('pkcs8-public-pem').split("\n");
let publicKeyStr = "";
for(let i = 1; i < publicKeyStrArr.length - 2; i++) {
for(let i = 1; i < publicKeyStrArr.length - 1; i++) {
publicKeyStr += publicKeyStrArr[i]
}
client.publicKey = new Buffer(publicKeyStr, 'base64');
@ -210,12 +210,12 @@ function createServer(options) {
function onEncryptionKeyResponse(packet) {
let sharedSecret;
try {
const verifyToken = crypto.privateDecrypt({key:serverKey.private,padding:crypto.constants.RSA_PKCS1_PADDING},packet.verifyToken);
const verifyToken = crypto.privateDecrypt({key:serverKey.exportKey(),padding:crypto.constants.RSA_PKCS1_PADDING},packet.verifyToken);
if(!bufferEqual(client.verifyToken, verifyToken)) {
client.end('DidNotEncryptVerifyTokenProperly');
return;
}
sharedSecret = crypto.privateDecrypt({key:serverKey.private,padding:crypto.constants.RSA_PKCS1_PADDING},packet.sharedSecret);
sharedSecret = crypto.privateDecrypt({key:serverKey.exportKey(),padding:crypto.constants.RSA_PKCS1_PADDING},packet.sharedSecret);
} catch(e) {
client.end('DidNotEncryptVerifyTokenProperly');
return;