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 "PKCS15DODF.h"
24 #include "SimpleTLV.h"
26 namespace smartcard_service_api
29 PKCS15DODF::PKCS15DODF(unsigned int fid, Channel *channel) :
34 if ((ret = select(fid)) >= SCARD_ERROR_OK) {
35 ByteArray dodfData, extra;
37 _DBG("response : %s", selectResponse.toString().c_str());
39 if ((ret = readBinaryAll(0, dodfData)) == 0) {
40 _DBG("dodfData : %s", dodfData.toString().c_str());
44 _ERR("readBinary failed, [%d]", ret);
47 _ERR("select failed, [%d]", ret);
51 PKCS15DODF::PKCS15DODF(const ByteArray &path, Channel *channel) :
56 if ((ret = select(path)) >= SCARD_ERROR_OK) {
57 ByteArray dodfData, extra;
59 _DBG("response : %s", selectResponse.toString().c_str());
61 if ((ret = readBinaryAll(0, dodfData)) == 0) {
62 _DBG("dodfData : %s", dodfData.toString().c_str());
66 _ERR("readBinary failed, [%d]", ret);
69 _ERR("select failed, [%d]", ret);
73 PKCS15DODF::~PKCS15DODF()
77 bool PKCS15DODF::parseData(const ByteArray &data)
82 while (tlv.decodeTLV()) {
83 switch (tlv.getTag()) {
84 case (unsigned int)0xA1 : /* CHOICE 1 : OidDO */
86 PKCS15OID oid(tlv.getValue());
88 _DBG("OID DataObject : %s", oid.getOID().toString().c_str());
90 mapOID.insert(make_pair(oid.getOID(), oid));
95 _DBG("Unknown tlv : t [%X], l [%d], v %s", tlv.getTag(), tlv.size(), tlv.getValue().toString().c_str());
100 _INFO("dataList.size() = %zu", mapOID.size());
105 int PKCS15DODF::searchOID(const ByteArray &oid, ByteArray &data) const
108 map<ByteArray, PKCS15OID>::const_iterator item;
110 item = mapOID.find(oid);
111 if (item != mapOID.end()) {
112 data = item->second.getPath();
120 } /* namespace smartcard_service_api */