#include <iostream>
#include "MscToken.h"
#include "MscError.h"
#include <Security/cssmtype.h>
#include <PCSC/pcsclite.h>
#include <PCSC/musclecard.h>
#include <security_cdsa_utilities/cssmdb.h>
void MscToken::loadobjects()
{
for (MSCUChar8 seqOption = MSC_SEQUENCE_RESET;;)
{
MSCObjectInfo objInfo;
MSC_RV rv = MSCListObjects(mConnection, seqOption, &objInfo);
if (rv!=MSC_SUCCESS)
break; const char *objid = MscObjectInfo::overlay(&objInfo)->objid();
MscObject *obj = new MscObject(objInfo,mConnection);
mObjects.insert(pair<std::string,MscObject *>(std::string(objid),obj));
seqOption = MSC_SEQUENCE_NEXT;
}
for (MSCUChar8 seqOption = MSC_SEQUENCE_RESET;;)
{
MSCKeyInfo keyInfo;
MSC_RV rv = MSCListKeys(mConnection, seqOption, &keyInfo);
if (rv!=MSC_SUCCESS)
break; MscKey *xkey = new MscKey(keyInfo,mConnection);
mKeys.insert(pair<MSCUChar8,MscKey *>(xkey->number(),xkey));
seqOption = MSC_SEQUENCE_NEXT;
}
}
void MscToken::dumpobjects()
{
ConstObjIterator obji = mObjects.begin();
for (;obji!=mObjects.end();obji++)
std::cout << (*obji).second << std::endl;
#if 0
ConstKeyIterator keyi = mKeys.begin();
for (;keyi!=mKeys.end();keyi++)
std::cout << (*keyi).second << std::endl;
#endif
}
MscObject &MscToken::getObject(const std::string &objID)
{
ConstObjIterator obji = mObjects.find(objID);
if (obji==mObjects.end())
CssmError::throwMe(CSSM_ERRCODE_INVALID_CONTEXT_HANDLE);
return *(obji->second);
}
MscKey &MscToken::getKey(MSCUChar8 keyNum)
{
ConstKeyIterator keyi = mKeys.find(keyNum);
if (keyi==mKeys.end())
CssmError::throwMe(CSSM_ERRCODE_INVALID_CONTEXT_HANDLE);
return *(keyi->second);
}