]> git.saurik.com Git - apple/security.git/blob - OSX/libsecurity_apple_csp/lib/bsobjects.h
Security-57337.40.85.tar.gz
[apple/security.git] / OSX / libsecurity_apple_csp / lib / bsobjects.h
1 /*
2 * Copyright (c) 2000-2001,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 #ifdef BSAFE_CSP_ENABLE
19
20
21 //
22 // bsobjects - C++ adaptations of popular BSafe 4 object types
23 //
24 #ifndef _H_BSOBJECTS
25 #define _H_BSOBJECTS
26
27 #include <security_cdsa_utilities/cssmutilities.h>
28 #include <security_utilities/alloc.h>
29 #include <aglobal.h>
30 #include <bsafe.h>
31
32 //
33 // A PodWrapper for BSafe's ITEM objects
34 //
35 class BSafeItem : public PodWrapper<BSafeItem, ITEM> {
36 public:
37 BSafeItem() { ((ITEM *)this)->data = NULL; len = 0; }
38 BSafeItem(void *addr, size_t sz)
39 { ((ITEM *)this)->data = (unsigned char *)addr; len = sz; }
40 BSafeItem(const CSSM_DATA &cData)
41 { ((ITEM *)this)->data = cData.Data; len = cData.Length; }
42 BSafeItem(const ITEM &cData)
43 { *(ITEM *)this = cData; }
44
45 void operator = (const CssmData &cData)
46 { ((ITEM *)this)->data = (unsigned char *)cData.data(); len = cData.length(); }
47
48 void *data() const { return ((ITEM *)this)->data; }
49 size_t length() const { return len; }
50
51 template <class T>
52 T copy(Allocator &alloc)
53 { return T(memcpy(alloc.malloc(length()), data(), length()), length()); }
54
55 template <class T>
56 T *copyp(Allocator &alloc)
57 { return new(alloc) T(copy<T>(alloc)); }
58
59 void *operator new (size_t size, Allocator &alloc)
60 { return alloc.malloc(size); }
61 };
62
63 #endif //_H_BSOBJECTS
64 #endif /* BSAFE_CSP_ENABLE */