/******************************************************************************* * Copyright 1999-2018 Intel Corporation * All Rights Reserved. * * If this software was obtained under the Intel Simplified Software License, * the following terms apply: * * The source code, information and material ("Material") contained herein is * owned by Intel Corporation or its suppliers or licensors, and title to such * Material remains with Intel Corporation or its suppliers or licensors. The * Material contains proprietary information of Intel or its suppliers and * licensors. The Material is protected by worldwide copyright laws and treaty * provisions. No part of the Material may be used, copied, reproduced, * modified, published, uploaded, posted, transmitted, distributed or disclosed * in any way without Intel's prior express written permission. No license under * any patent, copyright or other intellectual property rights in the Material * is granted to or conferred upon you, either expressly, by implication, * inducement, estoppel or otherwise. Any license under such intellectual * property rights must be express and approved by Intel in writing. * * Unless otherwise agreed by Intel in writing, you may not remove or alter this * notice or any other notice embedded in Materials by Intel or Intel's * suppliers or licensors in any way. * * * If this software was obtained under the Apache License, Version 2.0 (the * "License"), the following terms apply: * * You may not use this file except in compliance with the License. You may * obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 * * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * * See the License for the specific language governing permissions and * limitations under the License. *******************************************************************************/ /******* FILE MODIFIED FROM ORIGINAL 2019u1 RELEASE TO AVOID WARNINGS *********/ // // Intel(R) Integrated Performance Primitives (Intel(R) IPP) Cryptography // // Purpose: // Internal definitions // // #ifndef __OWNDEFS_H__ #define __OWNDEFS_H__ #if defined( _VXWORKS ) #include <vxWorks.h> #undef NONE #endif #ifndef IPPCPDEFS_H__ #include "ippcpdefs.h" #endif #if defined(__INTEL_COMPILER) || defined(_MSC_VER) #define __INLINE static __inline #elif defined( __GNUC__ ) #define __INLINE static __inline__ #else #define __INLINE static #endif #if defined(__INTEL_COMPILER) #define __RESTRICT restrict #elif !defined( __RESTRICT ) #define __RESTRICT #endif #if defined( IPP_W32DLL ) #if defined( _MSC_VER ) || defined( __INTEL_COMPILER ) #define IPPDEF(type) __declspec(dllexport) type #else #define IPPDEF(type) type #endif #else #define IPPDEF(type) type #endif /* structure represeting 128 bit unsigned integer type */ typedef struct{ Ipp64u low; Ipp64u high; }Ipp128u; /* ia32 */ #define _IPP_PX 0 /* pure C-code */ #define _IPP_M5 1 /* Intel(R) Quark(TM) processor */ #define _IPP_W7 8 /* Intel(R) Streaming SIMD Extensions 2 (Intel(R) SSE2) */ #define _IPP_T7 16 /* Intel(R) Streaming SIMD Extensions 3 (Intel(R) SSE3) */ #define _IPP_V8 32 /* Supplemental Streaming SIMD Extensions 3 (SSSE3) */ #define _IPP_S8 33 /* Supplemental Streaming SIMD Extensions 3 (SSSE3) + MOVBE instruction */ #define _IPP_P8 64 /* Intel(R) Streaming SIMD Extensions 4.2 (Intel(R) SSE4.2) */ #define _IPP_G9 128 /* Intel(R) Advanced Vector Extensions (Intel(R) AVX) */ #define _IPP_H9 256 /* Intel(R) Advanced Vector Extensions 2 (Intel(R) AVX2) */ #define _IPP_I0 512 /* Intel(R) Advanced Vector Extensions 512 (Intel(R) AVX512) - Intel(R) Xeon Phi(TM) Processor (formerly Knights Landing) */ #define _IPP_S0 1024 /* Intel(R) Advanced Vector Extensions 512 (Intel(R) AVX512) - Intel(R) Xeon(R) Processor (formerly codenamed Skylake) */ /* intel64 */ #define _IPP32E_PX _IPP_PX /* pure C-code */ #define _IPP32E_M7 32 /* Intel(R) Streaming SIMD Extensions 3 (Intel(R) SSE3) */ #define _IPP32E_U8 64 /* Supplemental Streaming SIMD Extensions 3 (SSSE3) */ #define _IPP32E_N8 65 /* Supplemental Streaming SIMD Extensions 3 (SSSE3) + MOVBE instruction */ #define _IPP32E_Y8 128 /* Intel(R) Streaming SIMD Extensions 4.2 (Intel(R) SSE4.2) */ #define _IPP32E_E9 256 /* Intel(R) Advanced Vector Extensions (Intel(R) AVX) */ #define _IPP32E_L9 512 /* Intel(R) Advanced Vector Extensions 2 (Intel(R) AVX2) */ #define _IPP32E_N0 1024 /* Intel(R) Advanced Vector Extensions 512 (Intel(R) AVX512) - Intel(R) Xeon Phi(TM) Processor (formerly Knights Landing) */ #define _IPP32E_K0 2048 /* Intel(R) Advanced Vector Extensions 512 (Intel(R) AVX512) - Intel(R) Xeon(R) Processor (formerly codenamed Skylake) */ #if defined(__INTEL_COMPILER) || (_MSC_VER >= 1300) #define __ALIGN8 __declspec (align(8)) #define __ALIGN16 __declspec (align(16)) #define __ALIGN32 __declspec (align(32)) #define __ALIGN64 __declspec (align(64)) #elif defined(__GNUC__) #define __ALIGN8 __attribute__((aligned(8))) #define __ALIGN16 __attribute__((aligned(16))) #define __ALIGN32 __attribute__((aligned(32))) #define __ALIGN64 __attribute__((aligned(64))) #else #error Intel, MS or GNU C compiler required #endif /* ia32 */ #if defined ( _M5 ) /* Intel(R) Quark(TM) processor */ #define _IPP _IPP_M5 #define _IPP32E _IPP32E_PX #define OWNAPI(name) m5_##name #elif defined( _W7 ) /* Intel(R) SSE2 */ #define _IPP _IPP_W7 #define _IPP32E _IPP32E_PX #define OWNAPI(name) w7_##name #elif defined( _T7 ) /* Intel(R) SSE3 */ #define _IPP _IPP_T7 #define _IPP32E _IPP32E_PX #define OWNAPI(name) t7_##name #elif defined( _V8 ) /* SSSE3 */ #define _IPP _IPP_V8 #define _IPP32E _IPP32E_PX #define OWNAPI(name) v8_##name #elif defined( _S8 ) /* SSSE3 + MOVBE instruction */ #define _IPP _IPP_S8 #define _IPP32E _IPP32E_PX #define OWNAPI(name) s8_##name #elif defined( _P8 ) /* Intel(R) SSE4.2 */ #define _IPP _IPP_P8 #define _IPP32E _IPP32E_PX #define OWNAPI(name) p8_##name #elif defined( _G9 ) /* Intel(R) AVX */ #define _IPP _IPP_G9 #define _IPP32E _IPP32E_PX #define OWNAPI(name) g9_##name #elif defined( _H9 ) /* Intel(R) AVX2 */ #define _IPP _IPP_H9 #define _IPP32E _IPP32E_PX #define OWNAPI(name) h9_##name /* intel64 */ #elif defined( _M7 ) /* Intel(R) SSE3 */ #define _IPP _IPP_PX #define _IPP32E _IPP32E_M7 #define OWNAPI(name) m7_##name #elif defined( _U8 ) /* SSSE3 */ #define _IPP _IPP_PX #define _IPP32E _IPP32E_U8 #define OWNAPI(name) u8_##name #elif defined( _N8 ) /* SSSE3 + MOVBE instruction */ #define _IPP _IPP_PX #define _IPP32E _IPP32E_N8 #define OWNAPI(name) n8_##name #elif defined( _Y8 ) /* Intel(R) SSE4.2 */ #define _IPP _IPP_PX #define _IPP32E _IPP32E_Y8 #define OWNAPI(name) y8_##name #elif defined( _E9 ) /* Intel(R) AVX */ #define _IPP _IPP_PX #define _IPP32E _IPP32E_E9 #define OWNAPI(name) e9_##name #elif defined( _L9 ) /* Intel(R) AVX2 */ #define _IPP _IPP_PX #define _IPP32E _IPP32E_L9 #define OWNAPI(name) l9_##name #elif defined( _N0 ) /* Intel(R) AVX512 - formerly Knights Landing */ #define _IPP _IPP_PX #define _IPP32E _IPP32E_N0 #define OWNAPI(name) n0_##name #elif defined( _K0 ) /* Intel(R) AVX512 - formerly codenamed Skylake */ #define _IPP _IPP_PX #define _IPP32E _IPP32E_K0 #define OWNAPI(name) k0_##name #else #define _IPP _IPP_PX #define _IPP32E _IPP32E_PX #if defined (_M_AMD64) || defined (__x86_64__) || defined ( _ARCH_EM64T ) #define OWNAPI(name) mx_##name #else #define OWNAPI(name) px_##name #endif #endif #ifndef _OWN_MERGED_BLD #undef OWNAPI #define OWNAPI(name) name #endif #if defined( IPP_W32DLL ) #if defined( _MSC_VER ) || defined( __INTEL_COMPILER ) #define IPPFUN(type,name,arg) __declspec(dllexport) type IPP_STDCALL name arg #else #define IPPFUN(type,name,arg) extern type IPP_STDCALL name arg #endif #else #define IPPFUN(type,name,arg) extern type IPP_STDCALL name arg #endif #define _IPP_ARCH_IA32 1 #define _IPP_ARCH_EM64T 4 #if defined ( _ARCH_IA32 ) #define _IPP_ARCH _IPP_ARCH_IA32 #elif defined( _ARCH_EM64T ) #define _IPP_ARCH _IPP_ARCH_EM64T #else #if defined(_M_AMD64) || defined(__x86_64) || defined(__x86_64__) #define _IPP_ARCH _IPP_ARCH_EM64T #else #define _IPP_ARCH _IPP_ARCH_IA32 #endif #endif #if ((_IPP_ARCH == _IPP_ARCH_IA32)) __INLINE Ipp32s IPP_INT_PTR( const void* ptr ) { union { void* Ptr; Ipp32s Int; } dd; dd.Ptr = (void*)ptr; return dd.Int; } __INLINE Ipp32u IPP_UINT_PTR( const void* ptr ) { union { void* Ptr; Ipp32u Int; } dd; dd.Ptr = (void*)ptr; return dd.Int; } #elif ((_IPP_ARCH == _IPP_ARCH_EM64T) || (_IPP_ARCH == _IPP_ARCH_LRB2)) __INLINE Ipp64s IPP_INT_PTR( const void* ptr ) { union { void* Ptr; Ipp64s Int; } dd; dd.Ptr = (void*)ptr; return dd.Int; } __INLINE Ipp64u IPP_UINT_PTR( const void* ptr ) { union { void* Ptr; Ipp64u Int; } dd; dd.Ptr = (void*)ptr; return dd.Int; } #else #define IPP_INT_PTR( ptr ) ( (long)(ptr) ) #define IPP_UINT_PTR( ptr ) ( (unsigned long)(ptr) ) #endif #define IPP_ALIGN_TYPE(type, align) ((align)/sizeof(type)-1) #define IPP_BYTES_TO_ALIGN(ptr, align) ((-(IPP_INT_PTR(ptr)&((align)-1)))&((align)-1)) #define IPP_ALIGNED_PTR(ptr, align) (void*)( (unsigned char*)(ptr) + (IPP_BYTES_TO_ALIGN( ptr, align )) ) #define IPP_ALIGNED_SIZE(size, align) (((size)+(align)-1)&~((align)-1)) #define IPP_MALLOC_ALIGNED_BYTES 64 #define IPP_MALLOC_ALIGNED_8BYTES 8 #define IPP_MALLOC_ALIGNED_16BYTES 16 #define IPP_MALLOC_ALIGNED_32BYTES 32 #define IPP_ALIGNED_ARRAY(align,arrtype,arrname,arrlength)\ char arrname##AlignedArrBuff[sizeof(arrtype)*(arrlength)+IPP_ALIGN_TYPE(char, align)];\ arrtype *arrname = (arrtype*)IPP_ALIGNED_PTR(arrname##AlignedArrBuff,align) #if defined( __cplusplus ) extern "C" { #endif /* ///////////////////////////////////////////////////////////////////////////// Intel(R) IPP Context Identification /////////////////////////////////////////////////////////////////////////// */ #define IPP_CONTEXT( a, b, c, d) \ (int)(((unsigned)(a) << 24) | ((unsigned)(b) << 16) | \ ((unsigned)(c) << 8) | (unsigned)(d)) typedef enum { idCtxUnknown = 0, idCtxDES = IPP_CONTEXT( ' ', 'D', 'E', 'S'), idCtxRijndael = IPP_CONTEXT( ' ', 'R', 'I', 'J'), idCtxSMS4 = IPP_CONTEXT( 'S', 'M', 'S', '4'), idCtxARCFOUR = IPP_CONTEXT( ' ', 'R', 'C', '4'), idCtxSHA1 = IPP_CONTEXT( 'S', 'H', 'S', '1'), idCtxSHA224 = IPP_CONTEXT( 'S', 'H', 'S', '3'), idCtxSHA256 = IPP_CONTEXT( 'S', 'H', 'S', '2'), idCtxSHA384 = IPP_CONTEXT( 'S', 'H', 'S', '4'), idCtxSHA512 = IPP_CONTEXT( 'S', 'H', 'S', '5'), idCtxMD5 = IPP_CONTEXT( ' ', 'M', 'D', '5'), idCtxHMAC = IPP_CONTEXT( 'H', 'M', 'A', 'C'), idCtxBigNum = IPP_CONTEXT( 'B', 'I', 'G', 'N'), idCtxMontgomery = IPP_CONTEXT( 'M', 'O', 'N', 'T'), idCtxPrimeNumber = IPP_CONTEXT( 'P', 'R', 'I', 'M'), idCtxPRNG = IPP_CONTEXT( 'P', 'R', 'N', 'G'), idCtxRSA = IPP_CONTEXT( ' ', 'R', 'S', 'A'), idCtxRSA_PubKey = IPP_CONTEXT( 'R', 'S', 'A', '0'), idCtxRSA_PrvKey1 = IPP_CONTEXT( 'R', 'S', 'A', '1'), idCtxRSA_PrvKey2 = IPP_CONTEXT( 'R', 'S', 'A', '2'), idCtxDSA = IPP_CONTEXT( ' ', 'D', 'S', 'A'), idCtxECCP = IPP_CONTEXT( ' ', 'E', 'C', 'P'), idCtxECCB = IPP_CONTEXT( ' ', 'E', 'C', 'B'), idCtxECCPPoint = IPP_CONTEXT( 'P', 'E', 'C', 'P'), idCtxECCBPoint = IPP_CONTEXT( 'P', 'E', 'C', 'B'), idCtxDH = IPP_CONTEXT( ' ', ' ', 'D', 'H'), idCtxDLP = IPP_CONTEXT( ' ', 'D', 'L', 'P'), idCtxCMAC = IPP_CONTEXT( 'C', 'M', 'A', 'C'), idCtxAESXCBC, idCtxAESCCM, idCtxAESGCM, idCtxGFP, idCtxGFPE, idCtxGFPX, idCtxGFPXE, idCtxGFPXQX, idCtxGFPXQXE, idCtxGFPEC, idCtxGFPPoint, idCtxGFPXEC, idCtxGFPXECPoint, idCtxHash, idCtxSM3, idCtxAESXTS, idxCtxECES_SM2 } IppCtxId; /* ///////////////////////////////////////////////////////////////////////////// Helpers /////////////////////////////////////////////////////////////////////////// */ #define IPP_NOERROR_RET() return ippStsNoErr #define IPP_ERROR_RET( ErrCode ) return (ErrCode) #ifdef _IPP_DEBUG #define IPP_BADARG_RET( expr, ErrCode )\ {if (expr) { IPP_ERROR_RET( ErrCode ); }} #else #define IPP_BADARG_RET( expr, ErrCode ) #endif #define IPP_BAD_SIZE_RET( n )\ IPP_BADARG_RET( (n)<=0, ippStsSizeErr ) #define IPP_BAD_STEP_RET( n )\ IPP_BADARG_RET( (n)<=0, ippStsStepErr ) #define IPP_BAD_PTR1_RET( ptr )\ IPP_BADARG_RET( NULL==(ptr), ippStsNullPtrErr ) #define IPP_BAD_PTR2_RET( ptr1, ptr2 )\ {IPP_BAD_PTR1_RET( ptr1 ); IPP_BAD_PTR1_RET( ptr2 )} #define IPP_BAD_PTR3_RET( ptr1, ptr2, ptr3 )\ {IPP_BAD_PTR2_RET( ptr1, ptr2 ); IPP_BAD_PTR1_RET( ptr3 )} #define IPP_BAD_PTR4_RET( ptr1, ptr2, ptr3, ptr4 )\ {IPP_BAD_PTR2_RET( ptr1, ptr2 ); IPP_BAD_PTR2_RET( ptr3, ptr4 )} #define IPP_BAD_ISIZE_RET(roi) \ IPP_BADARG_RET( ((roi).width<=0 || (roi).height<=0), ippStsSizeErr) /* ////////////////////////////////////////////////////////////////////////// */ /* internal messages */ #define MSG_LOAD_DLL_ERR (-9700) /* Error at loading of %s library */ #define MSG_NO_DLL (-9701) /* No DLLs were found in the Waterfall procedure */ #define MSG_NO_SHARED (-9702) /* No shared libraries were found in the Waterfall procedure */ /* ////////////////////////////////////////////////////////////////////////// */ typedef union { /* double precision */ Ipp64s hex; Ipp64f fp; } IppFP_64f; typedef union { /* single precision */ Ipp32s hex; Ipp32f fp; } IppFP_32f; /* ////////////////////////////////////////////////////////////////////////// */ /* Define NULL pointer value */ #ifndef NULL #ifdef __cplusplus #define NULL 0 #else #define NULL ((void *)0) #endif #endif #define UNREFERENCED_PARAMETER(p) (void)(p) #if defined( _IPP_MARK_LIBRARY ) static char G[] = {73, 80, 80, 71, 101, 110, 117, 105, 110, 101, 243, 193, 210, 207, 215}; #endif #define STR2(x) #x #define STR(x) STR2(x) #define MESSAGE( desc )\ message(__FILE__ "(" STR(__LINE__) "):" #desc) /* // endian definition */ #define IPP_LITTLE_ENDIAN (0) #define IPP_BIG_ENDIAN (1) #if defined( _IPP_LE ) #define IPP_ENDIAN IPP_LITTLE_ENDIAN #elif defined( _IPP_BE ) #define IPP_ENDIAN IPP_BIG_ENDIAN #else #if defined( __ARMEB__ ) #define IPP_ENDIAN IPP_BIG_ENDIAN #else #define IPP_ENDIAN IPP_LITTLE_ENDIAN #endif #endif /* ////////////////////////////////////////////////////////////////////////// */ /* intrinsics */ #if (_IPP >= _IPP_W7) || (_IPP32E >= _IPP32E_M7) #if defined(__INTEL_COMPILER) || (_MSC_VER >= 1300) #if (_IPP == _IPP_W7) #if defined(__INTEL_COMPILER) #include "emmintrin.h" #else #undef _W7 #include "emmintrin.h" #define _W7 #endif #define _mm_loadu _mm_loadu_si128 #elif (_IPP32E == _IPP32E_M7) #if defined(__INTEL_COMPILER) #include "pmmintrin.h" #define _mm_loadu _mm_lddqu_si128 #elif (_MSC_FULL_VER >= 140050110) #include "intrin.h" #define _mm_loadu _mm_lddqu_si128 #elif (_MSC_FULL_VER < 140050110) #include "emmintrin.h" #define _mm_loadu _mm_loadu_si128 #endif #elif ((_IPP == _IPP_V8) || (_IPP32E == _IPP32E_U8) || (_IPP == _IPP_S8) || (_IPP32E == _IPP32E_N8)) #if defined(__INTEL_COMPILER) #include "tmmintrin.h" #define _mm_loadu _mm_lddqu_si128 #elif (_MSC_FULL_VER >= 140050110) #include "intrin.h" #define _mm_loadu _mm_lddqu_si128 #elif (_MSC_FULL_VER < 140050110) #include "emmintrin.h" #define _mm_loadu _mm_loadu_si128 #endif #elif (_IPP == _IPP_P8) || (_IPP32E == _IPP32E_Y8) #if defined(__INTEL_COMPILER) #include "smmintrin.h" #define _mm_loadu _mm_lddqu_si128 #elif (_MSC_FULL_VER >= 140050110) #include "intrin.h" #define _mm_loadu _mm_lddqu_si128 #elif (_MSC_FULL_VER < 140050110) #include "emmintrin.h" #define _mm_loadu _mm_loadu_si128 #endif #elif (_IPP >= _IPP_G9) || (_IPP32E >= _IPP32E_E9) #if defined(__INTEL_COMPILER) #include "immintrin.h" #define _mm_loadu _mm_lddqu_si128 #elif (_MSC_FULL_VER >= 160021003) #include "immintrin.h" #define _mm_loadu _mm_lddqu_si128 #endif #endif #endif #endif // **** intrinsics for bit casting **** #if defined(__INTEL_COMPILER) extern unsigned int __intel_castf32_u32(float val); extern float __intel_castu32_f32(unsigned int val); extern unsigned __int64 __intel_castf64_u64(double val); extern double __intel_castu64_f64(unsigned __int64 val); #define __CAST_32f32u(val) __intel_castf32_u32((Ipp32f)val) #define __CAST_32u32f(val) __intel_castu32_f32((Ipp32u)val) #define __CAST_64f64u(val) __intel_castf64_u64((Ipp64f)val) #define __CAST_64u64f(val) __intel_castu64_f64((Ipp64u)val) #else #define __CAST_32f32u(val) ( *((Ipp32u*)&val) ) #define __CAST_32u32f(val) ( *((Ipp32f*)&val) ) #define __CAST_64f64u(val) ( *((Ipp64u*)&val) ) #define __CAST_64u64f(val) ( *((Ipp64f*)&val) ) #endif // short names for vector registers casting #define _pd2ps _mm_castpd_ps #define _ps2pd _mm_castps_pd #define _pd2pi _mm_castpd_si128 #define _pi2pd _mm_castsi128_pd #define _ps2pi _mm_castps_si128 #define _pi2ps _mm_castsi128_ps #define _ypd2ypi _mm256_castpd_si256 #define _ypi2ypd _mm256_castsi256_pd #define _yps2ypi _mm256_castps_si256 #define _ypi2yps _mm256_castsi256_ps #define _ypd2yps _mm256_castpd_ps #define _yps2ypd _mm256_castps_pd #define _yps2ps _mm256_castps256_ps128 #define _ypi2pi _mm256_castsi256_si128 #define _ypd2pd _mm256_castpd256_pd128 #define _ps2yps _mm256_castps128_ps256 #define _pi2ypi _mm256_castsi128_si256 #define _pd2ypd _mm256_castpd128_pd256 #define _zpd2zpi _mm512_castpd_si512 #define _zpi2zpd _mm512_castsi512_pd #define _zps2zpi _mm512_castps_si512 #define _zpi2zps _mm512_castsi512_ps #define _zpd2zps _mm512_castpd_ps #define _zps2zpd _mm512_castps_pd #define _zps2ps _mm512_castps512_ps128 #define _zpi2pi _mm512_castsi512_si128 #define _zpd2pd _mm512_castpd512_pd128 #define _ps2zps _mm512_castps128_ps512 #define _pi2zpi _mm512_castsi128_si512 #define _pd2zpd _mm512_castpd128_pd512 #define _zps2yps _mm512_castps512_ps256 #define _zpi2ypi _mm512_castsi512_si256 #define _zpd2ypd _mm512_castpd512_pd256 #define _yps2zps _mm512_castps256_ps512 #define _ypi2zpi _mm512_castsi256_si512 #define _ypd2zpd _mm512_castpd256_pd512 #if defined(__INTEL_COMPILER) #define __IVDEP ivdep #else #define __IVDEP message("message :: 'ivdep' is not defined") #endif #if !defined( _MERGED_BLD ) /* compile data if it isn't merged library */ #undef _IPP_DATA #define _IPP_DATA #endif #if defined( __cplusplus ) } #endif #endif /* __OWNDEFS_H__ */