/* * Copyright (c) 2005-2007,2011-2012,2014 Apple Inc. All Rights Reserved. * * @APPLE_LICENSE_HEADER_START@ * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in * compliance with the License. Please obtain a copy of the License at * http://www.opensource.apple.com/apsl/ and read it before using this * file. * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. * Please see the License for the specific language governing rights and * limitations under the License. * * @APPLE_LICENSE_HEADER_END@ */ /* * libDER_config.h - platform dependent #defines and typedefs for libDER * */ #ifndef _LIB_DER_CONFIG_H_ #define _LIB_DER_CONFIG_H_ #if !defined(EFI) || !EFI #include #include #include #include #else // EFI // This requires $(SDKROOT)/usr/local/efi/include/Platform to be in your header // search path. #include #endif #if (defined(EFI) && EFI) || defined(WIN32) || defined(_MSC_VER) #if defined(__cplusplus) #define __BEGIN_DECLS extern "C" { #define __END_DECLS } #else #define __BEGIN_DECLS #define __END_DECLS #endif #else #include #endif __BEGIN_DECLS /* * Basic data types: unsigned 8-bit integer, unsigned 32-bit integer */ #if !defined(EFI) || !EFI typedef uint8_t DERByte; typedef uint16_t DERShort; typedef uint32_t DERInt; typedef uint64_t DERLong; typedef size_t DERSize; typedef bool DERBool; #else typedef UINT8 DERByte; typedef UINT16 DERShort; typedef UINT32 DERInt; typedef UINT64 DERLong; typedef size_t DERSize; typedef BOOLEAN DERBool; #endif /* * Use these #defines of you have memset, memmove, and memcmp; else * write your own equivalents. */ #if !defined(EFI) || !EFI #define DERMemset(ptr, c, len) memset(ptr, c, len) #define DERMemmove(dst, src, len) memmove(dst, src, len) #define DERMemcmp(b1, b2, len) memcmp(b1, b2, len) #else void *DERMemset(void *b, int c, size_t len); void *DERMemmove(void *dst, const void *src, size_t len); int DERMemcmp(const void *s1, const void *s2, size_t n); #endif /*** *** Compile time options to trim size of the library. ***/ /* enable general DER encode */ #define DER_ENCODE_ENABLE 1 /* enable general DER decode */ #define DER_DECODE_ENABLE 1 #ifndef DER_MULTIBYTE_TAGS /* enable multibyte tag support. */ #define DER_MULTIBYTE_TAGS 1 #endif #ifndef DER_TAG_SIZE /* Iff DER_MULTIBYTE_TAGS is 1 this is the sizeof(DERTag) in bytes. Note that tags are still encoded and decoded from a minimally encoded DER represantation. This value maintains compatibility with libImg4Decode/Encode. */ #define DER_TAG_SIZE 8 #endif /* firebloom-evo defines */ #if !defined(_MSC_VER) && __has_feature(firebloom) #define DER_counted_by(x) __attribute__((counted_by(x))) #define DER_sized_by(x) __attribute__((sized_by(x))) #define DER_ended_by(x) __attribute__((ended_by(x))) #define DER_bidi_indexable __attribute__((bidi_indexable)) #define DER_indexable __attribute__((indexable)) #define DER_single __attribute__((single)) #define DER_unsafe_indexable __attribute__((unsafe_indexable)) #define DER_unsafe_forge_bidi_indexable(P, S) __builtin_unsafe_forge_bidi_indexable(P, S) /* For some prototype patterns that firebloom-evo doesn't handle without * compromise, we ask adopters to use a different entry point. The old * entry point is marked unavailable _only_ in firebloom builds, since * there's nothing wrong with it otherwise. */ #define DER_firebloom_replaced_platform(P, REP) \ __attribute__((availability(P, unavailable, replacement=#REP))) #define DER_firebloom_replaced(REP) \ DER_firebloom_replaced_platform(macosx, REP) \ DER_firebloom_replaced_platform(ios, REP) #else // !__has_feature(firebloom) #define DER_counted_by(x) #define DER_sized_by(x) #define DER_ended_by(x) #define DER_bidi_indexable #define DER_indexable #define DER_single #define DER_unsafe_indexable #define DER_unsafe_forge_bidi_indexable(P, S) (P) #define DER_firebloom_replaced(...) #endif // !__has_feature(firebloom) /* ---------------------- Do not edit below this line ---------------------- */ /* * Logical representation of a tag (the encoded representation is always in * the minimal number of bytes). The top 3 bits encode class and method * The remaining bits encode the tag value. To obtain smaller DERItemSpecs * sizes, choose the smallest type that fits your needs. Most standard ASN.1 * usage only needs single byte tags, but ocasionally custom applications * require a larger tag namespace. */ #if DER_MULTIBYTE_TAGS #if DER_TAG_SIZE == 1 typedef DERByte DERTag; #elif DER_TAG_SIZE == 2 typedef DERShort DERTag; #elif DER_TAG_SIZE == 4 typedef DERInt DERTag; #elif DER_TAG_SIZE == 8 typedef DERLong DERTag; #else #error DER_TAG_SIZE invalid #endif #else /* DER_MULTIBYTE_TAGS */ typedef DERByte DERTag; #endif /* !DER_MULTIBYTE_TAGS */ __END_DECLS #endif /* _LIB_DER_CONFIG_H_ */