This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

problem to adding AES encription to secure DFU SDK15.0

Hi!

nRF52832, SDK15, SD6.0.0, S132

I try to use secure_bootloader from SDK15 examples. All works.

Now I need encrypt my firmware with AES. I already made it on a SDK13- works fine. 

Now after encrypt .bin file in the dfu.zip package, I try to decrypt it in the bootloader project. For that I in a file 

nrf_dfu_req_handler.c in a on_data_obj_write_request() function insert my decode function:

static void on_data_obj_write_request(nrf_dfu_request_t * p_req, nrf_dfu_response_t * p_res)
{
    NRF_LOG_DEBUG("Handle NRF_DFU_OP_OBJECT_WRITE (data)");

    if (!nrf_dfu_validation_init_cmd_present())
    {
        /* Can't accept data because DFU isn't initialized by init command. */
        p_res->result = NRF_DFU_RES_CODE_OPERATION_NOT_PERMITTED;
        return;
    }

    uint32_t const data_object_offset = s_dfu_settings.progress.firmware_image_offset -
                                        s_dfu_settings.progress.firmware_image_offset_last;

    if ((p_req->write.len + data_object_offset) > s_dfu_settings.progress.data_object_size)
    {
        /* Can't accept data because too much data has been received. */
        NRF_LOG_ERROR("Write request too long");
        p_res->result = NRF_DFU_RES_CODE_INVALID_PARAMETER;
        return;
    }

    uint32_t const write_addr = m_firmware_start_addr + s_dfu_settings.write_offset;

    ASSERT(p_req->callback.write);
    
                // az
                for (int i = 0; i < p_req->write.len; i+=16)
                {
                    AES128_ECB_decrypt (p_req->write.p_data + i, key, p_req->write.p_data + i); 
                }
                
    ret_code_t ret =
        nrf_dfu_flash_store(write_addr, p_req->write.p_data, p_req->write.len, p_req->callback.write);

    if (ret != NRF_SUCCESS)
    {
        /* When nrf_dfu_flash_store() fails because there is no space in the queue,
         * stop processing the request so that the peer can detect a CRC error
         * and retransmit this object. Remember to manually free the buffer !
         */
        p_req->callback.write((void*)p_req->write.p_data);
        return;
    }

    /* Update the CRC of the firmware image. */
    s_dfu_settings.write_offset                   += p_req->write.len;
    s_dfu_settings.progress.firmware_image_offset += p_req->write.len;
    s_dfu_settings.progress.firmware_image_crc     =
        crc32_compute(p_req->write.p_data, p_req->write.len, &s_dfu_settings.progress.firmware_image_crc);

    /* This is only used when the PRN is triggered and the 'write' message
     * is answered with a CRC message and these field are copied into the response.
     */
    p_res->write.crc    = s_dfu_settings.progress.firmware_image_crc;
    p_res->write.offset = s_dfu_settings.progress.firmware_image_offset;
}

AES128_ECB_decrypt().....

One more- this function works fine with same syntax on the SDK13.

But in the SDK13 after that I write another CRC and it works.

Now on SDK15 when I try to update via smartphone, I see error on the smartphone - ERROC CRC.

