/*
 *
 * Copyright 2019 NXP
 * SPDX-License-Identifier: Apache-2.0
 */

/** @file */

#ifndef SE050X_APDU_H
#define SE050X_APDU_H

#ifdef __cplusplus
extern "C" {
#endif

#include "se05x_tlv.h"
#include "se05x_const.h"
#include "se05x_APDU_apis.h"

/** Se05x_API_DeleteAll_Iterative
 *
 * Go through each object and delete it individually.
 *
 * This API does not use the Applet API @ref Se05x_API_DeleteAll. It
 * does not delete ALL objects and purposefully skips few objects.
 *
 * Instead, this API uses @ref Se05x_API_ReadIDList and @ref
 * Se05x_API_ReadCryptoObjectList to first fetch list of objects to host, and
 * **selectitvely** deletes.
 *
 * For e.g. It does not kill objects from:
 *  - The range SE05X_OBJID_SE05X_APPLET_RES_START to
 *    SE05X_OBJID_SE05X_APPLET_RES_END.  This range is used by applet.
 *  - The range EX_SSS_OBJID_DEMO_AUTH_START to EX_SSS_OBJID_DEMO_AUTH_END,
 *    which is used by middleware DEMOS for authentication.
 *  - And others.
 *
 * Kindly see the Implementation of is API Se05x_API_DeleteAll_Iterative to see
 * the list of ranges that are skipped.
 *
 * @param[in]  session_ctx  Session Context
 *
 * @return     The status of API.
 */
smStatus_t Se05x_API_DeleteAll_Iterative(pSe05xSession_t session_ctx);

/**
 * @brief      Get the Curve ID for existing Key.
 *
 * This API is functionally same as @ref Se05x_API_GetECCurveId
 * but uses @ref SE05x_ECCurve_t as a type instead of uint8_t.
 *
 * @param[in]  session_ctx  The session context
 * @param[in]  objectID     The object id
 * @param      pcurveId     The pcurve identifier
 *
 *
 * @return     The sm status.
 */
smStatus_t Se05x_API_EC_CurveGetId(pSe05xSession_t session_ctx, uint32_t objectID, SE05x_ECCurve_t *pcurveId);

/** Wrapper for @ref Se05x_API_ECDHGenerateSharedSecret */

#define Se05x_API_ECGenSharedSecret Se05x_API_ECDHGenerateSharedSecret

/** Wrapper for @ref Se05x_API_DigestOneShot */
#define Se05x_API_SHAOneShot Se05x_API_DigestOneShot

// For SIMW-656
bool Se05x_IsInValidRangeOfUID(uint32_t uid);

#ifdef __cplusplus
}
#endif

#endif /* SE050X_APDU_H */
