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.
17 /* standard library header */
19 /* SLP library header */
23 #include "APDUHelper.h"
27 namespace smartcard_service_api
29 static unsigned char aid[] = { 0xA0, 0x00, 0x00, 0x00, 0x63, 0x50,
30 0x4B, 0x43, 0x53, 0x2D, 0x31, 0x35 };
31 ByteArray PKCS15::PKCS15_AID(ARRAY_AND_SIZE(aid));
33 PKCS15::PKCS15(Channel *channel) :
34 PKCS15Object(channel), odf(NULL)
38 PKCS15::PKCS15(Channel *channel, const ByteArray &selectResponse) :
39 PKCS15Object(channel, selectResponse), odf(NULL)
56 ret = PKCS15Object::select(PKCS15::PKCS15_AID);
57 if (ret >= SCARD_ERROR_OK)
59 _DBG("response : %s", selectResponse.toString().c_str());
61 else if (ret == ResponseHelper::ERROR_FILE_NOT_FOUND)
63 _ERR("PKCS15 AID not found, search in EF DIR");
65 ret = selectFromEFDIR();
66 if (ret >= SCARD_ERROR_OK)
68 _DBG("response : %s", selectResponse.toString().c_str());
72 _ERR("PKCS15 select failed, [%d]", ret);
77 _ERR("PKCS15 select failed, [%d]", ret);
83 int PKCS15::selectFromEFDIR()
90 if (ret >= SCARD_ERROR_OK)
92 path = dir.getPathByAID(PKCS15_AID);
95 ret = PKCS15Object::select(path, false);
96 if (ret < SCARD_ERROR_OK)
98 _ERR("PKCS15 select failed, [%d]", ret);
103 _ERR("PKCS15 path is not found");
104 ret = SCARD_ERROR_NOT_SUPPORTED;
109 _ERR("select EFDIR failed, [%x]", -ret);
115 PKCS15ODF *PKCS15::getODF()
119 odf = new PKCS15ODF(channel);
121 if (odf != NULL && odf->isClosed() == true)
123 _ERR("failed to open ODF");
130 _DBG("odf [%p]", odf);
134 } /* namespace smartcard_service_api */