def verifier(outdata, label=None): nonlocal calls nonlocal use_eff_map eff_map_creator = mutate_seq_walking_byte # each mutator has characteristic max number of bits it can flip # only special case is first call by eff_map_creator calls += 1 if calls == 1 and use_eff_map == True and func == eff_map_creator: assert (ham_distance(payload, outdata) == 0) else: assert (ham_distance(payload, outdata) == flipped_bits ), "Bitflips mismatch on call %d:\n%s\n%s" % ( calls, hexlify(payload), hexlify(outdata)) #assert(bindiff(payload,outdata) in [b'\x80', b'\x40', b'\x20', b'\x10', b'\x08', b'\x04', b'\x02', b'\x01']), "Unexpected bitflip pattern" return False, False
def test_havoc_interesting_value_32(): for _ in range(ITERATIONS): assert (b'' == havoc_perform_insert_interesting_value_32(b'') ), "Failed on short input!" assert (b'\x23' == havoc_perform_insert_interesting_value_32(b'\x23') ), "Failed on short input!" assert (b'\x23ab' == havoc_perform_insert_interesting_value_32( b'\x23ab')), "Failed on short input!" db = [b'42ab', b'123134acd', b'adf23akh\0adfkn\x23', b'!#@$%^&*'] for data_in in db: data_out = havoc_perform_insert_interesting_value_32(data_in) #print('Test Interesting 32-Bit:', hexlify(data_in), "=>", hexlify(data_out)) assert (len(data_in) == len(data_out)), "Returned bad length!" assert (32 >= ham_distance(data_in, data_out)), "Flipped too many bits!" success = False for i in interesting_32_Bit: if struct.pack("<i", i) in bytearray(data_out) or struct.pack( ">i", i) in bytearray(data_out): success = True assert (success), "Bitflip flipped wrong bits!"
def test_havoc_bit_flip(): for _ in range(ITERATIONS): assert (b'' == havoc_perform_bit_flip(b'')), "Failed on short input!" db = [b'1', b'123134', b'adfakh\0adfkn\x23'] for data_in in db: data_out = havoc_perform_bit_flip(data_in) #print("Test Bitflip:", data_in, "=>", data_out) assert (len(data_in) == len(data_out)), "Returned length mismatch!" assert (1 == ham_distance(data_in, data_out)), "Bitflip flipped wrong bits!"
def test_havoc_interesting_value_8(): for _ in range(ITERATIONS): assert (b'' == havoc_perform_insert_interesting_value_8(b'') ), "Failed on short input!" db = [b'1', b'123134', b'adfakh\0adfkn\x23'] for data_in in db: data_out = havoc_perform_insert_interesting_value_8(data_in) #print('Test Interesting 8-Bit:', hexlify(data_in), "=>", hexlify(data_out)) assert (len(data_in) == len(data_out)), "Returned length mismatch!" assert (8 >= ham_distance(data_in, data_out)), "Flipped too many bits!" success = False for i in interesting_8_Bit: if struct.pack("!b", i) in bytearray(data_out): success = True assert (success), "Bitflip flipped wrong bits!"
def verifier(outdata, label=None): # each mutator has characteristic max number of bits it can flip assert (ham_distance(payload, outdata) <= max_flipped_bits ), "Flipped too many bits?\n%s\n%s" % (hexlify(payload), hexlify(outdata))