#ifndef _H_CSSMCERT
#define _H_CSSMCERT
#include <security_cdsa_utilities/cssmalloc.h>
#include <security_cdsa_utilities/cssmdata.h>
namespace Security {
class CssmField : public PodWrapper<CssmField, CSSM_FIELD> {
public:
CssmField() { }
CssmField(const CSSM_OID &oid, const CSSM_DATA &value)
{ FieldOid = oid; FieldValue = value; }
CssmField(const CSSM_OID &oid)
{ FieldOid = oid; FieldValue = CssmData(); }
public:
CssmOid &oid() { return CssmOid::overlay(FieldOid); }
CssmOid &value() { return CssmOid::overlay(FieldValue); }
const CssmOid &oid() const { return CssmOid::overlay(FieldOid); }
const CssmOid &value() const { return CssmOid::overlay(FieldValue); }
bool isComplex() const
{ return value().length() == CSSM_FIELDVALUE_COMPLEX_DATA_TYPE; }
};
class EncodedCertificate : public PodWrapper<EncodedCertificate, CSSM_ENCODED_CERT> {
public:
EncodedCertificate(CSSM_CERT_TYPE type = CSSM_CERT_UNKNOWN,
CSSM_CERT_ENCODING enc = CSSM_CERT_ENCODING_UNKNOWN,
const CSSM_DATA *data = NULL);
CSSM_CERT_TYPE type() const { return CertType; }
CSSM_CERT_ENCODING encoding() const { return CertEncoding; }
const CssmData &blob() const { return CssmData::overlay(CertBlob); }
void *data() const { return blob().data(); }
size_t length() const { return blob().length(); }
};
class CertGroup : public PodWrapper<CertGroup, CSSM_CERTGROUP> {
public:
CertGroup() { }
CertGroup(CSSM_CERT_TYPE ctype, CSSM_CERT_ENCODING encoding, CSSM_CERTGROUP_TYPE type);
public:
CSSM_CERT_TYPE certType() const { return CertType; }
CSSM_CERT_ENCODING encoding() const { return CertEncoding; }
CSSM_CERTGROUP_TYPE type() const { return CertGroupType; }
uint32 count() const { return NumCerts; }
uint32 &count() { return NumCerts; }
public:
CssmData * &blobCerts()
{ assert(type() == CSSM_CERTGROUP_DATA); return CssmData::overlayVar(GroupList.CertList); }
CssmData *blobCerts() const
{ assert(type() == CSSM_CERTGROUP_DATA); return CssmData::overlay(GroupList.CertList); }
EncodedCertificate * &encodedCerts()
{ return EncodedCertificate::overlayVar(GroupList.EncodedCertList); }
EncodedCertificate *encodedCerts() const
{ return EncodedCertificate::overlay(GroupList.EncodedCertList); }
public:
void destroy(Allocator &allocator);
};
namespace DataWalkers {
} }
#endif //_H_CSSMCERT