void smpGenerateLtk(smpCcb_t *pCcb) { uint8_t *p; smpScratch_t *pScr = pCcb->pScr; /* generated results are stored in scratch buffer */ p = pScr->keyInd.keyData.ltk.key; /* generate LTK from random number */ SecRand(p, pScr->keyInd.encKeyLen); p += pScr->keyInd.encKeyLen; /* set remaining key bytes to zero */ memset(p, 0, (SMP_KEY_LEN - pScr->keyInd.encKeyLen)); /* use existing random number stored in scratch buf b4 for EDIV and RAND */ BYTES_TO_UINT16(pScr->keyInd.keyData.ltk.ediv, pScr->buf.b4); memcpy(pScr->keyInd.keyData.ltk.rand, &pScr->buf.b4[2], SMP_RAND8_LEN); /* pass key to app via DM */ pScr->keyInd.type = DM_KEY_LOCAL_LTK; pScr->keyInd.secLevel = (pCcb->auth & SMP_AUTH_MITM_FLAG) ? DM_SEC_LEVEL_ENC_AUTH : DM_SEC_LEVEL_ENC; pScr->keyInd.hdr.event = DM_SEC_KEY_IND; DmSmpCbackExec((dmEvt_t *) &pScr->keyInd); }
void smprActProcPairCnfCalc1(smpCcb_t *pCcb, smpMsg_t *pMsg) { smprActProcPairCnf(pCcb, pMsg); /* get random number to scratchpad */ SecRand(pCcb->pScr->buf.b4, SMP_RAND_LEN); /* execute calculation */ smpCalcC1Part1(pCcb, pCcb->pScr->buf.b1, pCcb->pScr->buf.b4); }
void smpActPairCnfCalc1(smpCcb_t *pCcb, smpMsg_t *pMsg) { /* store authentication data */ smpActStorePin(pCcb, pMsg); /* get random number to scratchpad */ SecRand(pCcb->pScr->buf.b4, SMP_RAND_LEN); /* execute calculation */ smpCalcC1Part1(pCcb, pCcb->pScr->buf.b1, pCcb->pScr->buf.b4); }