def test_sign_and_verify(self): key_file_name = 'key.pem' signing = Signing() signing.load_key(key_file_name) init_packet_fields = { PacketField.DEVICE_TYPE: 0xFFFF, PacketField.DEVICE_REVISION: 0xFFFF, PacketField.APP_VERSION: 0xFFFFFFFF, PacketField.REQUIRED_SOFTDEVICES_ARRAY: [0xFFFE], PacketField.NORDIC_PROPRIETARY_OPT_DATA_EXT_PACKET_ID: 2, PacketField.NORDIC_PROPRIETARY_OPT_DATA_FIRMWARE_LENGTH: 1234, PacketField.NORDIC_PROPRIETARY_OPT_DATA_FIRMWARE_HASH: '\xc9\xd3\xbfi\xf2\x1e\x88\xa01\x1e\r\xd2BSa\x12\xf8BW\x9b\xef&Z$\xbd\x02U\xfdD?u\x9e', } init_packet = Packet(init_packet_fields) init_packet_data = init_packet.generate_packet() signature = signing.sign(init_packet_data) self.assertTrue(signing.verify(init_packet_data, signature)) init_packet_fields[PacketField.NORDIC_PROPRIETARY_OPT_DATA_INIT_PACKET_ECDS] = signature init_packet = Packet(init_packet_fields) init_packet_data = init_packet.generate_packet() self.assertFalse(signing.verify(init_packet_data, signature))
def test_dfu_methods(self): def timeout_callback(log_message): logging.debug("timeout_callback. Message: %s", log_message) def progress_callback(progress, log_message, done): logging.debug("Log message: %s, Progress: %d, done: %s", log_message, progress, done) def error_callback(log_message=""): logging.error("Log message: %s", log_message) self.transport.register_events_callback(DfuEvent.TIMEOUT_EVENT, timeout_callback) self.transport.register_events_callback(DfuEvent.PROGRESS_EVENT, progress_callback) self.transport.register_events_callback(DfuEvent.ERROR_EVENT, error_callback()) firmware = '' test_firmware_path = os.path.join("firmwares", "pca10028_nrf51422_xxac_blinky.bin") with open(test_firmware_path, 'rb') as f: while True: data = f.read() if data: firmware += data else: break crc = crc16.calc_crc16(firmware, 0xffff) self.transport.open() # Sending start DFU command to target self.transport.send_start_dfu(HexType.APPLICATION, app_size=len(firmware), softdevice_size=0, bootloader_size=0) # Sending DFU init packet to target init_packet_vars = { PacketField.DEVICE_TYPE: 1, PacketField.DEVICE_REVISION: 2, PacketField.APP_VERSION: 0xfffa, PacketField.REQUIRED_SOFTDEVICES_ARRAY: [0x005a], PacketField.NORDIC_PROPRIETARY_OPT_DATA_FIRMWARE_CRC16: crc } pkt = Packet(init_packet_vars) self.transport.send_init_packet(pkt.generate_packet()) # Sending firmware to target self.transport.send_firmware(firmware) # Validating firmware self.transport.send_validate_firmware() self.transport.send_activate_firmware() self.transport.close()