#include "CACSchema.h"
#include "MetaAttribute.h"
#include "MetaRecord.h"
#include <Security/SecCertificate.h>
#include <Security/SecKeychainItem.h>
#include <Security/SecKey.h>
using namespace Tokend;
CACSchema::CACSchema() :
mKeyAlgorithmCoder(uint32(CSSM_ALGID_RSA)),
mKeySizeCoder(uint32(1024))
{
}
CACSchema::~CACSchema()
{
}
Tokend::Relation *CACSchema::createKeyRelation(CSSM_DB_RECORDTYPE keyType)
{
Relation *rn = createStandardRelation(keyType);
MetaRecord &mr = rn->metaRecord();
mr.keyHandleFactory(&mCACKeyHandleFactory);
mr.attributeCoder(kSecKeyPrintName, &mDescriptionCoder);
mr.attributeCoder(kSecKeyKeyType, &mKeyAlgorithmCoder);
mr.attributeCoder(kSecKeyKeySizeInBits, &mKeySizeCoder);
mr.attributeCoder(kSecKeyEffectiveKeySize, &mKeySizeCoder);
mr.attributeCoder(kSecKeyExtractable, &mFalseCoder);
mr.attributeCoder(kSecKeySensitive, &mTrueCoder);
mr.attributeCoder(kSecKeyModifiable, &mFalseCoder);
mr.attributeCoder(kSecKeyPrivate, &mTrueCoder);
mr.attributeCoder(kSecKeyNeverExtractable, &mTrueCoder);
mr.attributeCoder(kSecKeyAlwaysSensitive, &mTrueCoder);
mr.attributeCoder(kSecKeyEncrypt, &mFalseCoder);
mr.attributeCoder(kSecKeyWrap, &mFalseCoder);
mr.attributeCoder(kSecKeyVerify, &mFalseCoder);
mr.attributeCoder(kSecKeyDerive, &mFalseCoder);
mr.attributeCoder(kSecKeySignRecover, &mFalseCoder);
mr.attributeCoder(kSecKeyVerifyRecover, &mFalseCoder);
return rn;
}
void CACSchema::create()
{
Schema::create();
createStandardRelation(CSSM_DL_DB_RECORD_X509_CERTIFICATE);
createKeyRelation(CSSM_DL_DB_RECORD_PRIVATE_KEY);
Relation *rn_gen = createStandardRelation(CSSM_DL_DB_RECORD_GENERIC);
MetaRecord &mr_gen = rn_gen->metaRecord();
mr_gen.attributeCoderForData(&mCACDataAttributeCoder);
}