X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/5dd5f9ec28f304ca377c42fd7f711d6cf12b90e1..5c19dc3ae3bd8e40a9c028b0deddd50ff337692c:/OSX/libsecurity_cdsa_client/lib/signclient.cpp?ds=sidebyside diff --git a/OSX/libsecurity_cdsa_client/lib/signclient.cpp b/OSX/libsecurity_cdsa_client/lib/signclient.cpp new file mode 100644 index 00000000..d7744a65 --- /dev/null +++ b/OSX/libsecurity_cdsa_client/lib/signclient.cpp @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2000-2001,2011-2012,2014 Apple Inc. All Rights Reserved. + * + * The contents of this file constitute Original Code as defined in and are + * subject to the Apple Public Source License Version 1.2 (the 'License'). + * You may not use this file except in compliance with the License. Please obtain + * a copy of the License at http://www.apple.com/publicsource and read it before + * using this file. + * + * This Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS + * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT + * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR + * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the + * specific language governing rights and limitations under the License. + */ + + +// +// signclient - client interface to CSSM sign/verify contexts +// +#include + +using namespace CssmClient; + + +// +// Common features of signing and verify contexts +// +void SigningContext::activate() +{ + StLock _(mActivateMutex); + if (!mActive) + { + check(CSSM_CSP_CreateSignatureContext(attachment()->handle(), mAlgorithm, + cred(), mKey, &mHandle)); + mActive = true; + } +} + + +// +// Signing +// +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; +} + + +// +// Verifying +// +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; +}