#ifndef _PIVRECORD_H_
#define _PIVRECORD_H_
#include "Record.h"
#include "byte_string.h"
class PIVToken;
class PIVRecord : public Tokend::Record
{
NOCOPY(PIVRecord)
public:
PIVRecord(const unsigned char *application, size_t applicationSize, const char *description) :
mApplication(application, application + applicationSize), mDescription(description) {}
virtual ~PIVRecord();
virtual const char *description() { return mDescription.c_str(); }
protected:
const unsigned char *application() const { return &mApplication[0]; }
protected:
const byte_string mApplication;
const std::string mDescription;
};
class PIVKeyRecord : public PIVRecord
{
NOCOPY(PIVKeyRecord)
public:
PIVKeyRecord(const unsigned char *application, size_t applicationSize, const char *description,
const Tokend::MetaRecord &metaRecord, unsigned char keyRef, size_t keySize);
virtual ~PIVKeyRecord();
size_t sizeInBits() const;
void computeCrypt(PIVToken &pivToken, bool sign, const AccessCredentials *cred,
const byte_string& data_type, byte_string &output);
virtual void getAcl(const char *tag, uint32 &count,
AclEntryInfo *&aclList);
private:
AutoAclEntryInfoList mAclEntries;
const unsigned char keyRef;
bool isUserConsent() const;
size_t keySize;
};
class PIVDataRecord : public PIVRecord
{
NOCOPY(PIVDataRecord)
public:
PIVDataRecord(const unsigned char *application, size_t applicationSize, const char *description) :
PIVRecord(application, applicationSize, description), mIsCertificate(false), mAllowCaching(true) {}
virtual ~PIVDataRecord();
virtual Tokend::Attribute *getDataAttribute(Tokend::TokenContext *tokenContext);
protected:
bool mIsCertificate;
bool mAllowCaching;
auto_ptr<Tokend::Attribute> lastAttribute;
};
class PIVCertificateRecord : public PIVDataRecord
{
NOCOPY(PIVCertificateRecord)
public:
PIVCertificateRecord(const unsigned char *application, size_t applicationSize,
const char *description) :
PIVDataRecord(application, applicationSize, description) {mIsCertificate = true; mAllowCaching = true; }
virtual ~PIVCertificateRecord();
};
class PIVProtectedRecord : public PIVDataRecord
{
NOCOPY(PIVProtectedRecord)
public:
PIVProtectedRecord(const unsigned char *application, size_t applicationSize, const char *description) :
PIVDataRecord(application, applicationSize, description) {mIsCertificate = false; mAllowCaching = false; }
virtual ~PIVProtectedRecord();
virtual void getAcl(const char *tag, uint32 &count,
AclEntryInfo *&aclList);
private:
AutoAclEntryInfoList mAclEntries;
};
#endif