#ifndef _TOKEND_ATTRIBUTECODER_H_
#define _TOKEND_ATTRIBUTECODER_H_
#include <security_utilities/utilities.h>
#include <Security/cssmtype.h>
namespace Tokend
{
class MetaAttribute;
class Record;
class TokenContext;
class AttributeCoder
{
NOCOPY(AttributeCoder)
public:
AttributeCoder() {}
virtual ~AttributeCoder() = 0;
virtual void decode(TokenContext *tokenContext,
const MetaAttribute &metaAttribute, Record &record) = 0;
};
class CertificateAttributeCoder : public AttributeCoder
{
NOCOPY(CertificateAttributeCoder)
public:
CertificateAttributeCoder() {}
virtual ~CertificateAttributeCoder();
virtual void decode(TokenContext *tokenContext,
const MetaAttribute &metaAttribute, Record &record);
private:
};
class ConstAttributeCoder : public AttributeCoder
{
NOCOPY(ConstAttributeCoder)
public:
ConstAttributeCoder(uint32 value);
ConstAttributeCoder(bool value);
virtual ~ConstAttributeCoder();
virtual void decode(TokenContext *tokenContext,
const MetaAttribute &metaAttribute, Record &record);
private:
uint32 mValue;
};
class GuidAttributeCoder : public AttributeCoder
{
NOCOPY(GuidAttributeCoder)
public:
GuidAttributeCoder(const CSSM_GUID &guid);
virtual ~GuidAttributeCoder();
virtual void decode(TokenContext *tokenContext,
const MetaAttribute &metaAttribute, Record &record);
private:
const CSSM_GUID mGuid;
};
class NullAttributeCoder : public AttributeCoder
{
NOCOPY(NullAttributeCoder)
public:
NullAttributeCoder() {}
virtual ~NullAttributeCoder();
virtual void decode(TokenContext *tokenContext,
const MetaAttribute &metaAttribute, Record &record);
};
class ZeroAttributeCoder : public AttributeCoder
{
NOCOPY(ZeroAttributeCoder)
public:
ZeroAttributeCoder() {}
virtual ~ZeroAttributeCoder();
virtual void decode(TokenContext *tokenContext,
const MetaAttribute &metaAttribute, Record &record);
};
class KeyDataAttributeCoder : public AttributeCoder
{
NOCOPY(KeyDataAttributeCoder)
public:
KeyDataAttributeCoder() {}
virtual ~KeyDataAttributeCoder();
virtual void decode(TokenContext *tokenContext,
const MetaAttribute &metaAttribute, Record &record);
};
class LinkedRecordAttributeCoder : public Tokend::AttributeCoder
{
NOCOPY(LinkedRecordAttributeCoder)
public:
LinkedRecordAttributeCoder() {}
virtual ~LinkedRecordAttributeCoder();
const void *certificateKey() const { return mCertificateMetaAttribute; }
const void *publicKeyKey() const { return mPublicKeyMetaAttribute; }
void setCertificateMetaAttribute(
const Tokend::MetaAttribute *linkedRecordMetaAttribute)
{ mCertificateMetaAttribute = linkedRecordMetaAttribute; }
void setPublicKeyMetaAttribute(
const Tokend::MetaAttribute *linkedRecordMetaAttribute)
{ mPublicKeyMetaAttribute = linkedRecordMetaAttribute; }
virtual void decode(Tokend::TokenContext *tokenContext,
const Tokend::MetaAttribute &metaAttribute,
Tokend::Record &record);
private:
const Tokend::MetaAttribute *mCertificateMetaAttribute;
const Tokend::MetaAttribute *mPublicKeyMetaAttribute;
};
class DescriptionAttributeCoder : public AttributeCoder
{
NOCOPY(DescriptionAttributeCoder)
public:
DescriptionAttributeCoder() {}
virtual ~DescriptionAttributeCoder();
virtual void decode(TokenContext *tokenContext,
const MetaAttribute &metaAttribute, Record &record);
};
class DataAttributeCoder : public Tokend::AttributeCoder
{
NOCOPY(DataAttributeCoder)
public:
DataAttributeCoder() {}
virtual ~DataAttributeCoder();
virtual void decode(TokenContext *tokenContext,
const MetaAttribute &metaAttribute, Record &record);
};
}
#endif