| /****************************************************************************** |
| * |
| * Copyright 2020-2021 NXP |
| * |
| * 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. |
| * |
| ******************************************************************************/ |
| |
| #pragma once |
| #include <android-base/logging.h> |
| #include <android-base/stringprintf.h> |
| #include <hardware/hardware.h> |
| #include <hidl/MQDescriptor.h> |
| #include <hidl/Status.h> |
| #include <string.h> |
| #include "phNxpEse_Api.h" |
| |
| using ::android::hardware::hidl_vec; |
| #define OSU_PROP_CLA 0x80 |
| #define OSU_PROP_INS 0xDF |
| #define OSU_PROP_RST_P1 0xEF |
| |
| #define ISO7816_BASIC_CHANNEL 0x00 |
| #define ISO7816_CLA_OFFSET 0 |
| #define ISO7816_INS_OFFSET 1 |
| #define ISO7816_P1_OFFSET 2 |
| #define ISO7816_P2_OFFSET 3 |
| #define ISO7816_LC_OFFSET 4 |
| #define ISO7816_EXTENDED_LC_VALUE 0 |
| #define ISO7816_SHORT_APDU_HEADER 5 |
| #define ISO7816_EXTENDED_APDU_HEADER 7 |
| #define ISO7816_CLA_CHN_MASK 0x03 |
| #define IS_OSU_MODE(...) (OsuHalExtn::getInstance().isOsuMode(__VA_ARGS__)) |
| |
| class OsuHalExtn { |
| public: |
| typedef enum { |
| NON_OSU_MODE, // Normal Mode : All HAL APIs allowed |
| OSU_PROP_MODE, // OSU mode : Only OSU JAR command allowed |
| OSU_GP_MODE, // OSU Mode : GP command in the OSU mode |
| OSU_RST_MODE, // OSU mode : Proprietary HARD reset |
| OSU_BLOCKED_MODE, // OSU mode : Command not allowed return error |
| } OsuApduMode; |
| |
| typedef enum { |
| INIT, |
| OPENBASIC, |
| OPENLOGICAL, |
| GETATR, |
| TRANSMIT, |
| CLOSE, |
| } SecureElementAPI; |
| |
| static OsuHalExtn& getInstance(); |
| |
| OsuApduMode isOsuMode(const hidl_vec<uint8_t>& evt, uint8_t type, |
| phNxpEse_data* pCmdData = nullptr); |
| bool isOsuMode(uint8_t type, uint8_t channel = 0xFF); |
| virtual ~OsuHalExtn(); |
| OsuHalExtn() noexcept; |
| void checkAndUpdateOsuMode(); |
| unsigned long int getOSUMaxWtxCount(); |
| |
| private: |
| bool isAppOSUMode; |
| bool isJcopOSUMode; |
| static const hidl_vec<uint8_t> osu_aid[10]; |
| OsuApduMode checkTransmit(uint8_t* input, uint32_t* outLength, |
| const hidl_vec<uint8_t>& data); |
| bool isOsuMode(); |
| }; |