#include <security_cdsa_client/signclient.h>
using namespace CssmClient;
void SigningContext::activate()
{
StLock<Mutex> _(mActivateMutex);
if (!mActive)
{
check(CSSM_CSP_CreateSignatureContext(attachment()->handle(), mAlgorithm,
cred(), mKey, &mHandle));
mActive = true;
}
}
void Sign::sign(const CssmData *data, uint32 count, CssmData &signature)
{
unstaged();
check(CSSM_SignData(handle(), data, count, mSignOnly, &signature));
}
void Sign::init()
{
check(CSSM_SignDataInit(handle()));
mStaged = true;
}
void Sign::sign(const CssmData *data, uint32 count)
{
staged();
check(CSSM_SignDataUpdate(handle(), data, count));
}
void Sign::operator () (CssmData &signature)
{
staged();
check(CSSM_SignDataFinal(handle(), &signature));
mStaged = false;
}
void Verify::verify(const CssmData *data, uint32 count, const CssmData &signature)
{
unstaged();
check(CSSM_VerifyData(handle(), data, count, mSignOnly, &signature));
}
void Verify::init()
{
check(CSSM_VerifyDataInit(handle()));
mStaged = true;
}
void Verify::verify(const CssmData *data, uint32 count)
{
staged();
check(CSSM_VerifyDataUpdate(handle(), data, count));
}
void Verify::operator () (const CssmData &signature)
{
staged();
check(CSSM_VerifyDataFinal(handle(), &signature));
mStaged = false;
}