commit e3dfcb4be8e3c8ad72b0cddf4c6506ec0003469e
parent c51dc47f80f0a6baa285f689b729606cd40b9f8f
Author: nolash <dev@holbrook.no>
Date:   Thu, 29 Oct 2020 20:55:52 +0100
Initial commit, add v to filer
Diffstat:
| M | main.py |  |  | 33 | ++++++++++++++++++++++++++------- | 
1 file changed, 26 insertions(+), 7 deletions(-)
diff --git a/main.py b/main.py
@@ -16,17 +16,14 @@ class BloomFilter:
             raise ValueError('Need byte boundary bit value')
         self.rounds = rounds
         self.filter = numpy.zeros(self.bytes, dtype=numpy.uint8)
+        self.hasher = self.__hash
 
 
     def add(self, b):
         for i in range(self.rounds):
             salt = str(i)
-            salt_str = salt.encode('utf-8')
-            logg.debug('hashing {} {}'.format(b.hex(), salt))
-            h = hashlib.sha256()
-            h.update(b)
-            h.update(salt_str)
-            z = h.digest()
+            s = salt.encode('utf-8')
+            z = self.__hash(b, s)
             r = int.from_bytes(z, byteorder='big')
             m = r % self.bits
             bytepos = math.floor(m / 8)
@@ -36,8 +33,30 @@ class BloomFilter:
         return m
 
 
-    def check(self, s):
+    def check(self, b):
+        for i in range(self.rounds):
+            salt = str(i)
+            s = salt.encode('utf-8')
+            z = self.__hash(b, s)
+            r = int.from_bytes(z, byteorder='big')
+            m = r % self.bits
+            bytepos = math.floor(m / 8)
+            bitpos = m % 8
+            if not self.filter[bytepos] & 1 << bitpos:
+                return False
+            return True
+
+
+    def __hash(self, b, s):
+       logg.debug('hashing {} {}'.format(b.hex(), s.hex()))
+       h = hashlib.sha256()
+       h.update(b)
+       h.update(s)
+       return h.digest()
+
 
 
 f = BloomFilter(8192 * 8, 3)
 f.add(b'1024')
+print(f.check(b'1024'))
+print(f.check(b'1023'))