/ OSX / libsecurity_cdsa_client / lib / macclient.cpp
macclient.cpp
  1  /*
  2   * Copyright (c) 2000-2001,2011-2012,2014 Apple Inc. All Rights Reserved.
  3   * 
  4   * The contents of this file constitute Original Code as defined in and are
  5   * subject to the Apple Public Source License Version 1.2 (the 'License').
  6   * You may not use this file except in compliance with the License. Please obtain
  7   * a copy of the License at http://www.apple.com/publicsource and read it before
  8   * using this file.
  9   * 
 10   * This Original Code and all software distributed under the License are
 11   * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS
 12   * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT
 13   * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 14   * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the
 15   * specific language governing rights and limitations under the License.
 16   */
 17  
 18  
 19  //
 20  // macclient - client interface to CSSM sign/verify mac contexts
 21  //
 22  #include <security_cdsa_client/macclient.h>
 23  
 24  using namespace CssmClient;
 25  
 26  
 27  //
 28  // Common features of signing and verify mac contexts
 29  //
 30  void MacContext::activate()
 31  {
 32      {
 33          StLock<Mutex> _(mActivateMutex);
 34          if (!mActive) 
 35          {
 36              check(CSSM_CSP_CreateMacContext(attachment()->handle(), mAlgorithm,
 37                    mKey, &mHandle));
 38              mActive = true;
 39          }
 40      }
 41  
 42      if (cred())
 43          cred(cred());		// install explicitly
 44  }
 45  
 46  
 47  //
 48  // Signing
 49  //
 50  void GenerateMac::sign(const CssmData *data, uint32 count, CssmData &mac)
 51  {
 52  	unstaged();
 53  	check(CSSM_GenerateMac(handle(), data, count, &mac));
 54  }
 55  
 56  void GenerateMac::init()
 57  {
 58  	check(CSSM_GenerateMacInit(handle()));
 59  	mStaged = true;
 60  }
 61  
 62  void GenerateMac::sign(const CssmData *data, uint32 count)
 63  {
 64  	staged();
 65  	check(CSSM_GenerateMacUpdate(handle(), data, count));
 66  }
 67  
 68  void GenerateMac::operator () (CssmData &mac)
 69  {
 70  	staged();
 71  	check(CSSM_GenerateMacFinal(handle(), &mac));
 72  	mStaged = false;
 73  }
 74  
 75  
 76  //
 77  // Verifying
 78  //
 79  void VerifyMac::verify(const CssmData *data, uint32 count, const CssmData &mac)
 80  {
 81  	unstaged();
 82  	check(CSSM_VerifyMac(handle(), data, count, &mac));
 83  }
 84  
 85  void VerifyMac::init()
 86  {
 87  	check(CSSM_VerifyMacInit(handle()));
 88  	mStaged = true;
 89  }
 90  
 91  void VerifyMac::verify(const CssmData *data, uint32 count)
 92  {
 93  	staged();
 94  	check(CSSM_VerifyMacUpdate(handle(), data, count));
 95  }
 96  
 97  void VerifyMac::operator () (const CssmData &mac)
 98  {
 99  	staged();
100  	check(CSSM_VerifyMacFinal(handle(), &mac));
101  	mStaged = false;
102  }