def rngStatusCallback(record): hcipkt = record[0] # get HCI Event packet if not issubclass(hcipkt.__class__, hci.HCI_Event): return if hcipkt.data[ 0: 21] == b'\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00': internalblue.logger.debug("Random data done!") internalblue.rnd_done = True # add RNG callback internalblue.registerHciCallback(rngStatusCallback) # read for multiple rounds to get more experiment data rounds = 100 i = 0 data = bytearray() while rounds > i: internalblue.logger.info("RNG round %i..." % i) # launch assembly snippet internalblue.launchRam(ASM_LOCATION_RNG) # wait until we set the global variable that everything is done while not internalblue.rnd_done: continue internalblue.rnd_done = False
""" Adds a new callback function so that we do not need to call Wireshark. """ hcipkt = record[0] if not issubclass(hcipkt.__class__, hci.HCI_Event): return if hcipkt.event_code == 0x0e: if u16(hcipkt.data[1:3]) == 0x1408: # Read Encryption Key Size if hcipkt.data[3] == 0x12: # Error internalblue.logger.info( "No key size available.\n" " - Did you already negotiate an encrypted connection?\n" " - Did you choose the correct connection handle?\n") else: internalblue.logger.info( "HCI_Read_Encryption_Key_Size result for handle 0x%x: %x" % (u16(hcipkt.data[4:6]), hcipkt.data[6])) return # add our command internalblue.registerHciCallback(hciKnobCallback) # enter CLI cli = InternalBlueCLI( Namespace(data_directory=None, verbose=False, trace=None, save=None), internalblue) sys.exit(cli.cmdloop())