1/*
2 * Copyright (c) 2000-2002,2011,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// clclient - client interface to CSSM CLs and their operations
21//
22#ifndef _H_CDSA_CLIENT_CLCLIENT
23#define _H_CDSA_CLIENT_CLCLIENT  1
24
25#include <security_cdsa_client/cssmclient.h>
26#include <security_cdsa_utilities/cssmcert.h>
27
28
29namespace Security {
30namespace CssmClient {
31
32
33//
34// A CL attachment
35//
36class CLImpl : public AttachmentImpl
37{
38public:
39	CLImpl(const Guid &guid);
40	CLImpl(const Module &module);
41	virtual ~CLImpl();
42
43};
44
45class CL : public Attachment
46{
47public:
48	typedef CLImpl Impl;
49
50	explicit CL(Impl *impl) : Attachment(impl) {}
51	CL(const Guid &guid) : Attachment(new Impl(guid)) {}
52	CL(const Module &module) : Attachment(new Impl(module)) {}
53
54	Impl *operator ->() const { return &impl<Impl>(); }
55	Impl &operator *() const { return impl<Impl>(); }
56};
57
58
59//
60// A self-building CertGroup.
61// This is a CertGroup, but it's NOT A PODWRAPPER (it's larger).
62//
63class BuildCertGroup : public CertGroup {
64public:
65    BuildCertGroup(CSSM_CERT_TYPE ctype, CSSM_CERT_ENCODING encoding,
66        CSSM_CERTGROUP_TYPE type, Allocator &alloc = Allocator::standard());
67
68    CssmVector<CSSM_DATA, CssmData> certificates;
69};
70
71
72} // end namespace CssmClient
73} // end namespace Security
74
75#endif // _H_CDSA_CLIENT_CLCLIENT
76