#ifndef _H_LOCALDATABASE
#define _H_LOCALDATABASE
#include "database.h"
class LocalKey;
class LocalDbCommon : public DbCommon {
public:
LocalDbCommon(Session &ssn) : DbCommon(ssn) { }
Mutex &uiLock() { return mUILock; }
private:
Mutex mUILock; };
class LocalDatabase : public Database {
public:
LocalDatabase(Process &proc);
public:
void queryKeySizeInBits(Key &key, CssmKeySize &result);
void generateSignature(const Context &context, Key &key, CSSM_ALGORITHMS signOnlyAlgorithm,
const CssmData &data, CssmData &signature);
void verifySignature(const Context &context, Key &key, CSSM_ALGORITHMS verifyOnlyAlgorithm,
const CssmData &data, const CssmData &signature);
void generateMac(const Context &context, Key &key,
const CssmData &data, CssmData &mac);
void verifyMac(const Context &context, Key &key,
const CssmData &data, const CssmData &mac);
void encrypt(const Context &context, Key &key, const CssmData &clear, CssmData &cipher);
void decrypt(const Context &context, Key &key, const CssmData &cipher, CssmData &clear);
void generateKey(const Context &context,
const AccessCredentials *cred, const AclEntryPrototype *owner,
CSSM_KEYUSE usage, CSSM_KEYATTR_FLAGS attrs, RefPointer<Key> &newKey);
void generateKey(const Context &context,
const AccessCredentials *cred, const AclEntryPrototype *owner,
CSSM_KEYUSE pubUsage, CSSM_KEYATTR_FLAGS pubAttrs,
CSSM_KEYUSE privUsage, CSSM_KEYATTR_FLAGS privAttrs,
RefPointer<Key> &publicKey, RefPointer<Key> &privateKey);
void deriveKey(const Context &context, Key *key,
const AccessCredentials *cred, const AclEntryPrototype *owner,
CssmData *param, uint32 usage, uint32 attrs, RefPointer<Key> &derivedKey);
void wrapKey(const Context &context, const AccessCredentials *cred,
Key *wrappingKey, Key &keyToBeWrapped,
const CssmData &descriptiveData, CssmKey &wrappedKey);
void unwrapKey(const Context &context,
const AccessCredentials *cred, const AclEntryPrototype *owner,
Key *wrappingKey, Key *publicKey, CSSM_KEYUSE usage, CSSM_KEYATTR_FLAGS attrs,
const CssmKey wrappedKey, RefPointer<Key> &unwrappedKey, CssmData &descriptiveData);
void getOutputSize(const Context &context, Key &key, uint32 inputSize, bool encrypt, uint32 &result);
protected:
virtual RefPointer<Key> makeKey(const CssmKey &newKey, uint32 moreAttributes,
const AclEntryPrototype *owner) = 0;
};
#endif //_H_LOCALDATABASE