2 * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 #include "APDUHelper.h"
22 namespace smartcard_service_api
24 static unsigned char aid[] = { 0xA0, 0x00, 0x00, 0x00, 0x63, 0x50,
25 0x4B, 0x43, 0x53, 0x2D, 0x31, 0x35 };
26 ByteArray PKCS15::PKCS15_AID(ARRAY_AND_SIZE(aid));
28 PKCS15::PKCS15(Channel *channel) :
29 PKCS15Object(channel), odf(NULL)
33 PKCS15::PKCS15(Channel *channel, const ByteArray &selectResponse) :
34 PKCS15Object(channel, selectResponse), odf(NULL)
51 ret = PKCS15Object::select(PKCS15::PKCS15_AID);
52 if (ret >= SCARD_ERROR_OK)
54 _DBG("response : %s", selectResponse.toString().c_str());
56 else if (ret == ResponseHelper::ERROR_FILE_NOT_FOUND)
58 _ERR("PKCS15 AID not found, search in EF DIR");
60 ret = selectFromEFDIR();
61 if (ret >= SCARD_ERROR_OK)
63 _DBG("response : %s", selectResponse.toString().c_str());
67 _ERR("PKCS15 select failed, [%d]", ret);
72 _ERR("PKCS15 select failed, [%d]", ret);
78 int PKCS15::selectFromEFDIR()
85 if (ret >= SCARD_ERROR_OK)
87 path = dir.getPathByAID(PKCS15_AID);
90 ret = PKCS15Object::select(path, false);
91 if (ret < SCARD_ERROR_OK)
93 _ERR("PKCS15 select failed, [%d]", ret);
98 _ERR("PKCS15 path is not found");
99 ret = SCARD_ERROR_NOT_SUPPORTED;
104 _ERR("select EFDIR failed, [%x]", -ret);
110 PKCS15ODF *PKCS15::getODF()
114 odf = new PKCS15ODF(channel);
116 if (odf != NULL && odf->isClosed() == true)
118 _ERR("failed to open ODF");
125 _DBG("odf [%p]", odf);
129 } /* namespace smartcard_service_api */