#ifndef _H_CDSA_CLIENT_CRYPTOCLIENT
#define _H_CDSA_CLIENT_CRYPTOCLIENT 1
#include <Security/cspclient.h>
#include <Security/keyclient.h>
namespace Security
{
namespace CssmClient
{
class Crypt : public Context
{
public:
Crypt(const CSP &csp, CSSM_ALGORITHMS alg);
public:
CSSM_ENCRYPT_MODE mode() const { return mMode; }
void mode(CSSM_ENCRYPT_MODE m) { mMode = m; set(CSSM_ATTRIBUTE_MODE, m); }
const AccessCredentials *cred() const { return mCred; }
void cred(const AccessCredentials *c);
Key key() const { return mKey; }
void key(const Key &k);
const CssmData &initVector() const { return *mInitVector; }
void initVector(const CssmData &v) { mInitVector = &v; set(CSSM_ATTRIBUTE_INIT_VECTOR, v); }
CSSM_PADDING padding() const { return mPadding; }
void padding(CSSM_PADDING p) { mPadding = p; set(CSSM_ATTRIBUTE_PADDING, p); }
AclEntryInput aclEntry() const { return mAclEntry; }
void aclEntry(AclEntryInput &aclEntry) { mAclEntry = aclEntry; }
protected:
void activate();
protected:
CSSM_ENCRYPT_MODE mMode;
Key mKey;
const CssmData *mInitVector;
CSSM_PADDING mPadding;
protected:
const AccessCredentials *mCred;
AclEntryInput mAclEntry;
};
class Encrypt : public Crypt
{
public:
Encrypt(const CSP &csp, CSSM_ALGORITHMS alg) : Crypt(csp, alg) {};
public:
uint32 encrypt(const CssmData *in, uint32 inCount, CssmData *out, uint32 outCount,
CssmData &remData);
uint32 encrypt(const CssmData &in, CssmData &out, CssmData &remData)
{ return encrypt(&in, 1, &out, 1, remData); }
void init(); uint32 encrypt(const CssmData *in, uint32 inCount, CssmData *out, uint32 outCount);
uint32 encrypt(const CssmData &in, CssmData &out)
{ return encrypt(&in, 1, &out, 1); }
void final(CssmData &remData);
};
class Decrypt : public Crypt
{
public:
Decrypt(const CSP &csp, CSSM_ALGORITHMS alg) : Crypt(csp, alg) {};
public:
uint32 decrypt(const CssmData *in, uint32 inCount, CssmData *out, uint32 outCount,
CssmData &remData);
uint32 decrypt(const CssmData &in, CssmData &out, CssmData &remData)
{ return decrypt(&in, 1, &out, 1, remData); }
void init(); uint32 decrypt(const CssmData *in, uint32 inCount, CssmData *out, uint32 outCount);
uint32 decrypt(const CssmData &in, CssmData &out)
{ return decrypt(&in, 1, &out, 1); }
void final(CssmData &remData);
};
}
}
#endif // _H_CDSA_CLIENT_CRYPTOCLIENT