diff --git a/package.json b/package.json index 1edc28d..402d91b 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/src/createServer.js b/src/createServer.js index 5fbe85b..c9ca5de 100644 --- a/src/createServer.js +++ b/src/createServer.js @@ -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;