/* * * Copyright 2016 NXP * SPDX-License-Identifier: Apache-2.0 */ /** * @par Description * This file implements generic APDU response evaluation. * @par History * 1.0 20-feb-2012 : Initial version * *****************************************************************************/ #include #include #include "scp.h" #include "sm_apdu.h" #include "sm_errors.h" #include "nxLog_hostLib.h" #include "nxEnsure.h" /** * Returns the status word of a response APDU when no response data is expected. * @param[in] pApdu Pointer to the APDU. * @retval ::ERR_WRONG_RESPONSE In case the response contains more than only the status word * @returns status word (in case the response is 2 byte long) */ U16 CheckNoResponseData(apdu_t * pApdu) { U16 rv = ERR_GENERAL_ERROR; U8 isOk = 0x00; ENSURE_OR_GO_EXIT(pApdu != NULL); if (pApdu->rxlen != 2) { // printf("%d: pApdu->rxlen = %d", __LINE__, pApdu->rxlen); rv = ERR_WRONG_RESPONSE; } else { // printBytestring("CheckNoResponseData", pApdu->pBuf, pApdu->rxlen); rv = smGetSw(pApdu, &isOk); } exit: return rv; } /** * Returns the status word of a response APDU when no response data is expected. * @param[in] rawResponse Pointer to the raw response * @param[in] rawResponseLen Length of \p rawResponse * @retval ::ERR_WRONG_RESPONSE In case the response contains more than only the status word * @returns status word (in case the response is 2 byte long) */ U16 CheckNoResponseDataRaw(U8 *rawResponse, U16 rawResponseLen) { U16 rv = ERR_GENERAL_ERROR; ENSURE_OR_GO_EXIT(rawResponse != NULL); if (rawResponseLen != 2) { rv = ERR_WRONG_RESPONSE; } else { rv = (rawResponse[0] << 8) + rawResponse[1]; } exit: return rv; }