Also I have RTT log of it:

 0> <debug> nrf_dfu_req_handler:  
 0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_CRC_GET (data)
 0> <debug> nrf_dfu_req_handler: Offset:2928, CRC:0xA907DD27
 0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
 0> <debug> app: Shutting down transports (found: 1)
 0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_CREATE (data)
 0> <debug> nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x00039000, len=1 pages), queue usage: 0
 0> <debug> nrf_dfu_req_handler: Creating object with size: 4096. Offset: 0x00000000, CRC: 0x00000000
 0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
 0> <debug> nrf_dfu_ble: Buffer 0x20005EB8 acquired, len 244 (244)
 0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
 0> <debug> nrf_dfu_flash: Flash erase success: addr=0x00039000, pending 0
 0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00039000, src=0x20005EB8, len=244 bytes), queue usage: 0
 0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
 0> <debug> nrf_dfu_flash: Flash write success: addr=0x00039000, pending 0
 0> <debug> nrf_dfu_ble: Freeing buffer 0x20005EB8
 0> <debug> nrf_dfu_ble: Buffer 0x20005EB8 acquired, len 244 (244)
 0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
 0> <debug> nrf_dfu_ble: Buffer 0x20005FAC acquired, len 244 (244)
 0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000390F4, src=0x20005EB8, len=244 bytes), queue usage: 0
 0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
 0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
 0> <debug> nrf_dfu_ble: Buffer 0x20006194 acquired, len 244 (244)
 0> <debug> nrf_dfu_flash: Flash write success: addr=0x000390F4, pending 0
 0> <debug> nrf_dfu_ble: Freeing buffer 0x20005EB8
 0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000391E8, src=0x20005FAC, len=244 bytes), queue usage: 0
 0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
 0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
 0> <debug> nrf_dfu_ble: Buffer 0x20005EB8 acquired, len 244 (244)
 0> <debug> nrf_dfu_flash: Flash write success: addr=0x000391E8, pending 0
 0> <debug> nrf_dfu_ble: Freeing buffer 0x20005FAC
 0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000392DC, src=0x20006194, len=244 bytes), queue usage: 0
 0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
 0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
 0> <debug> nrf_dfu_ble: Buffer 0x20005FAC acquired, len 244 (244)
 0> <debug> nrf_dfu_ble: Buffer 0x20006288 acquired, len 244 (244)
 0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000393D0, src=0x20005EB8, len=244 bytes), queue usage: 1
 0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
 0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
 0> <debug> nrf_dfu_flash: Flash write success: addr=0x000392DC, pending 1
 0> <debug> nrf_dfu_ble: Freeing buffer 0x20006194
 0> <debug> nrf_dfu_ble: Buffer 0x20006194 acquired, len 244 (244)
 0> <debug> nrf_dfu_flash: Flash write success: addr=0x000393D0, pending 0
 0> <debug> nrf_dfu_ble: Freeing buffer 0x20005EB8
 0> <debug> nrf_dfu_ble: Buffer 0x20005EB8 acquired, len 244 (244)
 0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000394C4, src=0x20005FAC, len=244 bytes), queue usage: 0
 0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
 0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
 0> <debug> nrf_dfu_flash: Flash write success: addr=0x000394C4, pending 0
 0> <debug> nrf_dfu_ble: Freeing buffer 0x20005FAC
 0> <debug> nrf_dfu_ble: Buffer 0x20005FAC acquired, len 244 (244)
 0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000395B8, src=0x20006288, len=244 bytes), queue usage: 0
 0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
 0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
 0> <debug> nrf_dfu_ble: Buffer 0x200060A0 acquired, len 244 (244)
 0> <debug> nrf_dfu_flash: Flash write success: addr=0x000395B8, pending 0
 0> <debug> nrf_dfu_ble: Freeing buffer 0x20006288
 0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000396AC, src=0x20006194, len=244 bytes), queue usage: 0
 0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
 0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
 0> <debug> nrf_dfu_ble: Buffer 0x20006288 acquired, len 244 (244)
 0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000397A0, src=0x20005EB8, len=244 bytes), queue usage: 1
 0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
 0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
 0> <debug> nrf_dfu_flash: Flash write success: addr=0x000396AC, pending 1
 0> <debug> nrf_dfu_ble: Freeing buffer 0x20006194
 0> <debug> nrf_dfu_flash: Flash write success: addr=0x000397A0, pending 0
 0> <debug> nrf_dfu_ble: Freeing buffer 0x20005EB8
 0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00039894, src=0x20005FAC, len=244 bytes), queue usage: 0
 0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
 0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
 0> <debug> nrf_dfu_flash: Flash write success: addr=0x00039894, pending 0
 0> <debug> nrf_dfu_ble: Freeing buffer 0x20005FAC
 0> x200060A0, len=244 bytes), queue usage: 0
 0> a)
 0> <debug> nrf_dfu_ble: Advertising...
 0> <info> nrf_bootloader_wdt: Internal feed

