From d22a813a2333186a97ea5edc52324d670ec82cc4 Mon Sep 17 00:00:00 2001 From: Romain Beaumont Date: Fri, 17 Jun 2016 14:33:55 +0200 Subject: [PATCH] add decryption test --- package.json | 5 ++++- test/decryption.js | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 test/decryption.js diff --git a/package.json b/package.json index 1c2cd02..bb4aa44 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,10 @@ "raknet": "^1.7.4", "uuid-1345": "^0.99.6" }, - "devDependencies": {}, + "devDependencies": { + "buffer-equal": "^1.0.0", + "mocha": "^2.5.3" + }, "repository": { "type": "git", "url": "git+https://github.com/mhsjlw/pocket-minecraft-protocol.git" diff --git a/test/decryption.js b/test/decryption.js new file mode 100644 index 0000000..af898ee --- /dev/null +++ b/test/decryption.js @@ -0,0 +1,41 @@ +const crypto=require("crypto"); +const assert=require("assert"); +const bufferEqual=require("buffer-equal"); + +// based on https://s.yawk.at/8W5U and https://confluence.yawk.at/display/PEPROTOCOL/Encryption +describe("decryption",() => { + let decipher; + before(() => { + + let secretKeyBytes = new Buffer("ZOBpyzki/M8UZv5tiBih048eYOBVPkQE3r5Fl0gmUP4=","base64"); + + ///// + + let iv = secretKeyBytes.slice(0,16); + + assert(bufferEqual(iv, new Buffer("ZOBpyzki/M8UZv5tiBih0w==","base64"))); + + + decipher = crypto.createDecipheriv('aes-256-cfb8', secretKeyBytes, iv); + }); + + + it("decrypt 1",cb => { + let packet1Encrypted = new Buffer("4B4FCA0C2A4114155D67F8092154AAA5EF","hex"); + decipher.once('data', packet1Decrypted => { + assert(bufferEqual(packet1Decrypted, new Buffer("0400000000499602D2FC2FCB233F34D5DD", "hex"))); + cb(); + }); + decipher.write(packet1Encrypted); + }); + + + it("decrypt 2",cb => { + let packet2Encrypted = new Buffer("DF53B9764DB48252FA1AE3AEE4","hex"); + decipher.once('data', packet2Decrypted => { + assert(bufferEqual(packet2Decrypted,new Buffer("3C000000085A446D11C0C7AA5A","hex"))); + cb(); + }); + decipher.write(packet2Encrypted); + }) +}); \ No newline at end of file