X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/4d15aeb193b2c68f1d38666c317f8d3734f5f083..5ba3f43ea354af8ad55bea84372a2bc834d8757c:/EXTERNAL_HEADERS/corecrypto/cc_config.h diff --git a/EXTERNAL_HEADERS/corecrypto/cc_config.h b/EXTERNAL_HEADERS/corecrypto/cc_config.h index 464f32b18..044c8e168 100644 --- a/EXTERNAL_HEADERS/corecrypto/cc_config.h +++ b/EXTERNAL_HEADERS/corecrypto/cc_config.h @@ -45,15 +45,20 @@ */ -//Do not set these macros to 1, unless you are developing/testing for Windows +//Do not set this macros to 1, unless you are developing/testing for Linux under macOS +#define CORECRYPTO_SIMULATE_POSIX_ENVIRONMENT 0 + +//Do not set these macros to 1, unless you are developing/testing for Windows under macOS #define CORECRYPTO_SIMULATE_WINDOWS_ENVIRONMENT 0 -#define CORECRYPTO_HACK_FOR_WINDOWS_DEVELOPMENT 0 //to be removed after port corecrypto to Windows +#define CORECRYPTO_HACK_FOR_WINDOWS_DEVELOPMENT 0 //to be removed after port corecrypto to Windows //this macro is used to turn on/off usage of transparent union in corecrypto //it should be commented out in corecrypto and be used only by the software that use corecrypto //#define CORECRYPTO_DONOT_USE_TRANSPARENT_UNION -#ifdef CORECRYPTO_DONOT_USE_TRANSPARENT_UNION - #define CORECRYPTO_USE_TRANSPARENT_UNION 0 +#if defined(__cplusplus) +#define CORECRYPTO_USE_TRANSPARENT_UNION 0 +#elif defined(CORECRYPTO_DONOT_USE_TRANSPARENT_UNION) + #define CORECRYPTO_USE_TRANSPARENT_UNION !CORECRYPTO_DONOT_USE_TRANSPARENT_UNION #else #define CORECRYPTO_USE_TRANSPARENT_UNION 1 #endif @@ -76,9 +81,7 @@ #define CC_KERNEL 0 #endif -// LINUX_BUILD_TEST is for sanity check of the configuration -// > xcodebuild -scheme "corecrypto_test" OTHER_CFLAGS="$(values) -DLINUX_BUILD_TEST" -#if defined(__linux__) || defined(LINUX_BUILD_TEST) +#if defined(__linux__) || CORECRYPTO_SIMULATE_POSIX_ENVIRONMENT #define CC_LINUX 1 #else #define CC_LINUX 0 @@ -90,6 +93,12 @@ #define CC_USE_L4 0 #endif +#if defined(RTKIT) && (RTKIT) + #define CC_RTKIT 1 +#else + #define CC_RTKIT 0 +#endif + #if defined(USE_SEPROM) && (USE_SEPROM) #define CC_USE_SEPROM 1 #else @@ -120,20 +129,32 @@ #define CC_IBOOT 0 #endif -// BB configuration +// Defined by the XNU build scripts +// Applies to code embedded in XNU but NOT to the kext +#if defined(XNU_KERNEL_PRIVATE) + #define CC_XNU_KERNEL_PRIVATE 1 +#else + #define CC_XNU_KERNEL_PRIVATE 0 +#endif + +// handle unaligned data, if the cpu cannot. Currently for gladman AES and the C version of the SHA256 +#define CC_HANDLE_UNALIGNED_DATA CC_BASEBAND + +// BaseBand configuration #if CC_BASEBAND // -- ENDIANESS +#if !defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__) #if defined(ENDIAN_LITTLE) || (defined(__arm__) && !defined(__BIG_ENDIAN)) #define __LITTLE_ENDIAN__ #elif !defined(ENDIAN_BIG) && !defined(__BIG_ENDIAN) #error Baseband endianess not defined. #endif #define AESOPT_ENDIAN_NO_FILE +#endif // -- Architecture #define CCN_UNIT_SIZE 4 // 32 bits - #define SAFE_IO // AES support for unaligned Input/Output // -- External function #define assert ASSERT // sanity @@ -143,21 +164,27 @@ // #1254-D: arithmetic on pointer to void or function type // #186-D: pointless comparison of unsigned integer with zero // #546-D: transfer of control bypasses initialization of - #if defined(__GNUC__) + #ifdef __arm__ + #pragma diag_suppress 186, 1254,546 + #elif defined(__GNUC__) // warning: pointer of type 'void *' used in arithmetic #pragma GCC diagnostic ignored "-Wpointer-arith" - #endif // arm or gnuc - + #endif // __arm__ #endif // CC_BASEBAND //CC_XNU_KERNEL_AVAILABLE indicates the availibity of XNU kernel functions, //like what we have on OSX, iOS, tvOS, Watch OS -#if defined(__APPLE__) && defined(__MACH__) +#if defined(__APPLE__) && defined(__MACH__) #define CC_XNU_KERNEL_AVAILABLE 1 #else #define CC_XNU_KERNEL_AVAILABLE 0 #endif +//arm arch64 definition for gcc +#if defined(__GNUC__) && defined(__aarch64__) && !defined(__arm64__) + #define __arm64__ +#endif + #if !defined(CCN_UNIT_SIZE) #if defined(__arm64__) || defined(__x86_64__) || defined(_WIN64) #define CCN_UNIT_SIZE 8 @@ -192,16 +219,35 @@ #endif #endif -#if __clang__ || CCN_UNIT_SIZE==8 - #define CC_ALIGNED(x) __attribute__ ((aligned(x))) -#elif _MSC_VER - #define CC_ALIGNED(x) __declspec(align(x)) +#if defined(_MSC_VER) + #if defined(__clang__) + #define CC_ALIGNED(x) __attribute__ ((aligned(x))) //clang compiler + #else + #define CC_ALIGNED(x) __declspec(align(x)) //MS complier + #endif #else - #define CC_ALIGNED(x) __attribute__ ((aligned((x)>8?8:(x)))) + #if __clang__ || CCN_UNIT_SIZE==8 + #define CC_ALIGNED(x) __attribute__ ((aligned(x))) + #else + #define CC_ALIGNED(x) __attribute__ ((aligned((x)>8?8:(x)))) + #endif #endif +#if defined(__arm__) +//this is copied from , because is not available on SEPROM environment + #if defined (__ARM_ARCH_7A__) || defined (__ARM_ARCH_7S__) || defined (__ARM_ARCH_7F__) || defined (__ARM_ARCH_7K__) + #define _ARM_ARCH_7 + #endif + + #if defined(__ARM_ARCH_6M__) || defined(__TARGET_ARCH_6S_M) || defined (__armv6m__) + #define _ARM_ARCH_6M + #endif +#endif -#if defined(__x86_64__) || defined(__i386__) +#if defined(__arm64__) || defined(__arm__) + #define CCN_IOS 1 + #define CCN_OSX 0 +#elif defined(__x86_64__) || defined(__i386__) #define CCN_IOS 0 #define CCN_OSX 1 #endif @@ -213,17 +259,15 @@ #endif #if !defined(CC_USE_HEAP_FOR_WORKSPACE) - #if CC_USE_L4 || CC_IBOOT || defined(_MSC_VER) - /* For L4, stack is too short, need to use HEAP for some computations */ - /* CC_USE_HEAP_FOR_WORKSPACE not supported for KERNEL! */ - #define CC_USE_HEAP_FOR_WORKSPACE 1 - #else + #if CC_USE_S3 || CC_USE_SEPROM || CC_RTKIT #define CC_USE_HEAP_FOR_WORKSPACE 0 + #else + #define CC_USE_HEAP_FOR_WORKSPACE 1 #endif #endif /* memset_s is only available in few target */ -#if CC_KERNEL || CC_USE_SEPROM || defined(__CC_ARM) \ +#if CC_USE_SEPROM || defined(__CC_ARM) \ || defined(__hexagon__) || CC_EFI #define CC_HAS_MEMSET_S 0 #else @@ -237,8 +281,7 @@ #endif /* __has_include() */ #endif /* defined(__has_include) */ -// Disable FIPS key gen algorithm on userland and kext so that related POST -// is skipped and boot time is reduced +// Disable RSA Keygen on iBridge #if defined(TARGET_OS_BRIDGE) && TARGET_OS_BRIDGE && CC_KERNEL #define CC_DISABLE_RSAKEYGEN 1 /* for iBridge */ #else @@ -247,13 +290,14 @@ //- functions implemented in assembly ------------------------------------------ //this the list of corecrypto clients that use assembly and the clang compiler -#if !(CC_XNU_KERNEL_AVAILABLE || CC_KERNEL || CC_USE_L4 || CC_IBOOT || CC_USE_SEPROM || CC_USE_S3) && !defined(_WIN32) && CORECRYPTO_DEBUG +#if !(CC_XNU_KERNEL_AVAILABLE || CC_KERNEL || CC_USE_L4 || CC_IBOOT || CC_RTKIT || CC_USE_SEPROM || CC_USE_S3) && !defined(_WIN32) && CORECRYPTO_DEBUG #warning "You are using the default corecrypto configuration, assembly optimizations may not be available for your platform" #endif -// use this macro to strictly disable assembly regardless of cpu/os/compiler/etc +// Use this macro to strictly disable assembly regardless of cpu/os/compiler/etc. +// Our assembly code is not gcc compatible. Clang defines the __GNUC__ macro as well. #if !defined(CC_USE_ASM) - #if defined(_MSC_VER) || CC_LINUX || CC_EFI || CC_BASEBAND + #if defined(_WIN32) || CC_EFI || CC_BASEBAND || CC_XNU_KERNEL_PRIVATE || (defined(__GNUC__) && !defined(__clang__)) || defined(__ANDROID_API__) #define CC_USE_ASM 0 #else #define CC_USE_ASM 1 @@ -277,7 +321,7 @@ #define CCN_SHIFT_RIGHT_ASM 1 #define CCAES_ARM_ASM 1 #define CCAES_INTEL_ASM 0 - #if CC_KERNEL || CC_USE_L4 || CC_IBOOT || CC_USE_SEPROM || CC_USE_S3 + #if CC_KERNEL || CC_USE_L4 || CC_IBOOT || CC_RTKIT || CC_USE_SEPROM || CC_USE_S3 #define CCAES_MUX 0 #else #define CCAES_MUX 1 @@ -296,6 +340,31 @@ #define CCSHA256_ARMV6M_ASM 0 //-(2) ARM 64 +#elif defined(__arm64__) && __clang__ && CC_USE_ASM + #define CCN_DEDICATED_SQR 1 + #define CCN_MUL_KARATSUBA 1 // 4*n CCN_UNIT extra memory required. + #define CCN_ADD_ASM 1 + #define CCN_SUB_ASM 1 + #define CCN_MUL_ASM 1 + #define CCN_ADDMUL1_ASM 0 + #define CCN_MUL1_ASM 0 + #define CCN_CMP_ASM 1 + #define CCN_ADD1_ASM 0 + #define CCN_SUB1_ASM 0 + #define CCN_N_ASM 1 + #define CCN_SET_ASM 0 + #define CCN_SHIFT_RIGHT_ASM 1 + #define CCAES_ARM_ASM 1 + #define CCAES_INTEL_ASM 0 + #define CCAES_MUX 0 // On 64bit SoC, asm is much faster than HW + #define CCN_USE_BUILTIN_CLZ 1 + #define CCSHA1_VNG_INTEL 0 + #define CCSHA2_VNG_INTEL 0 + #define CCSHA1_VNG_ARMV7NEON 1 // reused this to avoid making change to xcode project, put arm64 assembly code with armv7 code + #define CCSHA2_VNG_ARMV7NEON 1 + #define CCSHA256_ARMV6M_ASM 0 + +//-(3) Intel 32/64 #elif (defined(__x86_64__) || defined(__i386__)) && __clang__ && CC_USE_ASM #define CCN_DEDICATED_SQR 1 #define CCN_MUL_KARATSUBA 1 // 4*n CCN_UNIT extra memory required. @@ -431,5 +500,11 @@ #define CC_MALLOC #endif /* !__GNUC__ */ +// Enable FIPSPOST function tracing only when supported. */ +#ifdef CORECRYPTO_POST_TRACE +#define CC_FIPSPOST_TRACE 1 +#else +#define CC_FIPSPOST_TRACE 0 +#endif #endif /* _CORECRYPTO_CC_CONFIG_H_ */