text: /*
   * Copyright (c) 1999-2001,2004,2011,2014 Apple Inc. All Rights Reserved.
   * 
   * @APPLE_LICENSE_HEADER_START@
   * 
   * This file contains Original Code and/or Modifications of Original Code
   * as defined in and that are subject to the Apple Public Source License
   * Version 2.0 (the 'License'). You may not use this file except in
   * compliance with the License. Please obtain a copy of the License at
   * http://www.opensource.apple.com/apsl/ and read it before using this
   * file.
   * 
   * The 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.
   * 
   * @APPLE_LICENSE_HEADER_END@
   *
   * cssmcspi.h -- Service Provider Interface for
   *               Cryptographic Service Provider Modules
   */
  
  #ifndef _CSSMCSPI_H_
  #define _CSSMCSPI_H_  1
  
  #include <Security/cssmspi.h>
  
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  typedef struct cssm_spi_csp_funcs {
      CSSM_RETURN (CSSMCSPI *EventNotify)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CONTEXT_EVENT Event,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_CONTEXT *Context);
      CSSM_RETURN (CSSMCSPI *QuerySize)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_CONTEXT *Context,
           CSSM_BOOL Encrypt,
           uint32 QuerySizeCount,
           CSSM_QUERY_SIZE_DATA_PTR DataBlock);
      CSSM_RETURN (CSSMCSPI *SignData)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_CONTEXT *Context,
           const CSSM_DATA *DataBufs,
           uint32 DataBufCount,
           CSSM_ALGORITHMS DigestAlgorithm,
           CSSM_DATA_PTR Signature);
      CSSM_RETURN (CSSMCSPI *SignDataInit)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_CONTEXT *Context);
      CSSM_RETURN (CSSMCSPI *SignDataUpdate)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_DATA *DataBufs,
           uint32 DataBufCount);
      CSSM_RETURN (CSSMCSPI *SignDataFinal)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           CSSM_DATA_PTR Signature);
      CSSM_RETURN (CSSMCSPI *VerifyData)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_CONTEXT *Context,
           const CSSM_DATA *DataBufs,
           uint32 DataBufCount,
           CSSM_ALGORITHMS DigestAlgorithm,
           const CSSM_DATA *Signature);
      CSSM_RETURN (CSSMCSPI *VerifyDataInit)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_CONTEXT *Context);
      CSSM_RETURN (CSSMCSPI *VerifyDataUpdate)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_DATA *DataBufs,
           uint32 DataBufCount);
      CSSM_RETURN (CSSMCSPI *VerifyDataFinal)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_DATA *Signature);
      CSSM_RETURN (CSSMCSPI *DigestData)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_CONTEXT *Context,
           const CSSM_DATA *DataBufs,
           uint32 DataBufCount,
           CSSM_DATA_PTR Digest);
      CSSM_RETURN (CSSMCSPI *DigestDataInit)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_CONTEXT *Context);
      CSSM_RETURN (CSSMCSPI *DigestDataUpdate)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_DATA *DataBufs,
           uint32 DataBufCount);
      CSSM_RETURN (CSSMCSPI *DigestDataClone)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           CSSM_CC_HANDLE ClonedCCHandle);
      CSSM_RETURN (CSSMCSPI *DigestDataFinal)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           CSSM_DATA_PTR Digest);
      CSSM_RETURN (CSSMCSPI *GenerateMac)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_CONTEXT *Context,
           const CSSM_DATA *DataBufs,
           uint32 DataBufCount,
           CSSM_DATA_PTR Mac);
      CSSM_RETURN (CSSMCSPI *GenerateMacInit)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_CONTEXT *Context);
      CSSM_RETURN (CSSMCSPI *GenerateMacUpdate)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_DATA *DataBufs,
           uint32 DataBufCount);
      CSSM_RETURN (CSSMCSPI *GenerateMacFinal)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           CSSM_DATA_PTR Mac);
      CSSM_RETURN (CSSMCSPI *VerifyMac)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_CONTEXT *Context,
           const CSSM_DATA *DataBufs,
           uint32 DataBufCount,
           const CSSM_DATA *Mac);
      CSSM_RETURN (CSSMCSPI *VerifyMacInit)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_CONTEXT *Context);
      CSSM_RETURN (CSSMCSPI *VerifyMacUpdate)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_DATA *DataBufs,
           uint32 DataBufCount);
      CSSM_RETURN (CSSMCSPI *VerifyMacFinal)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_DATA *Mac);
      CSSM_RETURN (CSSMCSPI *EncryptData)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_CONTEXT *Context,
           const CSSM_DATA *ClearBufs,
           uint32 ClearBufCount,
           CSSM_DATA_PTR CipherBufs,
           uint32 CipherBufCount,
           CSSM_SIZE *bytesEncrypted,
           CSSM_DATA_PTR RemData,
           CSSM_PRIVILEGE Privilege);
      CSSM_RETURN (CSSMCSPI *EncryptDataInit)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_CONTEXT *Context,
           CSSM_PRIVILEGE Privilege);
      CSSM_RETURN (CSSMCSPI *EncryptDataUpdate)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_DATA *ClearBufs,
           uint32 ClearBufCount,
           CSSM_DATA_PTR CipherBufs,
           uint32 CipherBufCount,
           CSSM_SIZE *bytesEncrypted);
      CSSM_RETURN (CSSMCSPI *EncryptDataFinal)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           CSSM_DATA_PTR RemData);
      CSSM_RETURN (CSSMCSPI *DecryptData)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_CONTEXT *Context,
           const CSSM_DATA *CipherBufs,
           uint32 CipherBufCount,
           CSSM_DATA_PTR ClearBufs,
           uint32 ClearBufCount,
           CSSM_SIZE *bytesDecrypted,
           CSSM_DATA_PTR RemData,
           CSSM_PRIVILEGE Privilege);
      CSSM_RETURN (CSSMCSPI *DecryptDataInit)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_CONTEXT *Context,
           CSSM_PRIVILEGE Privilege);
      CSSM_RETURN (CSSMCSPI *DecryptDataUpdate)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_DATA *CipherBufs,
           uint32 CipherBufCount,
           CSSM_DATA_PTR ClearBufs,
           uint32 ClearBufCount,
           CSSM_SIZE *bytesDecrypted);
      CSSM_RETURN (CSSMCSPI *DecryptDataFinal)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           CSSM_DATA_PTR RemData);
      CSSM_RETURN (CSSMCSPI *QueryKeySizeInBits)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_CONTEXT *Context,
           const CSSM_KEY *Key,
           CSSM_KEY_SIZE_PTR KeySize);
      CSSM_RETURN (CSSMCSPI *GenerateKey)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_CONTEXT *Context,
           uint32 KeyUsage,
           uint32 KeyAttr,
           const CSSM_DATA *KeyLabel,
           const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
           CSSM_KEY_PTR Key,
           CSSM_PRIVILEGE Privilege);
      CSSM_RETURN (CSSMCSPI *GenerateKeyPair)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_CONTEXT *Context,
           uint32 PublicKeyUsage,
           uint32 PublicKeyAttr,
           const CSSM_DATA *PublicKeyLabel,
           CSSM_KEY_PTR PublicKey,
           uint32 PrivateKeyUsage,
           uint32 PrivateKeyAttr,
           const CSSM_DATA *PrivateKeyLabel,
           const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
           CSSM_KEY_PTR PrivateKey,
           CSSM_PRIVILEGE Privilege);
     CSSM_RETURN (CSSMCSPI *GenerateRandom)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_CONTEXT *Context,
           CSSM_DATA_PTR RandomNumber);
      CSSM_RETURN (CSSMCSPI *GenerateAlgorithmParams)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_CONTEXT *Context,
           uint32 ParamBits,
           CSSM_DATA_PTR Param,
           uint32 *NumberOfUpdatedAttibutes,
           CSSM_CONTEXT_ATTRIBUTE_PTR *UpdatedAttributes);
      CSSM_RETURN (CSSMCSPI *WrapKey)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_CONTEXT *Context,
           const CSSM_ACCESS_CREDENTIALS *AccessCred,
           const CSSM_KEY *Key,
           const CSSM_DATA *DescriptiveData,
           CSSM_WRAP_KEY_PTR WrappedKey,
           CSSM_PRIVILEGE Privilege);
      CSSM_RETURN (CSSMCSPI *UnwrapKey)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_CONTEXT *Context,
           const CSSM_KEY *PublicKey,
           const CSSM_WRAP_KEY *WrappedKey,
           uint32 KeyUsage,
           uint32 KeyAttr,
           const CSSM_DATA *KeyLabel,
           const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
           CSSM_KEY_PTR UnwrappedKey,
           CSSM_DATA_PTR DescriptiveData,
           CSSM_PRIVILEGE Privilege);
      CSSM_RETURN (CSSMCSPI *DeriveKey)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_CONTEXT *Context,
           CSSM_DATA_PTR Param,
           uint32 KeyUsage,
           uint32 KeyAttr,
           const CSSM_DATA *KeyLabel,
           const CSSM_RESOURCE_CONTROL_CONTEXT *CredAndAclEntry,
           CSSM_KEY_PTR DerivedKey);
      CSSM_RETURN (CSSMCSPI *FreeKey)
          (CSSM_CSP_HANDLE CSPHandle,
           const CSSM_ACCESS_CREDENTIALS *AccessCred,
           CSSM_KEY_PTR KeyPtr,
           CSSM_BOOL Delete);
      CSSM_RETURN (CSSMCSPI *PassThrough)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CC_HANDLE CCHandle,
           const CSSM_CONTEXT *Context,
           uint32 PassThroughId,
           const void *InData,
           void **OutData);
      CSSM_RETURN (CSSMCSPI *Login)
          (CSSM_CSP_HANDLE CSPHandle,
           const CSSM_ACCESS_CREDENTIALS *AccessCred,
           const CSSM_DATA *LoginName,
           const void *Reserved);
      CSSM_RETURN (CSSMCSPI *Logout)
          (CSSM_CSP_HANDLE CSPHandle);
      CSSM_RETURN (CSSMCSPI *ChangeLoginAcl)
          (CSSM_CSP_HANDLE CSPHandle,
           const CSSM_ACCESS_CREDENTIALS *AccessCred,
           const CSSM_ACL_EDIT *AclEdit);
      CSSM_RETURN (CSSMCSPI *ObtainPrivateKeyFromPublicKey)
          (CSSM_CSP_HANDLE CSPHandle,
           const CSSM_KEY *PublicKey,
           CSSM_KEY_PTR PrivateKey);
      CSSM_RETURN (CSSMCSPI *RetrieveUniqueId)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_DATA_PTR UniqueID);
      CSSM_RETURN (CSSMCSPI *RetrieveCounter)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_DATA_PTR Counter);
      CSSM_RETURN (CSSMCSPI *VerifyDevice)
          (CSSM_CSP_HANDLE CSPHandle,
           const CSSM_DATA *DeviceCert);
      CSSM_RETURN (CSSMCSPI *GetTimeValue)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_ALGORITHMS TimeAlgorithm,
           CSSM_DATA *TimeData);
      CSSM_RETURN (CSSMCSPI *GetOperationalStatistics)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_CSP_OPERATIONAL_STATISTICS *Statistics);
      CSSM_RETURN (CSSMCSPI *GetLoginAcl)
          (CSSM_CSP_HANDLE CSPHandle,
           const CSSM_STRING *SelectionTag,
           uint32 *NumberOfAclInfos,
           CSSM_ACL_ENTRY_INFO_PTR *AclInfos);
      CSSM_RETURN (CSSMCSPI *GetKeyAcl)
          (CSSM_CSP_HANDLE CSPHandle,
           const CSSM_KEY *Key,
           const CSSM_STRING *SelectionTag,
           uint32 *NumberOfAclInfos,
           CSSM_ACL_ENTRY_INFO_PTR *AclInfos);
      CSSM_RETURN (CSSMCSPI *ChangeKeyAcl)
          (CSSM_CSP_HANDLE CSPHandle,
           const CSSM_ACCESS_CREDENTIALS *AccessCred,
           const CSSM_ACL_EDIT *AclEdit,
           const CSSM_KEY *Key);
      CSSM_RETURN (CSSMCSPI *GetKeyOwner)
          (CSSM_CSP_HANDLE CSPHandle,
           const CSSM_KEY *Key,
           CSSM_ACL_OWNER_PROTOTYPE_PTR Owner);
      CSSM_RETURN (CSSMCSPI *ChangeKeyOwner)
          (CSSM_CSP_HANDLE CSPHandle,
           const CSSM_ACCESS_CREDENTIALS *AccessCred,
           const CSSM_KEY *Key,
           const CSSM_ACL_OWNER_PROTOTYPE *NewOwner);
      CSSM_RETURN (CSSMCSPI *GetLoginOwner)
          (CSSM_CSP_HANDLE CSPHandle,
           CSSM_ACL_OWNER_PROTOTYPE_PTR Owner);
      CSSM_RETURN (CSSMCSPI *ChangeLoginOwner)
          (CSSM_CSP_HANDLE CSPHandle,
           const CSSM_ACCESS_CREDENTIALS *AccessCred,
           const CSSM_ACL_OWNER_PROTOTYPE *NewOwner);
  } CSSM_SPI_CSP_FUNCS DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER, *CSSM_SPI_CSP_FUNCS_PTR DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
  
  #ifdef __cplusplus
  }
  #endif
  
  #endif /* _CSSMCSPI_H_ */
  