#ifndef _H_SS_CONTEXT
#define _H_SS_CONTEXT
#include <Security/CSPsession.h>
#include <Security/SecurityServerClient.h>
class SSCSPSession;
class SSKey;
class SSContext : public CSPFullPluginSession::CSPContext
{
public:
SSContext(SSCSPSession &session);
virtual void init(const Context &context, bool encoding);
protected:
SecurityServer::ClientSession &clientSession();
SSCSPSession &mSession;
const Context *mContext;
};
class SSSignContext : public SSContext
{
public:
SSSignContext(SSCSPSession &session);
virtual void update(const CssmData &data);
virtual size_t outputSize(bool final, size_t inSize);
virtual void final(CssmData &out);
};
class SSVerifyContext : public SSContext
{
public:
SSVerifyContext(SSCSPSession &session);
virtual void update(const CssmData &data);
virtual void final(const CssmData &in);
};
class SSRandomContext : public SSContext
{
public:
SSRandomContext(SSCSPSession &session);
virtual void init(const Context &context, bool);
virtual size_t outputSize(bool final, size_t inSize);
virtual void final(CssmData &out);
private:
uint32 mOutSize;
};
class SSCryptContext : public SSContext
{
public:
SSCryptContext(SSCSPSession &session);
~SSCryptContext();
virtual void init(const Context &context, bool encoding);
virtual size_t inputSize(size_t outSize);
virtual size_t outputSize(bool final, size_t inSize);
virtual void minimumProgress(size_t &in, size_t &out);
virtual void update(void *inp, size_t &inSize, void *outp,
size_t &outSize);
virtual void final(CssmData &out);
private:
void freeBuffer();
SecurityServer::KeyHandle mKeyHandle;
uint32 mCurrent;
uint32 mCapacity;
void *mBuffer;
};
#if 0
class SSKeyGenContext : public SSContext
{
public:
SSKeyGenContext(SSCSPSession &session);
void generate(const Context &context,
CssmKey &pubKey,
SSKey *pubBinKey,
CssmKey &privKey,
SSKey *privBinKey);
protected:
virtual void generate(const Context &context,
SSKey &pubBinKey, SSKey &privBinKey, uint32 &keySize);
public:
void generateSymKey(const Context &context, CssmKey &outCssmKey);
};
#endif // 0
#endif // _H_SS_CONTEXT