#ifndef _H_CSDATABASE
#define _H_CSDATABASE
#include "diskrep.h"
#include "sigblob.h"
#include <Security/Security.h>
#include <security_utilities/globalizer.h>
#include <security_utilities/sqlite++.h>
#include <security_utilities/cfutilities.h>
namespace Security {
namespace CodeSigning {
namespace SQLite = SQLite3;
class SignatureDatabase : public SQLite::Database {
public:
SignatureDatabase(const char *path = defaultPath,
int flags = SQLITE_OPEN_READONLY);
virtual ~SignatureDatabase();
FilterRep *findCode(DiskRep *rep);
public:
static const char defaultPath[];
};
class SignatureDatabaseWriter : public SignatureDatabase {
public:
SignatureDatabaseWriter(const char *path = defaultPath,
int flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE)
: SignatureDatabase(path, flags) { }
void storeCode(const BlobCore *sig, const char *location);
private:
SQLite::int64 insertGlobal(const char *location, const BlobCore *blob);
void insertCode(SQLite::int64 globid, int arch, const EmbeddedSignatureBlob *sig);
};
extern ModuleNexus<SignatureDatabase> signatureDatabase;
extern ModuleNexus<SignatureDatabaseWriter> signatureDatabaseWriter;
} }
#endif // !_H_CSDATABASE