def add(self, item): '''Add an item to the filter''' for i in range(self.function_count): seed = i * BIP37_CONSTANT + self.tweak hash = murmur3(item, seed=seed) bit = hash % len(self.bit_field) self.bit_field[bit] = 1
def add(self, item): # We hash function_count number of times. for i in range(self.function_count): # This is the seed formula - page 215. seed = i * BIP37_CONSTANT + self.tweak # murmur3 returns a number, so we don't have to convert to an integer. h = murmur3(item, seed=seed) bit = h % len(self.bit_field) self.bit_field[bit] = 1
def add(self, item): '''Add an item to the filter''' i = 0 for i in range(self.function_count): # while i < self.function_count: dat_spec_seed = i * BIP37_CONSTANT + self.tweak h = murmur3(item, seed=dat_spec_seed) bit = h % (self.size * 8) self.bit_field[bit] = 1
def add(self, item): '''Add an item to the filter''' # iterate self.function_count number of times for i in range(self.function_count): # BIP0037 spec seed is i*BIP37_CONSTANT + self.tweak seed = i * BIP37_CONSTANT + self.tweak # get the murmur3 hash given that seed h = murmur3(item, seed=seed) # set the bit at the hash mod the bitfield size (self.size*8) self.bit_field[h % (self.size * 8)] = 1
def add(self, item): '''Add an item to the filter''' # iterate self.function_count number of times for i in range(self.function_count): seed = i * BIP37_CONSTANT + tweak h = murmur3(item, seed=seed) bit = h % (self.size * 8) self.bit_field[bit] = 1 # BIP0037 spec seed is i*BIP37_CONSTANT + self.tweak # get the murmur3 hash given that seed # set the bit at the hash mod the bitfield size (self.size*8) # set the bit field at bit to be 1 raise NotImplementedError
def test_example_4(self): field_size = 2 num_functions = 2 tweak = 42 bit_field_size = field_size * 8 bit_field = [0] * bit_field_size for phrase in (b'hello world', b'goodbye'): for i in range(num_functions): seed = i * BIP37_CONSTANT + tweak h = murmur3(phrase, seed=seed) bit = h % bit_field_size bit_field[bit] = 1 self.assertEqual(bit_field, [0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0])
def test_exercise_1(self): field_size = 10 function_count = 5 tweak = 99 items = (b'Hello World', b'Goodbye!') bit_field_size = field_size * 8 bit_field = [0] * bit_field_size for item in items: for i in range(function_count): seed = i * BIP37_CONSTANT + tweak h = murmur3(item, seed=seed) bit = h % bit_field_size bit_field[bit] = 1 self.assertEqual( bit_field_to_bytes(bit_field).hex(), '4000600a080000010940')
def add(self, item): for i in range(self.function_count): seed = i * BIP37_CONSTANT + self.tweak h = murmur3(item, seed=seed) bit = h % (self.size * 8) self.bit_field[bit] = 1
from helper import murmur3 from bloomfilter import BIP37_CONSTANT field_size = 10 num_functions = 5 tweak = 99 bit_field_size = field_size * 8 bit_field = [0] * bit_field_size for phrase in (b'Hello World', b'Goodbye!'): for i in range(num_functions): seed = i * BIP37_CONSTANT + tweak h = murmur3(phrase, seed=seed) bit = h % bit_field_size bit_field[bit] = 1 print(bit_field)