Adjust comment
[platform/core/connectivity/smartcard-service.git] / common / include / APDUHelper.h
1 /*
2  * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #ifndef APDUHELPER_H_
18 #define APDUHELPER_H_
19
20 /* standard library header */
21
22 /* SLP library header */
23
24 /* local header */
25 #include "ByteArray.h"
26
27 namespace smartcard_service_api
28 {
29         class ResponseHelper
30         {
31         private:
32                 ByteArray response;
33                 unsigned char sw[2];
34                 int status;
35                 ByteArray dataField;
36
37                 static int parseStatusWord(unsigned char *sw);
38         public:
39                 ResponseHelper();
40                 ResponseHelper(const ByteArray &response);
41                 ~ResponseHelper();
42
43                 bool setResponse(const ByteArray &response);
44                 int getStatus();
45                 unsigned char getSW1();
46                 unsigned char getSW2();
47
48 //              char *getErrorString();
49                 ByteArray getDataField();
50
51                 static int getStatus(const ByteArray &response);
52                 static ByteArray getDataField(const ByteArray &response);
53 //              static char *getErrorString();
54         };
55
56         class APDUCommand
57         {
58         private:
59                 typedef struct _command_header_t
60                 {
61                         unsigned char cla;
62                         unsigned char ins;
63                         unsigned char param[2];
64                 } command_header_t;
65
66                 command_header_t header;
67                 ByteArray commandData;
68                 unsigned int maxResponseSize;
69                 bool isExtendedLength;
70
71         public:
72                 static const unsigned char INS_DEACTIVATE_FILE = (unsigned char)0x04;
73                 static const unsigned char INS_TERMINAL_PROFILE = (unsigned char)0x10;
74                 static const unsigned char INS_FETCH = (unsigned char)0x12;
75                 static const unsigned char INS_TERMINAL_RESPONSE = (unsigned char)0x14;
76                 static const unsigned char INS_VERIFY = (unsigned char)0x20;
77                 static const unsigned char INS_CHANGE_PIN = (unsigned char)0x24;
78                 static const unsigned char INS_DISABLE_PIN = (unsigned char)0x26;
79                 static const unsigned char INS_ENABLE_PIN = (unsigned char)0x28;
80                 static const unsigned char INS_UNBLOCK_PIN = (unsigned char)0x2C;
81                 static const unsigned char INS_INCREASE = (unsigned char)0x32;
82                 static const unsigned char INS_ACTIVATE_FILE = (unsigned char)0x44;
83                 static const unsigned char INS_GET_CHALLENGE = (unsigned char)0x84;
84                 static const unsigned char INS_AUTHENTICATE = (unsigned char)0x88;
85                 static const unsigned char INS_AUTHENTICATE2 = (unsigned char)0x89;
86                 static const unsigned char INS_MANAGE_CHANNEL = (unsigned char)0x70;
87                 static const unsigned char INS_MANAGE_SECURE_CHANNEL = (unsigned char)0x73;
88                 static const unsigned char INS_TRANSACT_DATA = (unsigned char)0x75;
89                 static const unsigned char INS_SEARCH_RECORD = (unsigned char)0xA2;
90                 static const unsigned char INS_SELECT_FILE = (unsigned char)0xA4;
91                 static const unsigned char INS_TERMINAL_CAPABILITY = (unsigned char)0xAA;
92                 static const unsigned char INS_READ_BINARY = (unsigned char)0xB0;
93                 static const unsigned char INS_READ_RECORD = (unsigned char)0xB2;
94                 static const unsigned char INS_GET_RESPONSE = (unsigned char)0xC0;
95                 static const unsigned char INS_ENVELOPE = (unsigned char)0xC2;
96                 static const unsigned char INS_RETRIEVE_DATA = (unsigned char)0xCB;
97                 static const unsigned char INS_WRITE_BINARY = (unsigned char)0xD0;
98                 static const unsigned char INS_UPDATE_BINARY = (unsigned char)0xD6;
99                 static const unsigned char INS_UPDATE_RECORD = (unsigned char)0xDC;
100                 static const unsigned char INS_SET_DATA = (unsigned char)0xDB;
101                 static const unsigned char INS_CREATE_FILE = (unsigned char)0xE0;
102                 static const unsigned char INS_APPEND_RECORD = (unsigned char)0xE2;
103                 static const unsigned char INS_DELETE_FILE = (unsigned char)0xE4;
104                 static const unsigned char INS_STATUS = (unsigned char)0xF2;
105 //              static const unsigned char INS_ = (unsigned char)0x;
106
107                 static const unsigned char P1_SELECT_BY_ID = (unsigned char)0x00;
108                 static const unsigned char P1_SELECT_PARENT_DF = (unsigned char)0x03;
109                 static const unsigned char P1_SELECT_BY_DF_NAME = (unsigned char)0x04;
110                 static const unsigned char P1_SELECT_BY_PATH = (unsigned char)0x08;
111                 static const unsigned char P1_SELECT_BY_PATH_FROM_CURRENT_DF = (unsigned char)0x09;
112 //              static const unsigned char P1_ = (unsigned char)0x;
113
114                 static const unsigned char P2_SELECT_GET_FCP = (unsigned char)0x04;
115 //              static const unsigned char P2_ = (unsigned char)0x;
116
117                 static const unsigned char CLA_CHANNEL_STANDARD = (unsigned char)0x00;
118                 static const unsigned char CLA_CHANNEL_EXTENDED = (unsigned char)0x01;
119
120                 APDUCommand();
121                 ~APDUCommand();
122
123                 bool setCommand(unsigned char cla, unsigned char ins, unsigned char p1, unsigned char p2, ByteArray commandData, unsigned int maxResponseSize);
124                 bool setCommand(const ByteArray &command);
125
126                 bool setChannel(int type, int channelNum);
127
128                 void setCLA(unsigned char cla);
129                 unsigned char getCLA();
130
131                 void setINS(unsigned char ins);
132                 unsigned char getINS();
133
134                 void setP1(unsigned char p1);
135                 unsigned char getP1();
136
137                 void setP2(unsigned char p2);
138                 unsigned char getP2();
139
140                 void setCommandData(const ByteArray &data);
141                 ByteArray getCommandData();
142
143                 void setMaxResponseSize(unsigned int maxResponseSize);
144                 unsigned int setMaxResponseSize();
145
146                 bool getBuffer(ByteArray &array);
147         };
148
149         class APDUHelper
150         {
151         public:
152                 static const int COMMAND_OPEN_LOGICAL_CHANNEL = 1;
153                 static const int COMMAND_CLOSE_LOGICAL_CHANNEL = 2;
154                 static const int COMMAND_SELECT_BY_ID = 3;
155                 static const int COMMAND_SELECT_PARENT_DF = 4;
156                 static const int COMMAND_SELECT_BY_DF_NAME = 5;
157                 static const int COMMAND_SELECT_BY_PATH = 6;
158                 static const int COMMAND_SELECT_BY_PATH_FROM_CURRENT_DF = 7;
159                 static const int COMMAND_READ_BINARY = 8;
160                 static const int COMMAND_READ_RECORD = 9;
161                 static const int COMMAND_WRITE_BINARY = 10;
162                 static const int COMMAND_WRITE_RECORD = 11;
163
164                 static ByteArray generateAPDU(int command, int channel, ByteArray data);
165         };
166
167 } /* namespace smartcard_service_api */
168 #endif /* APDUHELPER_H_ */