/ OSX / libsecurity_cdsa_utilities / lib / cssmcert.cpp
cssmcert.cpp
 1  /*
 2   * Copyright (c) 2000-2004,2006,2011,2014 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  //
26  // cssmcert - CSSM layer certificate (CL) related objects.
27  //
28  #include <security_cdsa_utilities/cssmcert.h>
29  #include <security_utilities/debugging.h>
30  
31  
32  namespace Security {
33  
34  
35  //
36  // Construct an EncodedCertificate
37  //
38  EncodedCertificate::EncodedCertificate(CSSM_CERT_TYPE type, CSSM_CERT_ENCODING enc,
39  	const CSSM_DATA *data)
40  {
41  	clearPod();
42  	CertType = type;
43  	CertEncoding = enc;
44  	if (data)
45  		CertBlob = *data;
46  }
47  
48  
49  //
50  // Construct an empty CertGroup.
51  //
52  CertGroup::CertGroup(CSSM_CERT_TYPE ctype,
53          CSSM_CERT_ENCODING encoding, CSSM_CERTGROUP_TYPE type)
54  {
55      clearPod();
56      CertType = ctype;
57      CertEncoding = encoding;
58      CertGroupType = type;
59  }
60  
61  
62  //
63  // Free all memory in a CertGroup
64  //
65  void CertGroup::destroy(Allocator &allocator)
66  {
67  	switch (type()) {
68  	case CSSM_CERTGROUP_DATA:
69  		// array of CSSM_DATA elements
70  		for (uint32 n = 0; n < count(); n++)
71  			allocator.free(blobCerts()[n].data());
72  		allocator.free (blobCerts ());
73  		break;
74  	case CSSM_CERTGROUP_ENCODED_CERT:
75  		for (uint32 n = 0; n < count(); n++)
76  			allocator.free(encodedCerts()[n].data());
77  		allocator.free (blobCerts ());
78  		break;
79  	case CSSM_CERTGROUP_PARSED_CERT:
80  		// CSSM_PARSED_CERTS array -- unimplemented
81  	case CSSM_CERTGROUP_CERT_PAIR:
82  		// CSSM_CERT_PAIR array -- unimplemented
83  		break;
84  	}
85  }
86  
87  
88  }	// end namespace Security