UNPKG

pocket-minecraft-protocol

Version:

Parse and serialize Minecraft Bedrock Edition packets

33 lines (28 loc) 1.15 kB
const crypto=require("crypto"); const assert=require("assert"); const bufferEqual=require("buffer-equal"); function writeLI64(value, buffer, offset) { buffer.writeInt32LE(value[0], offset+4); buffer.writeInt32LE(value[1], offset); return offset + 8; } // based on https://s.yawk.at/QADm and https://confluence.yawk.at/display/PEPROTOCOL/Encryption describe("checksum",() => { it("generate hash and checksum",() => { let packetPlaintext = new Buffer("3C00000008","hex"); let sendCounter = [0,1]; let secretKeyBytes = new Buffer("ZOBpyzki/M8UZv5tiBih048eYOBVPkQE3r5Fl0gmUP4=","base64"); ///// let digest = crypto.createHash('sha256'); // sendCounter to little-endian byte array let counter=new Buffer(8); writeLI64(sendCounter,counter,0); digest.update(counter); digest.update(packetPlaintext); digest.update(secretKeyBytes); let hash = digest.digest(); assert(bufferEqual(hash, new Buffer("WkRtEcDHqlqesU6wdSnIz7cU3OCNKVMIsX3aXZMLRjQ=","base64")),hash.toString("base64")); let checksum = hash.slice(0,8); assert(bufferEqual(checksum, new Buffer("5A446D11C0C7AA5A","hex"))); }) });