From: Vsevolod Stakhov Date: Sun, 21 Jun 2020 19:30:54 +0000 (+0100) Subject: [Rules] More fixes for bitcoin cash addresses decoding X-Git-Tag: 2.6~305 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=456198fdac726db604d2bbab85a0668b5c9dfa83;p=thirdparty%2Frspamd.git [Rules] More fixes for bitcoin cash addresses decoding --- diff --git a/rules/bitcoin.lua b/rules/bitcoin.lua index b7f9f1dbcc..4331d83822 100644 --- a/rules/bitcoin.lua +++ b/rules/bitcoin.lua @@ -145,7 +145,13 @@ local function is_segwit_bech32_address(word) if decoded then local bytes = decoded:bytes() - if bytes[1] == 0 then + -- The version byte’s most signficant bit is reserved and must be 0. + -- The 4 next bits indicate the type of address and the 3 least significant bits indicate the size of the hash. + local version = bit.band(bytes[1], 128) + local addr_type = bit.rshift(bit.band(bytes[1], 120), 3) + local _ = bit.band(bytes[1], 7) -- hash size + + if version == 0 and (addr_type == 0 or addr_type == 8)then -- TODO: Add checksum validation some day return true