From 5d812eba47fe0080570724c41fe8ecd3a049aeb0 Mon Sep 17 00:00:00 2001 From: Kagami Hiiragi Date: Mon, 19 Jan 2015 00:50:57 +0300 Subject: [PATCH] Use MSB 0 for pubkey behavior bitfield --- lib/structs.js | 9 ++++++--- test.js | 6 +++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/structs.js b/lib/structs.js index 8dffe58..2cdb731 100644 --- a/lib/structs.js +++ b/lib/structs.js @@ -496,7 +496,7 @@ exports.encrypted = { }, }; -// Creates bitfield class of the specified size. +// Creates bitfield (LSB 0) class of the specified size. var bitfield = function(size) { var bytesize = size / 8; return { @@ -550,16 +550,19 @@ var serviceFeatures = exports.serviceFeatures = objectAssign(bitfield(64), { * @namespace */ // TODO(Kagami): Document methods. +// XXX(Kagami): PyBitmessage uses MSB 0 scheme for this bitfield so we +// invert the numberes. See +// for details. exports.pubkeyFeatures = objectAssign(bitfield(32), { /** * Receiving node expects that the RIPE hash encoded in their address * preceedes the encrypted message data of msg messages bound for * them. */ - INCLUDE_DESTINATION: 30, + INCLUDE_DESTINATION: 1, /** * If true, the receiving node does send acknowledgements (rather than * dropping them). */ - DOES_ACK: 31, + DOES_ACK: 0, }); diff --git a/test.js b/test.js index b773d1d..cc9249c 100644 --- a/test.js +++ b/test.js @@ -277,12 +277,12 @@ describe("Common structures", function() { describe("pubkey features", function() { it("should decode", function() { - expect(pubkeyFeatures.decode(Buffer("c0000000", "hex"))).to.have.members([pubkeyFeatures.DOES_ACK, pubkeyFeatures.INCLUDE_DESTINATION]); + expect(pubkeyFeatures.decode(Buffer("00000003", "hex"))).to.have.members([pubkeyFeatures.DOES_ACK, pubkeyFeatures.INCLUDE_DESTINATION]); }); it("should encode", function() { - expect(pubkeyFeatures.encode([pubkeyFeatures.INCLUDE_DESTINATION, pubkeyFeatures.DOES_ACK]).toString("hex")).to.equal("c0000000"); - expect(pubkeyFeatures.encode(pubkeyFeatures.INCLUDE_DESTINATION).toString("hex")).to.equal("40000000"); + expect(pubkeyFeatures.encode([pubkeyFeatures.INCLUDE_DESTINATION, pubkeyFeatures.DOES_ACK]).toString("hex")).to.equal("00000003"); + expect(pubkeyFeatures.encode(pubkeyFeatures.DOES_ACK).toString("hex")).to.equal("00000001"); }); }); });