1//
2//  der_plist_internal.h
3//  utilities
4//
5//  Created by Mitch Adler on 7/2/12.
6//  Copyright (c) 2012 Apple Inc. All rights reserved.
7//
8
9#ifndef _DER_PLIST_INTERNAL_H_
10#define _DER_PLIST_INTERNAL_H_
11
12#include <CoreFoundation/CoreFoundation.h>
13
14void SecCFDERCreateError(CFIndex errorCode, CFStringRef descriptionString, CFErrorRef previousError, CFErrorRef *newError);
15
16
17// CFArray <-> DER
18size_t der_sizeof_array(CFArrayRef array, CFErrorRef *error);
19
20uint8_t* der_encode_array(CFArrayRef array, CFErrorRef *error,
21                          const uint8_t *der, uint8_t *der_end);
22
23const uint8_t* der_decode_array(CFAllocatorRef allocator, CFOptionFlags mutability,
24                                CFArrayRef* array, CFErrorRef *error,
25                                const uint8_t* der, const uint8_t *der_end);
26
27// CFNull <-> DER
28size_t der_sizeof_null(CFNullRef	nul, CFErrorRef *error);
29
30uint8_t* der_encode_null(CFNullRef	nul, CFErrorRef *error,
31                            const uint8_t *der, uint8_t *der_end);
32
33const uint8_t* der_decode_null(CFAllocatorRef allocator, CFOptionFlags mutability,
34                                  CFNullRef	*nul, CFErrorRef *error,
35                                  const uint8_t* der, const uint8_t *der_end);
36
37
38// CFBoolean <-> DER
39size_t der_sizeof_boolean(CFBooleanRef boolean, CFErrorRef *error);
40
41uint8_t* der_encode_boolean(CFBooleanRef boolean, CFErrorRef *error,
42                            const uint8_t *der, uint8_t *der_end);
43
44const uint8_t* der_decode_boolean(CFAllocatorRef allocator, CFOptionFlags mutability,
45                                  CFBooleanRef* boolean, CFErrorRef *error,
46                                  const uint8_t* der, const uint8_t *der_end);
47
48// CFData <-> DER
49size_t der_sizeof_data(CFDataRef data, CFErrorRef *error);
50
51uint8_t* der_encode_data(CFDataRef data, CFErrorRef *error,
52                         const uint8_t *der, uint8_t *der_end);
53
54const uint8_t* der_decode_data(CFAllocatorRef allocator, CFOptionFlags mutability,
55                               CFDataRef* data, CFErrorRef *error,
56                               const uint8_t* der, const uint8_t *der_end);
57
58const 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);
61
62
63// CFDate <-> DER
64size_t der_sizeof_date(CFDateRef date, CFErrorRef *error);
65
66uint8_t* der_encode_date(CFDateRef date, CFErrorRef *error,
67                         const uint8_t *der, uint8_t *der_end);
68
69const uint8_t* der_decode_date(CFAllocatorRef allocator, CFOptionFlags mutability,
70                               CFDateRef* date, CFErrorRef *error,
71                               const uint8_t* der, const uint8_t *der_end);
72
73
74// CFDictionary <-> DER
75size_t der_sizeof_dictionary(CFDictionaryRef dictionary, CFErrorRef *error);
76
77uint8_t* der_encode_dictionary(CFDictionaryRef dictionary, CFErrorRef *error,
78                               const uint8_t *der, uint8_t *der_end);
79
80const uint8_t* der_decode_dictionary(CFAllocatorRef allocator, CFOptionFlags mutability,
81                                     CFDictionaryRef* dictionary, CFErrorRef *error,
82                                     const uint8_t* der, const uint8_t *der_end);
83
84// CFNumber <-> DER
85// Currently only supports signed 64 bit values. No floating point.
86size_t der_sizeof_number(CFNumberRef number, CFErrorRef *error);
87
88uint8_t* der_encode_number(CFNumberRef number, CFErrorRef *error,
89                           const uint8_t *der, uint8_t *der_end);
90
91const uint8_t* der_decode_number(CFAllocatorRef allocator, CFOptionFlags mutability,
92                                 CFNumberRef* number, CFErrorRef *error,
93                                 const uint8_t* der, const uint8_t *der_end);
94
95// CFString <-> DER
96size_t der_sizeof_string(CFStringRef string, CFErrorRef *error);
97
98uint8_t* der_encode_string(CFStringRef string, CFErrorRef *error,
99                           const uint8_t *der, uint8_t *der_end);
100
101const uint8_t* der_decode_string(CFAllocatorRef allocator, CFOptionFlags mutability,
102                                 CFStringRef* string, CFErrorRef *error,
103                                 const uint8_t* der, const uint8_t *der_end);
104
105#endif
106