#ifndef _H_CDSA_CLIENT_CRYPTOCLIENT
#define _H_CDSA_CLIENT_CRYPTOCLIENT 1
#include <security_cdsa_client/cspclient.h>
#include <security_cdsa_client/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); }
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); }
protected:
void activate();
protected:
CSSM_ENCRYPT_MODE mMode;
Key mKey;
const CssmData *mInitVector;
CSSM_PADDING mPadding;
RecursiveMutex mActivateMutex;
};
class Encrypt : public Crypt
{
public:
Encrypt(const CSP &csp, CSSM_ALGORITHMS alg) : Crypt(csp, alg) {};
public:
CSSM_SIZE encrypt(const CssmData *in, uint32 inCount, CssmData *out, uint32 outCount,
CssmData &remData);
CSSM_SIZE encrypt(const CssmData &in, CssmData &out, CssmData &remData)
{ return encrypt(&in, 1, &out, 1, remData); }
void init(); CSSM_SIZE encrypt(const CssmData *in, uint32 inCount, CssmData *out, uint32 outCount);
CSSM_SIZE 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:
CSSM_SIZE decrypt(const CssmData *in, uint32 inCount, CssmData *out, uint32 outCount,
CssmData &remData);
CSSM_SIZE decrypt(const CssmData &in, CssmData &out, CssmData &remData)
{ return decrypt(&in, 1, &out, 1, remData); }
void init(); CSSM_SIZE decrypt(const CssmData *in, uint32 inCount, CssmData *out, uint32 outCount);
CSSM_SIZE decrypt(const CssmData &in, CssmData &out)
{ return decrypt(&in, 1, &out, 1); }
void final(CssmData &remData);
};
} }
#endif // _H_CDSA_CLIENT_CRYPTOCLIENT