#ifndef _CACTOKEN_H_
#define _CACTOKEN_H_
#include <Token.h>
#include "TokenContext.h"
#include <security_utilities/pcsc++.h>
class CACSchema;
class CACToken : public Tokend::ISO7816Token
{
NOCOPY(CACToken)
public:
CACToken();
~CACToken();
virtual void didDisconnect();
virtual void didEnd();
virtual uint32 probe(SecTokendProbeFlags flags,
char tokenUid[TOKEND_MAX_UID]);
virtual void establish(const CSSM_GUID *guid, uint32 subserviceId,
SecTokendEstablishFlags flags, const char *cacheDirectory,
const char *workDirectory, char mdsDirectory[PATH_MAX],
char printName[PATH_MAX]);
virtual void getOwner(AclOwnerPrototype &owner);
virtual void getAcl(const char *tag, uint32 &count, AclEntryInfo *&acls);
virtual void changePIN(int pinNum,
const unsigned char *oldPin, size_t oldPinLength,
const unsigned char *newPin, size_t newPinLength);
virtual uint32_t pinStatus(int pinNum);
virtual void verifyPIN(int pinNum, const unsigned char *pin, size_t pinLength);
virtual void unverifyPIN(int pinNum);
bool identify();
void select(const unsigned char *applet);
uint32_t exchangeAPDU(const unsigned char *apdu, size_t apduLength,
unsigned char *result, size_t &resultLength);
uint32_t getData(unsigned char *result, size_t &resultLength);
protected:
void populate();
public:
const unsigned char *mCurrentApplet;
uint32_t mPinStatus;
AutoAclOwnerPrototype mAclOwner;
AutoAclEntryInfoList mAclEntries;
};
#endif