phStatus_t phKeyStore_Rd710_SetKeyAtPos( phKeyStore_Rd710_DataParams_t * pDataParams, uint16_t wKeyNo, uint16_t wPos, uint16_t wKeyType, uint8_t * pNewKey, uint16_t wNewKeyVersion ) { uint16_t PH_MEMLOC_REM wKeyLength; /* Retrieve KeyLength */ wKeyLength = phKeyStore_GetKeySize(wKeyType); if (!wKeyLength) { return PH_ADD_COMPCODE(PH_ERR_INVALID_PARAMETER, PH_COMP_KEYSTORE); } return phhalHw_Rd710_Cmd_KS_SetKey( pDataParams->pHalDataParams, wKeyType, wKeyNo, wPos, wNewKeyVersion, wKeyLength, pNewKey); }
phStatus_t phKeyStore_Sw_GetKey( phKeyStore_Sw_DataParams_t * pDataParams, uint16_t wKeyNo, uint16_t wKeyVersion, uint8_t bKeyBufSize, uint8_t * pKey, uint16_t * pKeyType ) { phStatus_t statusTmp; uint16_t wKeySize; phKeyStore_Sw_KeyVersionPair_t * pKeyVersion; PH_CHECK_SUCCESS_FCT(statusTmp, phKeyStore_Sw_GetKeyValuePtrVersion(pDataParams,wKeyNo,wKeyVersion,&pKeyVersion)); /* Check for Counter overflow */ PH_CHECK_SUCCESS_FCT(statusTmp, phKeyStore_Sw_CheckUpdateKUC(pDataParams,pDataParams->pKeyEntries[wKeyNo].wRefNoKUC)); /* check buffer size */ wKeySize = phKeyStore_GetKeySize(pDataParams->pKeyEntries[wKeyNo].wKeyType); if (bKeyBufSize < wKeySize) { return PH_ADD_COMPCODE(PH_ERR_BUFFER_OVERFLOW, PH_COMP_KEYSTORE); } /* copy the key */ memcpy(pKey, pKeyVersion->pKey, wKeySize); /* PRQA S 3200 */ *pKeyType = pDataParams->pKeyEntries[wKeyNo].wKeyType; return PH_ADD_COMPCODE(PH_ERR_SUCCESS, PH_COMP_KEYSTORE); }
phStatus_t phKeyStore_Sw_SetKeyAtPos( phKeyStore_Sw_DataParams_t * pDataParams, uint16_t wKeyNo, uint16_t wPos, uint16_t wKeyType, uint8_t * pNewKey, uint16_t wNewKeyVersion ) { phStatus_t statusTmp; phKeyStore_Sw_KeyVersionPair_t * pKeyVersion; PH_CHECK_SUCCESS_FCT(statusTmp, phKeyStore_Sw_GetKeyValuePtrPos(pDataParams,wKeyNo,wPos,&pKeyVersion)); /* Check that Key type matches with current Key Type format */ if (pDataParams->pKeyEntries[wKeyNo].wKeyType != wKeyType) { return PH_ADD_COMPCODE(PH_ERR_INVALID_PARAMETER, PH_COMP_KEYSTORE); } /* copy the key and version */ memcpy(pKeyVersion->pKey, pNewKey, phKeyStore_GetKeySize(wKeyType)); /* PRQA S 3200 */ pKeyVersion->wVersion = wNewKeyVersion; return PH_ADD_COMPCODE(PH_ERR_SUCCESS, PH_COMP_KEYSTORE); }
phStatus_t phKeyStore_Sw_SetFullKeyEntry( phKeyStore_Sw_DataParams_t * pDataParams, uint16_t wNoOfKeys, uint16_t wKeyNo, uint16_t wNewRefNoKUC, uint16_t wNewKeyType, uint8_t * pNewKeys, uint16_t * pNewKeyVersionList ) { phStatus_t statusTmp; uint8_t i; uint8_t bKeyLength; phKeyStore_Sw_KeyVersionPair_t * pKeyVersion; /* Overflow checks */ if (wKeyNo >= pDataParams->wNoOfKeyEntries) { return PH_ADD_COMPCODE(PH_ERR_INVALID_PARAMETER, PH_COMP_KEYSTORE); } /* Check for a valid KUC entry */ if (wNewRefNoKUC >= pDataParams->wNoOfKUCEntries) { return PH_ADD_COMPCODE(PH_ERR_INVALID_PARAMETER, PH_COMP_KEYSTORE); } /* Overflow checks */ if (wNoOfKeys > pDataParams->wNoOfVersions) { return PH_ADD_COMPCODE(PH_ERR_INVALID_PARAMETER, PH_COMP_KEYSTORE); } switch(wNewKeyType) { case PH_KEYSTORE_KEY_TYPE_AES128: case PH_KEYSTORE_KEY_TYPE_2K3DES: case PH_KEYSTORE_KEY_TYPE_AES192: case PH_KEYSTORE_KEY_TYPE_3K3DES: case PH_KEYSTORE_KEY_TYPE_AES256: case PH_KEYSTORE_KEY_TYPE_DES: case PH_KEYSTORE_KEY_TYPE_MIFARE: bKeyLength = (uint8_t)phKeyStore_GetKeySize(wNewKeyType); break; default: return PH_ADD_COMPCODE(PH_ERR_INVALID_PARAMETER, PH_COMP_KEYSTORE); } pDataParams->pKeyEntries[wKeyNo].wKeyType = wNewKeyType; /* Reset KUC to master Key */ pDataParams->pKeyEntries[wKeyNo].wRefNoKUC = wNewRefNoKUC; /* Reset all keys to 0x00*/ for (i=0; i < wNoOfKeys ; i++) { PH_CHECK_SUCCESS_FCT(statusTmp, phKeyStore_Sw_GetKeyValuePtrPos(pDataParams,wKeyNo,i,&pKeyVersion)); pKeyVersion->wVersion = pNewKeyVersionList[i]; memcpy(pKeyVersion->pKey, &pNewKeys[i*bKeyLength], bKeyLength); /* PRQA S 3200 */ } return PH_ADD_COMPCODE(PH_ERR_SUCCESS, PH_COMP_KEYSTORE); }