diff --git a/nselib/bitcoin.lua b/nselib/bitcoin.lua index 3344ba8d7..b656926bd 100644 --- a/nselib/bitcoin.lua +++ b/nselib/bitcoin.lua @@ -30,7 +30,6 @@ -- - changed version/verack handling to support -- February 20th 2012 bitcoin protocol switchover -local bin = require "bin" local ipOps = require "ipOps" local match = require "match" local nmap = require "nmap" @@ -129,18 +128,18 @@ Request = { local sa = NetworkAddress:new(self.lhost, self.lport) local nodeid = openssl.rand_bytes(8) local useragent = "\0" - local lastblock = 0 + local lastblock = "\0\0\0\0" -- Construct payload in order to calculate checksum for the header - local payload = bin.pack("IA12II", data) + header.magic, cmd, header.length, header.checksum = string.unpack(">I4 c12 I4 I4", data) header.cmd = string.unpack("z", cmd) return header end, @@ -273,10 +271,8 @@ Response = { local pos = Response.Header.size + 1 self.header = Response.Header.parse(self.data) - local p_length - pos, p_length = Util.decodeVarInt(self.data, pos) local data - pos, data = bin.unpack("A" .. p_length, self.data, pos) + pos, data = Util.decodeVarString(self.data, pos) -- -- TODO: Alert decoding goes here @@ -303,13 +299,13 @@ Response = { -- Parses the raw data and builds the Version instance parse = function(self) - local pos, ra, sa + local ra, sa, cmd, nodeid - local cmd -- After 2012-02-20, version messages contain checksums - pos, self.magic, cmd, self.len, self.checksum, self.ver_raw, self.service, - self.timestamp, ra, sa, self.nodeid, - self.subver, self.lastblock = bin.unpack(" 31402 ) then local timestamp, data - pos, timestamp, data = bin.unpack("= 0xfd then + count, pos = string.unpack("