From bef983abdd542cc449cf8e15139c4f1bc734df07 Mon Sep 17 00:00:00 2001 From: david Date: Thu, 29 Oct 2009 00:28:29 +0000 Subject: [PATCH] Make packet.in_cksum more efficient by not making lots of substring copies. --- nselib/packet.lua | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/nselib/packet.lua b/nselib/packet.lua index a765b1ffa..53661fad6 100644 --- a/nselib/packet.lua +++ b/nselib/packet.lua @@ -74,16 +74,16 @@ end -- @return Checksum. function in_cksum(b) local sum = 0 - local c - local x = b + local i - while x:len() > 1 do - c = x:sub(1,2) - x = x:sub(3) - sum = sum + u16(c, 0) + -- Note we are using 0-based indexes here. + i = 0 + while i < b:len() - 1 do + sum = sum + u16(b, i) + i = i + 2 end - if x:len() == 1 then - sum = sum + u8(x, 0) * 256 + if i < b:len() then + sum = sum + u8(b, i) * 256 end sum = bit.rshift(sum, 16) + bit.band(sum, 0xffff)