void ble_sm_sc_confirm_exec(struct ble_sm_proc *proc, struct ble_sm_result *res) { struct ble_sm_pair_confirm cmd; int rc; rc = ble_sm_sc_gen_ri(proc); if (rc != 0) { res->app_status = rc; res->enc_cb = 1; res->sm_err = BLE_SM_ERR_UNSPECIFIED; return; } rc = ble_sm_alg_f4(ble_sm_sc_pub_key.u8, proc->pub_key_peer.x, ble_sm_our_pair_rand(proc), proc->ri, cmd.value); if (rc != 0) { res->app_status = rc; res->enc_cb = 1; res->sm_err = BLE_SM_ERR_UNSPECIFIED; return; } rc = ble_sm_pair_confirm_tx(proc->conn_handle, &cmd); if (rc != 0) { res->app_status = rc; res->enc_cb = 1; res->sm_err = BLE_SM_ERR_UNSPECIFIED; return; } if (!(proc->flags & BLE_SM_PROC_F_INITIATOR)) { proc->state = BLE_SM_PROC_STATE_RANDOM; } }
void ble_sm_lgcy_confirm_exec(struct ble_sm_proc *proc, struct ble_sm_result *res) { struct ble_sm_pair_confirm cmd; uint8_t preq[BLE_SM_HDR_SZ + BLE_SM_PAIR_CMD_SZ]; uint8_t pres[BLE_SM_HDR_SZ + BLE_SM_PAIR_CMD_SZ]; uint8_t k[16]; uint8_t ia[6]; uint8_t ra[6]; uint8_t iat; uint8_t rat; int rc; rc = ble_sm_lgcy_confirm_prepare_args(proc, k, preq, pres, &iat, &rat, ia, ra); if (rc != 0) { goto err; } rc = ble_sm_alg_c1(k, ble_sm_our_pair_rand(proc), preq, pres, iat, rat, ia, ra, cmd.value); if (rc != 0) { goto err; } rc = ble_sm_pair_confirm_tx(proc->conn_handle, &cmd); if (rc != 0) { goto err; } if (!(proc->flags & BLE_SM_PROC_F_INITIATOR)) { proc->state = BLE_SM_PROC_STATE_RANDOM; } return; err: res->app_status = rc; res->enc_cb = 1; res->sm_err = BLE_SM_ERR_UNSPECIFIED; }