In wich place of bootloader should I clear or replace CRC ? I just want to reject this verification from bootloader.  

  • I am trying to have a quick comparison between the wo_enc.log and the log you just sent, and I can see right at the first write command , the CRC already different (0x65491F3A vs 0xE5314F14) could you step in to the code and check why ? 
    I assume the wo_enc.log  and the log you just sent using the same encrypted firmware and the crc calculated on the undecrypted data, so they should be the same. 

  • I try again load with same program encrypted. But in the bootloader I use AES encryption and do not use it.

    below two logs.

    with AES:

    # SEGGER J-Link RTT Viewer V5.12f Terminal Log File
    # Compiled: 16:04:47 on May 17 2016
    # Logging started @ 19 Dec 2018 15:41:44
     0> <info> app: Inside main boot
     0> <debug> app: In nrf_bootloader_init
     0> <debug> nrf_dfu_settings: Calling nrf_dfu_settings_init()...
     0> <debug> nrf_dfu_flash: Initializing nrf_fstorage_nvmc backend.
     0> <debug> app: Enter nrf_bootloader_fw_activate
     0> <info> app: No firmware to activate.
     0> <debug> app: Enter nrf_dfu_app_is_valid
     0> <debug> app:  az nrf_dfu_app_is_valid CRC = 0xBABF7A96
     0> <debug> app: Return true. App was valid
     0> <debug> app: DFU mode requested via GPREGRET.
     0> <info> nrf_bootloader_wdt: WDT enabled CRV:2048 ms
     0> <info> nrf_bootloader_wdt: Starting a timer (1536 ms) for feeding watchdog.
     0> <info> app_timer: RTC: initialized.
     0> <debug> app: in weak nrf_dfu_init_user
     0> <info> app: Entering DFU mode.
     0> <debug> app: Initializing transports (found: 1)
     0> <debug> nrf_dfu_ble: Initializing BLE DFU transport
     0> <debug> nrf_dfu_ble: Setting up vector table: 0x0006D000
     0> <debug> nrf_dfu_ble: Enabling SoftDevice.
     0> <debug> nrf_dfu_ble: Configuring BLE stack.
     0> <debug> nrf_dfu_ble: Enabling the BLE stack.
     0> <debug> nrf_dfu_settings_svci:  az nrf_dfu_settings_adv_name_is_valid CRC = 0xDCDD16C2
     0> <debug> nrf_dfu_ble: No advertising name found
     0> <debug> nrf_dfu_ble: Using default advertising name
     0> <debug> nrf_dfu_ble: Advertising...
     0> <debug> nrf_dfu_ble: BLE DFU transport initialized.
     0> <debug> nrf_dfu_flash: Initializing nrf_fstorage_sd backend.
     0> <debug> app: Enter main loop
     0> <info> nrf_bootloader_wdt: Internal feed
     0> <info> nrf_bootloader_wdt: Internal feed
     0> <info> nrf_bootloader_wdt: Internal feed
     0> <info> nrf_bootloader_wdt: Internal feed
     0> <info> nrf_bootloader_wdt: Internal feed
     0> <debug> nrf_dfu_ble: Connected
     0> <info> nrf_bootloader_wdt: Internal feed
     0> <debug> nrf_dfu_ble: Received BLE_GAP_EVT_CONN_PARAM_UPDATE
     0> <debug> nrf_dfu_ble: max_conn_interval: 12
     0> <debug> nrf_dfu_ble: min_conn_interval: 12
     0> <debug> nrf_dfu_ble: slave_latency: 0
     0> <debug> nrf_dfu_ble: conn_sup_timeout: 600
     0> <debug> nrf_dfu_ble: Received BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST (request: 517, reply: 247).
     0> <info> nrf_bootloader_wdt: Internal feed
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_SELECT (command)
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_ble: Set receipt notif
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_RECEIPT_NOTIF_SET
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> app: Shutting down transports (found: 1)
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_CREATE (command)
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_ble: Buffer 0x20005EB8 acquired, len 135 (244)
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (command)
     0> <debug> nrf_dfu_validation:  az nrf_dfu_validation_init_cmd_append CRC = 0xF4373F59
     0> <debug> nrf_dfu_ble: Freeing buffer 0x20005EB8
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_CRC_GET (command)
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_EXECUTE (command)
     0> <debug> nrf_dfu_validation: PB: Init packet data len: 58
     0> <info> nrf_dfu_validation: Signature required. Checking signature.
     0> <info> nrf_dfu_validation: Calculating init packet hash (init packet len: 58)
     0> <info> nrf_dfu_validation: Verify signature
     0> <info> nrf_dfu_validation: Image verified
     0> <debug> app: Enter nrf_dfu_cache_prepare()
     0> <debug> app: required_size: 0x127A0.
     0> <debug> app: single_bank: false.
     0> <debug> app: keep_app: false.
     0> <debug> app: keep_softdevice: true.
     0> <debug> app: SD_PRESENT: true.
     0> <debug> app: Bank contents:
     0> <debug> app: Bank 0 code: 0x01: Size: 0x127A0
     0> <debug> app: Bank 1 code: 0x00: Size: 0x0
     0> <debug> app: pass: 0.
     0> <debug> app: cache_address: 0x39000.
     0> <debug> app: cache_too_small: false.
     0> <debug> app: keep_firmware: false.
     0> <debug> app: delete_more: false.
     0> <debug> nrf_dfu_validation: Write address set to 0x00039000
     0> <debug> nrf_dfu_settings: Writing settings...
     0> <debug> nrf_dfu_settings: Erasing old settings at: 0x0007F000
     0> <debug> nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x0007F000, len=1 pages), queue usage: 0
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x0007F000, src=0x20006EEC, len=440 bytes), queue usage: 1
     0> <debug> nrf_dfu_req_handler: Writing valid init command to flash.
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_ble: Set receipt notif
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_RECEIPT_NOTIF_SET
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_SELECT (data)
     0> <debug> nrf_dfu_req_handler: crc = 0x0, offset = 0x0, max_size = 0x1000
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> app: Shutting down transports (found: 1)
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_CREATE (data)
     0> <debug> nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x00039000, len=1 pages), queue usage: 2
     0> <debug> nrf_dfu_req_handler: Creating object with size: 4096. Offset: 0x00000000, CRC: 0x00000000
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_flash: Flash erase success: addr=0x0007F000, pending 2
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x0007F000, pending 1
     0> <debug> nrf_dfu_ble: Buffer 0x20005EB8 acquired, len 244 (244)
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_flash: Flash erase success: addr=0x00039000, pending 0
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00039000, src=0x20005EB8, len=244 bytes), queue usage: 0
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0xA5BE0D95
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x00039000, pending 0
     0> <debug> nrf_dfu_ble: Freeing buffer 0x20005EB8
     0> <debug> nrf_dfu_ble: Buffer 0x20005EB8 acquired, len 244 (244)
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_ble: Buffer 0x20005FAC acquired, len 244 (244)
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000390F4, src=0x20005EB8, len=244 bytes), queue usage: 0
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0x65491F3A
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_ble: Buffer 0x200060A0 acquired, len 244 (244)
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x000390F4, pending 0
     0> <debug> nrf_dfu_ble: Freeing buffer 0x20005EB8
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000391E8, src=0x20005FAC, len=244 bytes), queue usage: 0
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0xC4BE9D31
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_ble: Buffer 0x20005EB8 acquired, len 244 (244)
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x000391E8, pending 0
     0> <debug> nrf_dfu_ble: Freeing buffer 0x20005FAC
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000392DC, src=0x200060A0, len=244 bytes), queue usage: 0
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0x0CF69D7F
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_ble: Buffer 0x20005FAC acquired, len 244 (244)
     0> <debug> nrf_dfu_ble: Buffer 0x20006194 acquired, len 244 (244)
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000393D0, src=0x20005EB8, len=244 bytes), queue usage: 1
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0xB72758F2
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x000392DC, pending 1
     0> <debug> nrf_dfu_ble: Freeing buffer 0x200060A0
     0> <debug> nrf_dfu_ble: Buffer 0x200060A0 acquired, len 244 (244)
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x000393D0, pending 0
     0> <debug> nrf_dfu_ble: Freeing buffer 0x20005EB8
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000394C4, src=0x20005FAC, len=244 bytes), queue usage: 0
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0xB4252CDC
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_ble: Buffer 0x20005EB8 acquired, len 244 (244)
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x000394C4, pending 0
     0> <debug> nrf_dfu_ble: Freeing buffer 0x20005FAC
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000395B8, src=0x20006194, len=244 bytes), queue usage: 0
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0x48AAA79E
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_ble: Buffer 0x20005FAC acquired, len 244 (244)
     0> <debug> nrf_dfu_ble: Buffer 0x20006288 acquired, len 244 (244)
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000396AC, src=0x200060A0, len=244 bytes), queue usage: 1
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0xF4472206
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x000395B8, pending 1
     0> <debug> nrf_dfu_ble: Freeing buffer 0x20006194
     0> <debug> nrf_dfu_ble: Buffer 0x20006194 acquired, len 244 (244)
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x000396AC, pending 0
     0> <debug> nrf_dfu_ble: Freeing buffer 0x200060A0
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000397A0, src=0x20005EB8, len=244 bytes), queue usage: 0
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0x0C7C01CA
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x000397A0, pending 0
     0> <debug> nrf_dfu_ble: Freeing buffer 0x20005EB8
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00039894, src=0x20005FAC, len=244 bytes), queue usage: 0
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0x25AA53E0
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00039988, src=0x20006288, len=244 bytes), queue usage: 1
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0xEFB600EF
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x00039894, pending 1
     0> <debug> nrf_dfu_ble: Freeing buffer 0x20005FAC
     0> ding 0
     0> x20006194, len=244 bytes), queue usage: 0
     0> <debug> app: Shutting down transports (found: 1)
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_CREATE (data)
     0> <debug> nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x00039000, len=1 pages), queue usage: 0
     0> <debug> nrf_dfu_req_handler: Creating object with size: 4096. Offset: 0x00000000, CRC: 0x00000000
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_ble: Buffer 0x20006194 acquired, len 244 (244)
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_flash: Flash erase success: addr=0x00039000, pending 0
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00039000, src=0x20006194, len=244 bytes), queue usage: 0
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0xA5BE0D95
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x00039000, pending 0
     0> <debug> nrf_dfu_ble: Freeing buffer 0x20006194
     0> <debug> nrf_dfu_ble: Buffer 0x20006194 acquired, len 244 (244)
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_ble: Buffer 0x20006288 acquired, len 244 (244)
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000390F4, src=0x20006194, len=244 bytes), queue usage: 0
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0x65491F3A
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_ble: Buffer 0x20005FAC acquired, len 244 (244)
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x000390F4, pending 0
     0> <debug> nrf_dfu_ble: Freeing buffer 0x20006194
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000391E8, src=0x20006288, len=244 bytes), queue usage: 0
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0xC4BE9D31
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_ble: Buffer 0x20006194 acquired, len 244 (244)
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x000391E8, pending 0
     0> <debug> nrf_dfu_ble: Freeing buffer 0x20006288
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000392DC, src=0x20005FAC, len=244 bytes), queue usage: 0
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0xF7089A24
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_ble: Buffer 0x20006288 acquired, len 244 (244)
     0> <debug> nrf_dfu_ble: Buffer 0x20005EB8 acquired, len 244 (244)
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000393D0, src=0x20006194, len=244 bytes), queue usage: 1
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0xA34F46F9
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x000392DC, pending 1
     0> <debug> nrf_dfu_ble: Freeing buffer 0x20005FAC
     0> <debug> nrf_dfu_ble: Buffer 0x20005FAC acquired, len 244 (244)
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x000393D0, pending 0
     0> <debug> nrf_dfu_ble: Freeing buffer 0x20006194
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000394C4, src=0x20006288, len=244 bytes), queue usage: 0
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0x840F2BD8
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_ble: Buffer 0x20006194 acquired, len 244 (244)
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x000394C4, pending 0
     0> <debug> nrf_dfu_ble: Freeing buffer 0x20006288
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000395B8, src=0x20005EB8, len=244 bytes), queue usage: 0
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0x5DD7553A
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_ble: Buffer 0x20006288 acquired, len 244 (244)
     0> <debug> nrf_dfu_ble: Buffer 0x200060A0 acquired, len 244 (244)
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000396AC, src=0x20005FAC, len=244 bytes), queue usage: 1
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0x1B9FF228
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x000395B8, pending 1
     0> <debug> nrf_dfu_ble: Freeing buffer 0x20005EB8
     0> <debug> nrf_dfu_ble: Buffer 0x20005EB8 acquired, len 244 (244)
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x000396AC, pending 0
     0> <debug> nrf_dfu_ble: Freeing buffer 0x20005FAC
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000397A0, src=0x20006194, len=244 bytes), queue usage: 0
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0x68648EC4
     0> 0x1
     0> a)
     0> ding 0
     0>  0x21AB07DC
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00039988, src=0x200060A0, len=244 bytes), queue usage: 1
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0xB63BD9E1
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x00039894, pending 1
     0> <debug> nrf_dfu_ble: Freeing buffer 0x20006288
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x00039988, pending 0
     0> <debug> nrf_dfu_ble: Freeing buffer 0x200060A0
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00039A7C, src=0x20005EB8, len=244 bytes), queue usage: 0
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0x7D61F8B4
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x00039A7C, pending 0
     0> <debug> nrf_dfu_ble: Freeing buffer 0x20005EB8
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_CRC_GET (data)
     0> <debug> nrf_dfu_req_handler: Offset:2928, CRC:0x7D61F8B4
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> app: Shutting down transports (found: 1)
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_CREATE (data)
     0> <debug> nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x00039000, len=1 pages), queue usage: 0
     0> <debug> nrf_dfu_req_handler: Creating object with size: 4096. Offset: 0x00000000, CRC: 0x00000000
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_flash: Flash erase success: addr=0x00039000, pending 0
     0> <debug> nrf_dfu_ble: Buffer 0x20005EB8 acquired, len 244 (244)
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_ble: Buffer 0x200060A0 acquired, len 244 (244)
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x00039000, src=0x20005EB8, len=244 bytes), queue usage: 0
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0xA5BE0D95
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_ble: Buffer 0x20006288 acquired, len 244 (244)
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x00039000, pending 0
     0> <debug> nrf_dfu_ble: Freeing buffer 0x20005EB8
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000390F4, src=0x200060A0, len=244 bytes), queue usage: 0
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0x65491F3A
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_ble: Buffer 0x20005EB8 acquired, len 244 (244)
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x000390F4, pending 0
     0> <debug> nrf_dfu_ble: Freeing buffer 0x200060A0
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000391E8, src=0x20006288, len=244 bytes), queue usage: 0
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0xB42E4DC3
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_ble: Buffer 0x200060A0 acquired, len 244 (244)
     0> <debug> nrf_dfu_ble: Buffer 0x20006194 acquired, len 244 (244)
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000392DC, src=0x20005EB8, len=244 bytes), queue usage: 1
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0x9C65D3A5
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x000391E8, pending 1
     0> <debug> nrf_dfu_ble: Freeing buffer 0x20006288
     0> <debug> nrf_dfu_ble: Buffer 0x20006288 acquired, len 244 (244)
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x000392DC, pending 0
     0> <debug> nrf_dfu_ble: Freeing buffer 0x20005EB8
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000393D0, src=0x200060A0, len=244 bytes), queue usage: 0
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0xA314E743
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_ble: Buffer 0x20005EB8 acquired, len 244 (244)
     0> <debug> nrf_dfu_ble: Buffer 0x20005FAC acquired, len 244 (244)
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x000393D0, pending 0
     0> <debug> nrf_dfu_ble: Freeing buffer 0x200060A0
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000394C4, src=0x20006194, len=244 bytes), queue usage: 0
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0x67D5C033
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_ble: Buffer 0x200060A0 acquired, len 244 (244)
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000395B8, src=0x20006288, len=244 bytes), queue usage: 1
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC = 0xD7CDEE64
     0> <debug> nrf_dfu_req_handler: Request handling complete. Result: 0x1
     0> <debug> nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x000394C4, pending 1
     0> <debug> nrf_dfu_ble: Freeing buffer 0x20006194
     0> <debug> nrf_dfu_ble: Buffer 0x20006194 acquired, len 244 (244)
     0> <debug> nrf_dfu_flash: Flash write success: addr=0x000395B8, pending 0
     0> <debug> nrf_dfu_ble: Freeing buffer 0x20006288
     0> <debug> nrf_dfu_ble: Buffer 0x20006288 acquired, len 244 (244)
     0> <debug> nrf_dfu_flash: nrf_fstorage_write(addr=0x000396AC, src=0x20005EB8, len=244 bytes), queue usage: 0
     0> <debug> nrf_dfu_req_handler:  az on_data_obj_write_request CRC =<debug> nrf_dfu_ble: Advertising...
     0> <info> nrf_bootloader_wdt: Internal feed
     0> <info> nrf_bootloader_wdt: Internal feed
     0> <info> nrf_bootloader_wdt: Internal feed
     0> <info> nrf_bootloader_wdt: Internal feed
    

    WO AES:

    wo_aes.log

    I see that first two 

    az on_data_obj_write_request CRC = 0xA5BE0D95

    az on_data_obj_write_request CRC = 0x65491F3A

    are same

    third CRC is different. Why?

    I just take CRC from air and log it. After that I call AES enc function and write in to flash.

     

  • It's pretty strange. Could you print out more info before the CRC calculation (like previous CRC, some data on the write packet )? You can think of adding a counter and set a breakpoint when it count to 3 and step into the code to see why it's different CRCs ? If it's the same data and same previous CRC, the result CRC should be the same.

    I think we are getting close to the root cause of the issue. 

  • Ok, I'll check it. But your say that replace in that part of code CRC -absolutly normal? Or you have any another idea where it does to do best?

  • I can't resume this situation. I see that first CRC in both cases are CRC = 0xA5BE0D95, the second CRC are different.

    We should try to understad why 

    for (int i = 0; i < p_req->write.len; i+=16)
    {
        AES128_ECB_decrypt (p_req->write.p_data + i, key, p_req->write.p_data + i);
    }

    this code leads to different CRC. I cant understand it.

Related