#ifndef _H_CDSA_CLIENT_MACCLIENT
#define _H_CDSA_CLIENT_MACCLIENT 1
#include <security_cdsa_client/cspclient.h>
#include <security_cdsa_client/keyclient.h>
namespace Security
{
namespace CssmClient
{
class MacContext : public Context
{
public:
MacContext(const CSP &csp, CSSM_ALGORITHMS alg)
: Context(csp, alg) { }
Key key() const { assert(mKey); return mKey; }
void key(const Key &k) { mKey = k; set(CSSM_ATTRIBUTE_KEY, mKey); }
protected:
void activate();
Key mKey;
};
class GenerateMac : public MacContext
{
public:
GenerateMac(const CSP &csp, CSSM_ALGORITHMS alg) : MacContext(csp, alg) { }
void sign(const CssmData &data, CssmData &mac) { sign(&data, 1, mac); }
void sign(const CssmData *data, uint32 count, CssmData &mac);
void init(); void sign(const CssmData &data) { sign(&data, 1); }
void sign(const CssmData *data, uint32 count);
void operator () (CssmData &mac);
CssmData operator () () { CssmData mac; (*this)(mac); return mac; }
};
class VerifyMac : public MacContext
{
public:
VerifyMac(const CSP &csp, CSSM_ALGORITHMS alg) : MacContext(csp, alg) { }
void verify(const CssmData &data, const CssmData &mac) { verify(&data, 1, mac); }
void verify(const CssmData *data, uint32 count, const CssmData &mac);
void init(); void verify(const CssmData &data) { verify(&data, 1); }
void verify(const CssmData *data, uint32 count);
void operator () (const CssmData &mac);
};
}
}
#endif // _H_CDSA_CLIENT_MACCLIENT