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