/******************************************************************************* ** ** 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 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); } }