static bool verify_random(const uint8_t rnd[16]) { struct test_data *data = tester_get_data(); uint8_t confirm[16]; if (!bt_crypto_c1(data->crypto, data->tk, data->rrnd, data->prsp, data->preq, data->ia_type, data->ia, data->ra_type, data->ra, confirm)) return false; if (memcmp(data->pcnf, confirm, sizeof(data->pcnf) != 0)) { tester_warn("Confirmation values don't match"); return false; } if (data->out) { struct bthost *bthost = hciemu_client_get_host(data->hciemu); bt_crypto_s1(data->crypto, data->tk, data->rrnd, data->prnd, data->ltk); bthost_le_start_encrypt(bthost, data->handle, data->ltk); } else { bt_crypto_s1(data->crypto, data->tk, data->prnd, data->rrnd, data->ltk); } return true; }
static bool verify_random(struct smp_conn *conn, const uint8_t rnd[16]) { uint8_t confirm[16]; if (!bt_crypto_c1(conn->smp->crypto, conn->tk, conn->rrnd, conn->prsp, conn->preq, conn->ia_type, conn->ia, conn->ra_type, conn->ra, confirm)) return false; if (memcmp(conn->pcnf, confirm, sizeof(conn->pcnf) != 0)) { printf("Confirmation values don't match\n"); return false; } if (conn->out) { bt_crypto_s1(conn->smp->crypto, conn->tk, conn->rrnd, conn->prnd, conn->ltk); bthost_le_start_encrypt(conn->smp->bthost, conn->handle, conn->ltk); } else { bt_crypto_s1(conn->smp->crypto, conn->tk, conn->prnd, conn->rrnd, conn->ltk); } return true; }