def test_init_with_elements(self): elements = b'\x00\x01\x02\x03\x04' m = 7 k = 10 filter = crypto.BloomFilter(m=m, k=k, ntweak=123456, elements=elements) self.assertEqual(m, filter.bits.length()) self.assertEqual(k, len(filter.seeds))
def test_add_and_check(self): # modelled after https://github.com/neo-project/neo/blob/982e69090f27c1415872536ce39aea22f0873467/neo.UnitTests/Cryptography/UT_BloomFilter.cs#L12 elements = b'\x00\x01\x02\x03\x04' filter = crypto.BloomFilter(m=7, k=10, ntweak=123456) filter.add(elements) self.assertTrue(filter.check(elements)) self.assertFalse(filter.check(elements + b'\x05'))
def test_seed_building(self): filter = crypto.BloomFilter(m=7, k=10, ntweak=123456) # these values have been captured by creating a BloomFilter in C# and reading the seed values through debugging expected_seeds = [ 123456, 4222003669, 4148916586, 4075829503, 4002742420, 3929655337, 3856568254, 3783481171, 3710394088, 3637307005 ] self.assertEqual(expected_seeds, filter.seeds)
def test_get_bits(self): """ byte[] elements = { 0, 1, 2, 3, 4}; BloomFilter bf = new BloomFilter(7, 10, 123456, elements); byte[] buffer = new byte[(bf.M/8)+1]; Console.WriteLine($"\\x{BitConverter.ToString(buffer).Replace("-", "\\x")}"); """ elements = b'\x00\x01\x02\x03\x04' filter = crypto.BloomFilter(m=7, k=10, ntweak=123456, elements=elements) self.assertEqual(b'\x00', filter.get_bits())
def _serializable_init(cls): bf = crypto.BloomFilter(8, 2, 345) return cls(bf)