/* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.hardware.secure_element@1.0; import ISecureElementHalCallback; /** According to ISO/IEC 7816 */ interface ISecureElement { /** * Initializes the Secure Element. This may include updating the applet * and/or vendor-specific initialization. * * HAL service must send onStateChange() with connected equal to true * after all the initialization has been successfully completed. * Clients must wait for a onStateChange(true) before opening channels. * * @param clientCallback callback used to sent status of the SE back to the * client */ init(ISecureElementHalCallback clientCallback); /** * Returns Answer to Reset as per ISO/IEC 7816 * * @return response containing the response. Empty vector if Secure Element * doesn't support ATR. */ getAtr() generates (vec response); /** * Returns the current state of the card. * * This is particularly useful for removable * Secure Elements like UICC, Secure Elements on SD cards etc. * * @return present true if present, false otherwise */ isCardPresent() generates (bool present); /** * Transmits an APDU command (as per ISO/IEC 7816) to the SE. * * @param data APDU command to be sent * @return response to the command. In case of error in communicating with * the secure element, an empty vector is returned. */ transmit(vec data) generates (vec response); /** * Opens a logical channel with the Secure Element, selecting the applet * represented by the Application ID (AID). * * @param aid AID to uniquely identify the applet on the Secure Element * @param p2 P2 paramter of SELECT APDU as per ISO 7816-4 * @return status SecureElementStatus::SUCCESS on success, * SecureElementStatus::CHANNEL_NOT_AVAILABLE if secure * element has reached the maximum limit on the number of * channels it can support, * SecureElementStatus::NO_SUCH_ELEMENT_ERROR if AID provided * doesn't match any applet on the secure element and * SecureElementStatus::UNSUPPORTED_OPERATION if operation * provided by the P2 parameter is not permitted by the * applet. * SecureElementStatus::IOERROR if there was an error * communicating with the Secure Element. * @return response On success, response to SELECT command is returned * empty vector on failure. */ openLogicalChannel(vec aid, uint8_t p2) generates (LogicalChannelResponse response, SecureElementStatus status); /** * Opens a basic channel with the Secure Element, selecting the applet * represented by the Application ID (AID). * * @param aid AID to uniquely identify the applet on the Secure Element * @param p2 P2 paramter of SELECT APDU as per ISO 7816-4 * @return status SecureElementStatus::SUCCESS on success, * SecureElementStatus::CHANNEL_NOT_AVAILABLE if secure * element has reached the maximum limit on the number of * channels it can support, * SecureElementStatus::NO_SUCH_ELEMENT_ERROR if AID provided * doesn't match any applet on the secure element and * SecureElementStatus::UNSUPPORTED_OPERATION if operation * provided by the P2 parameter is not permitted by the * applet. * SecureElementStatus::IOERROR if there was an error * communicating with the Secure Element. * @return selectResponse On success, response to SELECT command is returned * empty vector on failure. */ openBasicChannel(vec aid, uint8_t p2) generates (vec selectResponse, SecureElementStatus status); /** * Closes the channel indicated by the channelNumber. * * Closing a basic channel, i.e with channelNumber 0 must return * SecureElementStatus::FAILED. * * @param channelNumber to be closed * @return status SecureElementStatus::SUCCESS on success and * SecureElementStatus::FAILED on error. */ closeChannel(uint8_t channelNumber) generates (SecureElementStatus status); };