commit 456198f: [Rules] More fixes for bitcoin cash addresses decoding

Vsevolod Stakhov vsevolod at highsecure.ru
Sun Jun 21 19:56:13 UTC 2020


Author: Vsevolod Stakhov
Date: 2020-06-21 20:30:54 +0100
URL: https://github.com/rspamd/rspamd/commit/456198fdac726db604d2bbab85a0668b5c9dfa83

[Rules] More fixes for bitcoin cash addresses decoding

---
 rules/bitcoin.lua | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/rules/bitcoin.lua b/rules/bitcoin.lua
index b7f9f1dbc..4331d8382 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


More information about the Commits mailing list