def test_paper_example(self): alice = Participant("Alice", "A") bob = Participant("Bob", "B") participants = [alice, bob] msg1 = Message.from_plain_hex_str("aabb1234") msg1.participant = alice msg2 = Message.from_plain_hex_str("aabb6789") msg2.participant = alice msg3 = Message.from_plain_hex_str("bbaa4711") msg3.participant = bob msg4 = Message.from_plain_hex_str("bbaa1337") msg4.participant = bob protocol = ProtocolAnalyzer(None) protocol.messages.extend([msg1, msg2, msg3, msg4]) #self.save_protocol("paper_example", protocol) bitvectors = FormatFinder.get_bitvectors_from_messages( protocol.messages) hexvectors = FormatFinder.get_hexvectors(bitvectors) address_engine = AddressEngine(hexvectors, participant_indices=[ participants.index(msg.participant) for msg in protocol.messages ])
def test_sync_word_finding_varying_message_length(self): hex_messages = [ "aaaa9a7d0f1337471100009a44ebdd13517bf9", "aaaa9a7d4747111337000134a4473c002b909630b11df37e34728c79c60396176aff2b5384e82f31511581d0cbb4822ad1b6734e2372ad5cf4af4c9d6b067e5f7ec359ec443c3b5ddc7a9e", "aaaa9a7d0f13374711000205ee081d26c86b8c", "aaaa9a7d474711133700037cae4cda789885f88f5fb29adc9acf954cb2850b9d94e7f3b009347c466790e89f2bcd728987d4670690861bbaa120f71f14d4ef8dc738a6d7c30e7d2143c267", "aaaa9a7d0f133747110004c2906142300427f3" ] messages = [ Message.from_plain_hex_str(hex_msg) for hex_msg in hex_messages ] for i in range(1, len(messages)): messages[i].message_type = messages[0].message_type ff = FormatFinder(messages) ff.run() self.assertEqual(len(ff.message_types), 1) preamble = ff.message_types[0].get_first_label_with_type( FieldType.Function.PREAMBLE) self.assertEqual(preamble.start, 0) self.assertEqual(preamble.length, 16) sync = ff.message_types[0].get_first_label_with_type( FieldType.Function.SYNC) self.assertEqual(sync.start, 16) self.assertEqual(sync.length, 16)
def test_multiple_sync_words(self): hex_messages = [ "aaS1234", "aaScafe", "aaSdead", "aaSbeef", ] for i in range(1, 256): messages = [] sync = "{0:02x}".format(i) if sync.startswith("a"): continue for msg in hex_messages: messages.append( Message.from_plain_hex_str(msg.replace("S", sync))) for i in range(1, len(messages)): messages[i].message_type = messages[0].message_type ff = FormatFinder(messages) ff.run() self.assertEqual(len(ff.message_types), 1, msg=sync) preamble = ff.message_types[0].get_first_label_with_type( FieldType.Function.PREAMBLE) self.assertEqual(preamble.start, 0, msg=sync) self.assertEqual(preamble.length, 8, msg=sync) sync = ff.message_types[0].get_first_label_with_type( FieldType.Function.SYNC) self.assertEqual(sync.start, 8, msg=sync) self.assertEqual(sync.length, 8, msg=sync)