2 // der_plist_internal.h
5 // Created by Mitch Adler on 7/2/12.
6 // Copyright (c) 2012 Apple Inc. All rights reserved.
9 #ifndef _DER_PLIST_INTERNAL_H_
10 #define _DER_PLIST_INTERNAL_H_
12 #include <CoreFoundation/CoreFoundation.h>
14 void SecCFDERCreateError(CFIndex errorCode
, CFStringRef descriptionString
, CFErrorRef previousError
, CFErrorRef
*newError
);
18 size_t der_sizeof_array(CFArrayRef array
, CFErrorRef
*error
);
20 uint8_t* der_encode_array(CFArrayRef array
, CFErrorRef
*error
,
21 const uint8_t *der
, uint8_t *der_end
);
23 const uint8_t* der_decode_array(CFAllocatorRef allocator
, CFOptionFlags mutability
,
24 CFArrayRef
* array
, CFErrorRef
*error
,
25 const uint8_t* der
, const uint8_t *der_end
);
28 size_t der_sizeof_null(CFNullRef nul
, CFErrorRef
*error
);
30 uint8_t* der_encode_null(CFNullRef nul
, CFErrorRef
*error
,
31 const uint8_t *der
, uint8_t *der_end
);
33 const uint8_t* der_decode_null(CFAllocatorRef allocator
, CFOptionFlags mutability
,
34 CFNullRef
*nul
, CFErrorRef
*error
,
35 const uint8_t* der
, const uint8_t *der_end
);
39 size_t der_sizeof_boolean(CFBooleanRef boolean
, CFErrorRef
*error
);
41 uint8_t* der_encode_boolean(CFBooleanRef boolean
, CFErrorRef
*error
,
42 const uint8_t *der
, uint8_t *der_end
);
44 const uint8_t* der_decode_boolean(CFAllocatorRef allocator
, CFOptionFlags mutability
,
45 CFBooleanRef
* boolean
, CFErrorRef
*error
,
46 const uint8_t* der
, const uint8_t *der_end
);
49 size_t der_sizeof_data(CFDataRef data
, CFErrorRef
*error
);
51 uint8_t* der_encode_data(CFDataRef data
, CFErrorRef
*error
,
52 const uint8_t *der
, uint8_t *der_end
);
54 const uint8_t* der_decode_data(CFAllocatorRef allocator
, CFOptionFlags mutability
,
55 CFDataRef
* data
, CFErrorRef
*error
,
56 const uint8_t* der
, const uint8_t *der_end
);
58 const uint8_t* der_decode_data_mutable(CFAllocatorRef allocator
, CFOptionFlags mutability
,
59 CFMutableDataRef
* data
, CFErrorRef
*error
,
60 const uint8_t* der
, const uint8_t *der_end
);
64 size_t der_sizeof_date(CFDateRef date
, CFErrorRef
*error
);
66 uint8_t* der_encode_date(CFDateRef date
, CFErrorRef
*error
,
67 const uint8_t *der
, uint8_t *der_end
);
69 const uint8_t* der_decode_date(CFAllocatorRef allocator
, CFOptionFlags mutability
,
70 CFDateRef
* date
, CFErrorRef
*error
,
71 const uint8_t* der
, const uint8_t *der_end
);
74 // CFDictionary <-> DER
75 size_t der_sizeof_dictionary(CFDictionaryRef dictionary
, CFErrorRef
*error
);
77 uint8_t* der_encode_dictionary(CFDictionaryRef dictionary
, CFErrorRef
*error
,
78 const uint8_t *der
, uint8_t *der_end
);
80 const uint8_t* der_decode_dictionary(CFAllocatorRef allocator
, CFOptionFlags mutability
,
81 CFDictionaryRef
* dictionary
, CFErrorRef
*error
,
82 const uint8_t* der
, const uint8_t *der_end
);
85 // Currently only supports signed 64 bit values. No floating point.
86 size_t der_sizeof_number(CFNumberRef number
, CFErrorRef
*error
);
88 uint8_t* der_encode_number(CFNumberRef number
, CFErrorRef
*error
,
89 const uint8_t *der
, uint8_t *der_end
);
91 const uint8_t* der_decode_number(CFAllocatorRef allocator
, CFOptionFlags mutability
,
92 CFNumberRef
* number
, CFErrorRef
*error
,
93 const uint8_t* der
, const uint8_t *der_end
);
96 size_t der_sizeof_string(CFStringRef string
, CFErrorRef
*error
);
98 uint8_t* der_encode_string(CFStringRef string
, CFErrorRef
*error
,
99 const uint8_t *der
, uint8_t *der_end
);
101 const uint8_t* der_decode_string(CFAllocatorRef allocator
, CFOptionFlags mutability
,
102 CFStringRef
* string
, CFErrorRef
*error
,
103 const uint8_t* der
, const uint8_t *der_end
);