/******************************************************************************* ** ** Function btm_gen_resolvable_private_addr ** ** Description This function generate a resolvable private address. ** ** Returns void ** *******************************************************************************/ void btm_gen_resolvable_private_addr (void *p_cmd_cplt_cback) { BTM_TRACE_EVENT ("btm_gen_resolvable_private_addr"); /* generate 3B rand as BD LSB, SRK with it, get BD MSB */ if (!btsnd_hcic_ble_rand((void *)p_cmd_cplt_cback)) btm_gen_resolve_paddr_cmpl(NULL); }
/******************************************************************************* ** ** Function smp_generate_confirm ** ** Description This function is called to start the second pairing phase by ** start generating initializer random number. ** ** ** Returns void ** *******************************************************************************/ void smp_generate_confirm (tSMP_CB *p_cb, tSMP_INT_DATA *p_data) { SMP_TRACE_DEBUG0 ("smp_generate_confirm"); p_cb->rand_enc_proc = SMP_GEN_SRAND_MRAND; /* generate MRand or SRand */ if (!btsnd_hcic_ble_rand((void *)smp_rand_back)) smp_rand_back(NULL); }
/******************************************************************************* ** ** Function smp_generate_passkey ** ** Description This function is called to generate passkey. ** ** Returns void ** *******************************************************************************/ void smp_generate_passkey(tSMP_CB *p_cb, tSMP_INT_DATA *p_data) { SMP_TRACE_DEBUG0 ("smp_generate_passkey"); p_cb->rand_enc_proc = SMP_GEN_TK; /* generate MRand or SRand */ if (!btsnd_hcic_ble_rand((void *)smp_rand_back)) smp_rand_back(NULL); }
/******************************************************************************* ** ** Function smp_generate_rand_vector ** ** Description This function is called when LTK is generated, send state machine ** event to SMP. ** ** Returns void ** *******************************************************************************/ static void smp_generate_rand_vector (tSMP_CB *p_cb, tSMP_INT_DATA *p) { /* generate EDIV and rand now */ /* generate random vector */ SMP_TRACE_DEBUG0 ("smp_generate_rand_vector "); p_cb->rand_enc_proc = SMP_GEN_RAND_V; if (!btsnd_hcic_ble_rand((void *)smp_rand_back)) smp_rand_back(NULL); }
/******************************************************************************* ** ** Function smp_genenrate_rand_cont ** ** Description This function is called to generate another 64 bits random for ** MRand or Srand. ** ** Returns void ** *******************************************************************************/ void smp_genenrate_rand_cont(tSMP_CB *p_cb, tSMP_INT_DATA *p_data) { UNUSED(p_data); SMP_TRACE_DEBUG ("smp_genenrate_rand_cont "); p_cb->rand_enc_proc = SMP_GEN_SRAND_MRAND_CONT; /* generate 64 MSB of MRand or SRand */ if (!btsnd_hcic_ble_rand((void *)smp_rand_back)) smp_rand_back(NULL); }
/******************************************************************************* ** ** Function btm_gen_non_resolvable_private_addr ** ** Description This function generate a non-resolvable private address. ** ** ** Returns void ** *******************************************************************************/ void btm_gen_non_resolvable_private_addr (tBTM_BLE_ADDR_CBACK *p_cback, void *p) { tBTM_LE_RANDOM_CB *p_mgnt_cb = &btm_cb.ble_ctr_cb.addr_mgnt_cb; BTM_TRACE_EVENT ("btm_gen_non_resolvable_private_addr"); if (p_mgnt_cb->p_generate_cback != NULL) return; p_mgnt_cb->p_generate_cback = p_cback; p_mgnt_cb->p = p; if (!btsnd_hcic_ble_rand((void *)btm_gen_non_resolve_paddr_cmpl)) { btm_gen_non_resolve_paddr_cmpl(NULL); } }
/******************************************************************************* ** ** Function smp_generate_csrk ** ** Description This function is called to calculate LTK, starting with DIV ** generation. ** ** ** Returns void ** *******************************************************************************/ void smp_generate_csrk(tSMP_CB *p_cb, tSMP_INT_DATA *p_data) { BOOLEAN div_status; SMP_TRACE_DEBUG0 ("smp_generate_csrk"); div_status = btm_get_local_div(p_cb->pairing_bda, &p_cb->div); if (div_status) { smp_compute_csrk(p_cb, NULL); } else { SMP_TRACE_DEBUG0 ("Generate DIV for CSRK"); p_cb->rand_enc_proc = SMP_GEN_DIV_CSRK; if (!btsnd_hcic_ble_rand((void *)smp_rand_back)) smp_rand_back(NULL); } }
/******************************************************************************* ** ** Function smp_generate_ltk ** ** Description This function is called to calculate LTK, starting with DIV ** generation. ** ** ** Returns void ** *******************************************************************************/ void smp_generate_ltk(tSMP_CB *p_cb, tSMP_INT_DATA *p_data) { BOOLEAN div_status; SMP_TRACE_DEBUG0 ("smp_generate_ltk "); div_status = btm_get_local_div(p_cb->pairing_bda, &p_cb->div); if (div_status) { smp_genenrate_ltk_cont(p_cb, NULL); } else { SMP_TRACE_DEBUG0 ("Generate DIV for LTK"); p_cb->rand_enc_proc = SMP_GEN_DIV_LTK; /* generate MRand or SRand */ if (!btsnd_hcic_ble_rand((void *)smp_rand_back)) smp_rand_back(NULL); } }