1/* 2 * Copyright (c) 2004,2008,2010 Apple Inc. All Rights Reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23 24/*! 25 @header SecCmsContentInfo.h 26 @Copyright (c) 2004,2008,2010 Apple Inc. All Rights Reserved. 27 28 @availability 10.4 and later 29 @abstract Interfaces of the CMS implementation. 30 @discussion The functions here implement functions for creating and 31 accessing ContentInfo objects that are part of Cryptographic 32 Message Syntax (CMS) objects as described in rfc3369. 33 */ 34 35#ifndef _SECURITY_SECCMSCONTENTINFO_H_ 36#define _SECURITY_SECCMSCONTENTINFO_H_ 1 37 38#include <Security/SecCmsBase.h> 39#include <CoreFoundation/CFData.h> 40 41 42#if defined(__cplusplus) 43extern "C" { 44#endif 45 46 47/*! @functiongroup ContentInfo accessors */ 48/*! 49 @function 50 @abstract Get content's contentInfo (if it exists). 51 @param cinfo A ContentInfo object of which we want to get the child contentInfo. 52 @result The child ContentInfo object, or NULL if there is none. 53 @discussion This function requires a ContentInfo object which is usually created by decoding and SecCmsMessage using a SecCmsDecoder. 54 @availability 10.4 and later 55 */ 56extern SecCmsContentInfoRef 57SecCmsContentInfoGetChildContentInfo(SecCmsContentInfoRef cinfo); 58 59/*! 60 @function 61 @abstract Get pointer to inner content 62 @discussion needs to be casted... 63 */ 64extern void * 65SecCmsContentInfoGetContent(SecCmsContentInfoRef cinfo); 66 67/*! 68 @function 69 @abstract Get pointer to innermost content 70 @discussion This is typically only called by SecCmsMessageGetContent(). 71 */ 72extern const SecAsn1Item * 73SecCmsContentInfoGetInnerContent(SecCmsContentInfoRef cinfo); 74 75/*! 76 @function 77 @abstract Find out and return the inner content type. 78 */ 79extern SECOidTag 80SecCmsContentInfoGetContentTypeTag(SecCmsContentInfoRef cinfo); 81 82/*! 83 @function 84 @abstract Find out and return the inner content type. 85 @discussion Caches pointer to lookup result for future reference. 86 */ 87extern SecAsn1Oid * 88SecCmsContentInfoGetContentTypeOID(SecCmsContentInfoRef cinfo); 89 90/*! 91 @function 92 @abstract Find out and return the content encryption algorithm tag. 93 */ 94extern SECOidTag 95SecCmsContentInfoGetContentEncAlgTag(SecCmsContentInfoRef cinfo); 96 97/*! 98 @function 99 @abstract Find out and return the content encryption algorithm. 100 @discussion Caches pointer to lookup result for future reference. 101 */ 102extern SECAlgorithmID * 103SecCmsContentInfoGetContentEncAlg(SecCmsContentInfoRef cinfo); 104 105 106/*! @functiongroup Message construction */ 107/*! 108 @function 109 @abstract Set a ContentInfos content to a Data 110 @param cinfo A ContentInfo object of which we want set the content. 111 @param data A CFDataRef or NULL if data will be provided during SecCmsEncoderUpdate calls. 112 @param detached True if the content is to be deattched from the CMS message rather than included within it. 113 @result A result code. See "SecCmsBase.h" for possible results. 114 @discussion This function requires a ContentInfo object which can be made by creating a SecCmsMessage object. 115 @availability 10.4 and later 116 */ 117extern OSStatus 118SecCmsContentInfoSetContentData(SecCmsContentInfoRef cinfo, CFDataRef data, Boolean detached); 119 120/*! 121 @function 122 @abstract Set a ContentInfos content to a SignedData. 123 @param cmsg A Message object to which the cinfo object belongs. 124 @param cinfo A ContentInfo object of which we want set the content. 125 @param sigd A SignedData object to set as the content of the cinfo object. 126 @result A result code. See "SecCmsBase.h" for possible results. 127 @discussion This function requires a ContentInfo object which can be made by creating a SecCmsMessage object and a SignedData which can be made by calling SecCmsSignedDataCreate(). If the call succeeds the passed in SignedData object will be owned by the reciever. The Message object of the SignedData object must be the same as cmsg. 128 @availability 10.4 and later 129 */ 130extern OSStatus 131SecCmsContentInfoSetContentSignedData(SecCmsContentInfoRef cinfo, SecCmsSignedDataRef sigd); 132 133/*! 134 @function 135 @abstract Set a ContentInfos content to a EnvelopedData. 136 @param cmsg A Message object to which the cinfo object belongs. 137 @param cinfo A ContentInfo object of which we want set the content. 138 @param envd A EnvelopedData object to set as the content of the cinfo object. 139 @result A result code. See "SecCmsBase.h" for possible results. 140 @discussion This function requires a ContentInfo object which can be made by creating a SecCmsMessage object and a EnvelopedData which can be made by calling SecCmsEnvelopedDataCreate(). If the call succeeds the passed in EnvelopedData object will be owned by the reciever. The Message object of the EnvelopedData object must be the same as cmsg. 141 @availability 10.4 and later 142 */ 143extern OSStatus 144SecCmsContentInfoSetContentEnvelopedData(SecCmsContentInfoRef cinfo, SecCmsEnvelopedDataRef envd); 145 146/*! 147 @function 148 @abstract Set a ContentInfos content to a DigestedData. 149 @param cmsg A Message object to which the cinfo object belongs. 150 @param cinfo A ContentInfo object of which we want set the content. 151 @param digd A DigestedData object to set as the content of the cinfo object. 152 @result A result code. See "SecCmsBase.h" for possible results. 153 @discussion This function requires a ContentInfo object which can be made by creating a SecCmsMessage object and a DigestedData which can be made by calling SecCmsDigestedDataCreate(). If the call succeeds the passed in DigestedData object will be owned by the reciever. The Message object of the DigestedData object must be the same as cmsg. 154 @availability 10.4 and later 155 */ 156extern OSStatus 157SecCmsContentInfoSetContentDigestedData(SecCmsContentInfoRef cinfo, SecCmsDigestedDataRef digd); 158 159/*! 160 @function 161 @abstract Set a ContentInfos content to a EncryptedData. 162 @param cmsg A Message object to which the cinfo object belongs. 163 @param cinfo A ContentInfo object of which we want set the content. 164 @param encd A EncryptedData object to set as the content of the cinfo object. 165 @result A result code. See "SecCmsBase.h" for possible results. 166 @discussion This function requires a ContentInfo object which can be made by creating a SecCmsMessage object and a EncryptedData which can be made by calling SecCmsEncryptedDataCreate(). If the call succeeds the passed in EncryptedData object will be owned by the reciever. The Message object of the EncryptedData object must be the same as cmsg. 167 @availability 10.4 and later 168 */ 169extern OSStatus 170SecCmsContentInfoSetContentEncryptedData(SecCmsContentInfoRef cinfo, SecCmsEncryptedDataRef encd); 171 172/*! 173 @function 174 */ 175extern OSStatus 176SecCmsContentInfoSetContentEncAlg(SecCmsContentInfoRef cinfo, 177 SECOidTag bulkalgtag, const SecAsn1Item *parameters, int keysize); 178 179/*! 180 @function 181 */ 182extern OSStatus 183SecCmsContentInfoSetContentEncAlgID(SecCmsContentInfoRef cinfo, 184 SECAlgorithmID *algid, int keysize); 185 186/*! 187 @function 188 */ 189extern void 190SecCmsContentInfoSetBulkKey(SecCmsContentInfoRef cinfo, SecSymmetricKeyRef bulkkey); 191 192/*! 193 @function 194 */ 195extern SecSymmetricKeyRef 196SecCmsContentInfoGetBulkKey(SecCmsContentInfoRef cinfo); 197 198/*! 199 @function 200 */ 201extern int 202SecCmsContentInfoGetBulkKeySize(SecCmsContentInfoRef cinfo); 203 204 205#if defined(__cplusplus) 206} 207#endif 208 209#endif /* _SECURITY_SECCMSCONTENTINFO_H_ */ 210