static void att_signed_write_handle_cmac_result(uint8_t hash[8]){ if (att_server_state != ATT_SERVER_W4_SIGNED_WRITE_VALIDATION) return; if (memcmp(hash, &att_request_buffer[att_request_size-8], 8)){ log_info("ATT Signed Write, invalid signature"); att_server_state = ATT_SERVER_IDLE; return; } // update sequence number uint32_t counter_packet = READ_BT_32(att_request_buffer, att_request_size-12); le_device_db_remote_counter_set(att_ir_le_device_db_index, counter_packet+1); att_server_state = ATT_SERVER_REQUEST_RECEIVED_AND_VALIDATED; att_run(); }
static void att_signed_write_handle_cmac_result(uint8_t hash[8]){ att_server_t * att_server = att_server_for_state(ATT_SERVER_W4_SIGNED_WRITE_VALIDATION); if (!att_server) return; uint8_t hash_flipped[8]; reverse_64(hash, hash_flipped); if (memcmp(hash_flipped, &att_server->request_buffer[att_server->request_size-8], 8)){ log_info("ATT Signed Write, invalid signature"); att_server->state = ATT_SERVER_IDLE; return; } log_info("ATT Signed Write, valid signature"); // update sequence number uint32_t counter_packet = little_endian_read_32(att_server->request_buffer, att_server->request_size-12); le_device_db_remote_counter_set(att_server->ir_le_device_db_index, counter_packet+1); att_server->state = ATT_SERVER_REQUEST_RECEIVED_AND_VALIDATED; att_dispatch_server_request_can_send_now_event(att_server->connection.con_handle); }