/******************************************************************************* * Copyright (C) 2012 Intel Corporation * * Licensed under the Apache License, Version 2.0 (the 'License'); * 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. * *******************************************************************************/ /* // // Intel® Integrated Performance Primitives Cryptography (Intel® IPP Cryptography) // // Purpose: Basic Types and Macro Definitions // */ #ifndef IPPBASE_H__ #define IPPBASE_H__ #ifdef __cplusplus extern "C" { #endif #if defined (_WIN64) #define INTEL_PLATFORM "intel64/" #elif defined (_WIN32) #define INTEL_PLATFORM "ia32/" #endif #if !defined( IPPAPI ) /* Specify explicit calling convention for public functions */ #if defined( IPP_W32DLL ) && (defined( _WIN32 ) || defined( _WIN64 )) #if defined( _MSC_VER ) || defined( __ICL ) #define IPPAPI( type,name,arg ) \ __declspec(dllimport) type IPP_CALL name arg; #else #define IPPAPI( type,name,arg ) type IPP_CALL name arg; #endif #else #define IPPAPI( type,name,arg ) type IPP_CALL name arg; #endif #endif /* icc 2021 supports short float data type, icx supports _Float16 data type */ #define _FLOAT_16 2 #define _SHORT_FLOAT 1 #define _NO_FLOAT_16 0 #if defined(__INTEL_LLVM_COMPILER) && defined(__AVX512FP16__) # define COMPILER_SUPPORT_SHORT_FLOAT _FLOAT_16 #else # if defined(__INTEL_COMPILER) # if(__INTEL_COMPILER >= 2021) # define COMPILER_SUPPORT_SHORT_FLOAT _SHORT_FLOAT # endif # endif #endif #if !(defined(COMPILER_SUPPORT_SHORT_FLOAT)) # define COMPILER_SUPPORT_SHORT_FLOAT _NO_FLOAT_16 #endif #if !defined(_NO_IPP_DEPRECATED) #if (defined( __ICL ) || defined( __ECL ) || defined(_MSC_VER)) && !defined( _PCS ) && !defined( _PCS_GENSTUBS ) #if( __INTEL_COMPILER >= 1100 ) /* icl 11.0 supports additional comment */ #if( _MSC_VER >= 1400 ) #define IPP_DEPRECATED( comment ) __declspec( deprecated ( comment )) #else #pragma message ("your icl version supports additional comment for deprecated functions but it can't be displayed") #pragma message ("because internal _MSC_VER macro variable setting requires compatibility with MSVC7.1") #pragma message ("use -Qvc8 switch for icl command line to see these additional comments") #define IPP_DEPRECATED( comment ) __declspec( deprecated ) #endif #elif( _MSC_FULL_VER >= 140050727 )&&( !defined( __INTEL_COMPILER ))&&( !defined(__INTEL_LLVM_COMPILER)) /* VS2005 supports additional comment */ #define IPP_DEPRECATED( comment ) __declspec( deprecated ( comment )) #elif( _MSC_VER <= 1200 )&&( !defined( __INTEL_COMPILER ))&&( !defined(__INTEL_LLVM_COMPILER)) /* VS 6 doesn't support deprecation */ #define IPP_DEPRECATED( comment ) #else #define IPP_DEPRECATED( comment ) __declspec( deprecated ) #endif #elif (defined(__ICC) || defined(__ECC) || defined( __GNUC__ )) && !defined( _PCS ) && !defined( _PCS_GENSTUBS ) #if defined( __GNUC__ ) #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 #define IPP_DEPRECATED( message ) __attribute__(( deprecated( message ))) #else #define IPP_DEPRECATED( message ) __attribute__(( deprecated )) #endif #else #define IPP_DEPRECATED( comment ) __attribute__(( deprecated )) #endif #else #define IPP_DEPRECATED( comment ) #endif #else #define IPP_DEPRECATED( comment ) #endif #if (defined( __ICL ) || defined( __ECL ) || defined(_MSC_VER)) #if !defined( IPP_NO_DEFAULT_LIB ) #if ((defined( _IPP_SEQUENTIAL_DYNAMIC ) && !defined( _IPP_SEQUENTIAL_STATIC )) || \ (!defined( _IPP_SEQUENTIAL_DYNAMIC ) && defined( _IPP_SEQUENTIAL_STATIC ))) #elif (!defined( _IPP_SEQUENTIAL_DYNAMIC ) && !defined( _IPP_SEQUENTIAL_STATIC )) #define IPP_NO_DEFAULT_LIB #else #error Illegal combination of _IPP_SEQUENTIAL_DYNAMIC/_IPP_SEQUENTIAL_STATIC, only one definition can be defined #endif #endif #else #define IPP_NO_DEFAULT_LIB #if (defined(_IPP_SEQUENTIAL_DYNAMIC) || defined(_IPP_SEQUENTIAL_STATIC)) #pragma message ("defines _IPP_SEQUENTIAL_DYNAMIC/_IPP_SEQUENTIAL_STATIC do not have any effect in current configuration") #endif #endif #if defined (_MSC_VER) #define IPP_CDECL __cdecl #elif (defined (__INTEL_COMPILER) || defined (__INTEL_LLVM_COMPILER) || defined (__GNUC__ ) || defined (__clang__)) && defined (_ARCH_IA32) #define IPP_CDECL __attribute((cdecl)) #else #define IPP_CDECL #endif #if defined( _WIN32 ) || defined( _WIN64 ) #define IPP_STDCALL __stdcall #define IPP_CALL IPP_STDCALL #define IPP_INT64 __int64 #define IPP_UINT64 unsigned __int64 #else #define IPP_STDCALL #define IPP_CALL IPP_CDECL #define IPP_INT64 long long #define IPP_UINT64 unsigned long long #endif #define IPP_COUNT_OF( obj ) (sizeof(obj)/sizeof(obj[0])) #define IPP_PI ( 3.14159265358979323846 ) /* ANSI C does not support M_PI */ #define IPP_2PI ( 6.28318530717958647692 ) /* 2*pi */ #define IPP_PI2 ( 1.57079632679489661923 ) /* pi/2 */ #define IPP_PI4 ( 0.78539816339744830961 ) /* pi/4 */ #define IPP_PI180 ( 0.01745329251994329577 ) /* pi/180 */ #define IPP_RPI ( 0.31830988618379067154 ) /* 1/pi */ #define IPP_SQRT2 ( 1.41421356237309504880 ) /* sqrt(2) */ #define IPP_SQRT3 ( 1.73205080756887729353 ) /* sqrt(3) */ #define IPP_LN2 ( 0.69314718055994530942 ) /* ln(2) */ #define IPP_LN3 ( 1.09861228866810969139 ) /* ln(3) */ #define IPP_E ( 2.71828182845904523536 ) /* e */ #define IPP_RE ( 0.36787944117144232159 ) /* 1/e */ #define IPP_EPS23 ( 1.19209289e-07f ) #define IPP_EPS52 ( 2.2204460492503131e-016 ) #define IPP_MAX_8U ( 0xFF ) #define IPP_MAX_16U ( 0xFFFF ) #define IPP_MAX_32U ( 0xFFFFFFFF ) #define IPP_MIN_8U ( 0 ) #define IPP_MIN_16U ( 0 ) #define IPP_MIN_32U ( 0 ) #define IPP_MIN_8S (-128 ) #define IPP_MAX_8S ( 127 ) #define IPP_MIN_16S (-32768 ) #define IPP_MAX_16S ( 32767 ) #define IPP_MIN_32S (-2147483647 - 1 ) #define IPP_MAX_32S ( 2147483647 ) #define IPP_MIN_64U ( 0 ) #if defined( _WIN32 ) || defined ( _WIN64 ) #define IPP_MAX_64S ( 9223372036854775807i64 ) #define IPP_MIN_64S (-9223372036854775807i64 - 1 ) #define IPP_MAX_64U ( 0xffffffffffffffffL ) /* 18446744073709551615 */ #else #define IPP_MAX_64S ( 9223372036854775807LL ) #define IPP_MIN_64S (-9223372036854775807LL - 1 ) #define IPP_MAX_64U ( 0xffffffffffffffffLL ) /* 18446744073709551615 */ #endif #define IPP_MINABS_32F ( 1.175494351e-38f ) #define IPP_MAXABS_32F ( 3.402823466e+38f ) #define IPP_EPS_32F ( 1.192092890e-07f ) #define IPP_MINABS_64F ( 2.2250738585072014e-308 ) #define IPP_MAXABS_64F ( 1.7976931348623158e+308 ) #define IPP_EPS_64F ( 2.2204460492503131e-016 ) #define IPP_MAX( a, b ) ( ((a) > (b)) ? (a) : (b) ) #define IPP_MIN( a, b ) ( ((a) < (b)) ? (a) : (b) ) #define IPP_ABS( a ) ( ((a) < 0) ? (-(a)) : (a) ) typedef struct { int major; /* e.g. 1 */ int minor; /* e.g. 2 */ int majorBuild; /* e.g. 3 */ unsigned int revision; /* e.g. 0xf6f5e5bc */ char targetCpu[4]; /* corresponding to Intel® processor */ const char* Name; /* e.g. "ippsw7" */ const char* Version; /* e.g. "v1.2 Beta" */ const char* BuildDate; /* e.g. "Jul 20 99" */ } IppLibraryVersion; typedef unsigned char Ipp8u; typedef unsigned short Ipp16u; typedef unsigned int Ipp32u; typedef signed char Ipp8s; typedef signed short Ipp16s; typedef signed int Ipp32s; typedef float Ipp32f; typedef IPP_INT64 Ipp64s; typedef IPP_UINT64 Ipp64u; typedef double Ipp64f; #if (COMPILER_SUPPORT_SHORT_FLOAT == _FLOAT_16) typedef _Float16 Ipp16f; #endif #if (COMPILER_SUPPORT_SHORT_FLOAT == _SHORT_FLOAT) typedef short float Ipp16f; #endif #if (COMPILER_SUPPORT_SHORT_FLOAT == _NO_FLOAT_16) typedef Ipp16s Ipp16f; #endif typedef struct { Ipp8s re; Ipp8s im; } Ipp8sc; typedef struct { Ipp16s re; Ipp16s im; } Ipp16sc; typedef struct { Ipp16u re; Ipp16u im; } Ipp16uc; typedef struct { Ipp32s re; Ipp32s im; } Ipp32sc; typedef struct { Ipp32f re; Ipp32f im; } Ipp32fc; typedef struct { Ipp64s re; Ipp64s im; } Ipp64sc; typedef struct { Ipp64f re; Ipp64f im; } Ipp64fc; typedef struct { Ipp16f re; Ipp16f im; } Ipp16fc; typedef enum { ippUndef = -1, ipp1u = 0, ipp8u = 1, ipp8uc = 2, ipp8s = 3, ipp8sc = 4, ipp16u = 5, ipp16uc = 6, ipp16s = 7, ipp16sc = 8, ipp32u = 9, ipp32uc = 10, ipp32s = 11, ipp32sc = 12, ipp32f = 13, ipp32fc = 14, ipp64u = 15, ipp64uc = 16, ipp64s = 17, ipp64sc = 18, ipp64f = 19, ipp64fc = 20, ipp16fc = 21 /* This is necessary for TS */ } IppDataType; typedef enum { ippFalse = 0, ippTrue = 1 } IppBool; #ifdef __cplusplus } #endif #endif /* IPPBASE_H__ */ #ifndef IPP_CPU_FEATURES__ #define IPP_CPU_FEATURES__ #define ippCPUID_MMX 0x00000001 /* Intel® architecture with MMX(TM) technology supported */ #define ippCPUID_SSE 0x00000002 /* Intel® Streaming SIMD Extensions (Intel® SSE) instruction set */ #define ippCPUID_SSE2 0x00000004 /* Intel® Streaming SIMD Extensions 2 (Intel® SSE2) instruction set */ #define ippCPUID_SSE3 0x00000008 /* Intel® Streaming SIMD Extensions 3 (Intel® SSE3) instruction set */ #define ippCPUID_SSSE3 0x00000010 /* Supplemental Streaming SIMD Extensions 3 (SSSE3) instruction set */ #define ippCPUID_MOVBE 0x00000020 /* Intel® instruction MOVBE */ #define ippCPUID_SSE41 0x00000040 /* Intel® Streaming SIMD Extensions 4.1 (Intel® SSE4.1) instruction set */ #define ippCPUID_SSE42 0x00000080 /* Intel® Streaming SIMD Extensions 4.2 (Intel® SSE4.2) instruction set */ #define ippCPUID_AVX 0x00000100 /* Intel® Advanced Vector Extensions instruction set */ #define ippAVX_ENABLEDBYOS 0x00000200 /* Intel® Advanced Vector Extensions instruction set is supported by OS */ #define ippCPUID_AES 0x00000400 /* */ #define ippCPUID_CLMUL 0x00000800 /* Intel® instruction PCLMULQDQ */ #define ippCPUID_ABR 0x00001000 /* Reserved */ #define ippCPUID_RDRAND 0x00002000 /* Intel® instruction RDRAND */ #define ippCPUID_F16C 0x00004000 /* Intel® instruction F16C */ #define ippCPUID_AVX2 0x00008000 /* Intel® Advanced Vector Extensions 2 */ #define ippCPUID_ADCOX 0x00010000 /* Intel® instructions ADOX/ADCX */ #define ippCPUID_RDSEED 0x00020000 /* Intel® instruction RDSEED */ #define ippCPUID_PREFETCHW 0x00040000 /* Intel® instruction PREFETCHW */ #define ippCPUID_SHA 0x00080000 /* Intel® Secure Hash Algorithm Extensions */ #define ippCPUID_AVX512F 0x00100000 /* Intel® Advanced Vector Extensions 512 Foundation instruction set */ #define ippCPUID_AVX512CD 0x00200000 /* Intel® Advanced Vector Extensions 512 CD instruction set */ #define ippCPUID_AVX512ER 0x00400000 /* Intel® Advanced Vector Extensions 512 ER instruction set */ #define ippCPUID_AVX512PF 0x00800000 /* Intel® Advanced Vector Extensions 512 PF instruction set */ #define ippCPUID_AVX512BW 0x01000000 /* Intel® Advanced Vector Extensions 512 BW instruction set */ #define ippCPUID_AVX512DQ 0x02000000 /* Intel® Advanced Vector Extensions 512 DQ instruction set */ #define ippCPUID_AVX512VL 0x04000000 /* Intel® Advanced Vector Extensions 512 VL instruction set */ #define ippCPUID_AVX512VBMI 0x08000000 /* Intel® Advanced Vector Extensions 512 Bit Manipulation instructions */ #define ippCPUID_MPX 0x10000000 /* Intel® Memory Protection Extensions */ #define ippCPUID_AVX512_4FMADDPS 0x20000000 /* Intel® Advanced Vector Extensions 512 DL floating-point single precision */ #define ippCPUID_AVX512_4VNNIW 0x40000000 /* Intel® Advanced Vector Extensions 512 DL enhanced word variable precision */ #define ippCPUID_KNC 0x80000000 /* Intel® Xeon® Phi(TM) Coprocessor */ #if defined( _WIN32 ) || defined ( _WIN64 ) #define INT64_SUFFIX(name) name##L #else #define INT64_SUFFIX(name) name##LL #endif #define ippCPUID_AVX512IFMA INT64_SUFFIX(0x100000000) /* Intel® Advanced Vector Extensions 512 IFMA (PMADD52) instruction set */ #define ippCPUID_NOCHECK INT64_SUFFIX(0x8000000000000000) /* Force ippSetCpuFeatures to set CPU features without check */ #define ippCPUID_GETINFO_A INT64_SUFFIX(0x616f666e69746567) /* Force ippGetCpuFeatures to work as cpuid instruction */ #define ippAVX512_ENABLEDBYOS INT64_SUFFIX(0x200000000) /* Intel® Advanced Vector Extensions 512 is supported by OS */ #define ippCPUID_AVX512GFNI INT64_SUFFIX(0x400000000) /* */ #define ippCPUID_AVX512VAES INT64_SUFFIX(0x800000000) /* */ #define ippCPUID_AVX512VCLMUL INT64_SUFFIX(0x1000000000) /* */ #define ippCPUID_AVX512VBMI2 INT64_SUFFIX(0x2000000000) /* Intel® Advanced Vector Extensions 512 Bit Manipulation instructions 2 */ #define ippCPUID_AVX512_FP16 INT64_SUFFIX(0x1000000000) /* Intel(R) Advanced Vector Extensions 512 16-bit floating point (FP16) instruction set */ #define ippCPUID_AVX2VAES INT64_SUFFIX(0x4000000000) /* Intel® Advanced Vector Extensions 256 Bit Vector AES instructions */ #define ippCPUID_AVX2VCLMUL INT64_SUFFIX(0x8000000000) /* Intel® instruction VPCLMULQDQ */ #endif /* IPP_CPU_FEATURES__ */ /* Macros are necessary to build custom Intel® IPP Cryptography static 1cpu library (enable specific features at compile-time) */ #if (!defined(_MERGED_BLD) && defined(IPPCP_CUSTOM_BUILD)) #ifndef IPP_CUSTOM_CPU_FEATURES__ #define IPP_CUSTOM_CPU_FEATURES__ #ifndef IPPCP_AES_ON #define IPPCP_AES_ON (0) #endif #ifndef IPPCP_CLMUL_ON #define IPPCP_CLMUL_ON (0) #endif #ifndef IPPCP_VAES_ON #define IPPCP_VAES_ON (0) #endif #ifndef IPPCP_VCLMUL_ON #define IPPCP_VCLMUL_ON (0) #endif #define IPP_CUSTOM_ENABLED_FEATURES (ippCPUID_AES*IPPCP_AES_ON | ippCPUID_CLMUL*IPPCP_CLMUL_ON | ippCPUID_AVX512VAES*IPPCP_VAES_ON | ippCPUID_AVX512VCLMUL*IPPCP_VCLMUL_ON) #endif /* IPP_CUSTOM_CPU_FEATURES__ */ #endif /* !defined(_MERGED_BLD) && defined(IPPCP_CUSTOM_BUILD) */ #ifndef IPPSTATUS_H__ #define IPPSTATUS_H__ #ifdef __cplusplus extern "C" { #endif typedef signed int IppStatus; /* start of common with ippCrypto part - any changes MUST be done in both repositories - IPP & ippCrypto */ #define ippStsCpuNotSupportedErr -9999 /* The target CPU is not supported. */ #define ippStsUnknownStatusCodeErr -216 /* Unknown status code. */ #define ippStsLoadDynErr -221 /* Error when loading the dynamic library. */ #define ippStsLengthErr -15 /* Incorrect value for string length. */ #define ippStsNotSupportedModeErr -14 /* The requested mode is currently not supported. */ #define ippStsContextMatchErr -13 /* Context parameter does not match the operation. */ #define ippStsScaleRangeErr -12 /* Scale bounds are out of range. */ #define ippStsOutOfRangeErr -11 /* Argument is out of range, or point is outside the image. */ #define ippStsDivByZeroErr -10 /* An attempt to divide by zero. */ #define ippStsMemAllocErr -9 /* Memory allocated for the operation is not enough. */ #define ippStsNullPtrErr -8 /* Null pointer error. */ #define ippStsRangeErr -7 /* Incorrect values for bounds: the lower bound is greater than the upper bound. */ #define ippStsSizeErr -6 /* Incorrect value for data size. */ #define ippStsBadArgErr -5 /* Incorrect arg/param of the function. */ #define ippStsNoMemErr -4 /* Not enough memory for the operation. */ #define ippStsErr -2 /* Unknown/unspecified error */ /* no errors */ #define ippStsNoErr 0 /* No errors. */ /* warnings */ #define ippStsNoOperation 1 /* No operation has been executed. */ #define ippStsDivByZero 2 /* Zero value(s) for the divisor in the Div function. */ #define ippStsWaterfall 43 /* Cannot load required library, waterfall is used. */ #define ippStsFeaturesCombination 51 /* Wrong combination of features. */ /* end of common with ippCrypto part */ #ifdef __cplusplus } #endif #endif /* IPPSTATUS_H__ */ /* ippCrypto specific statuses - any changes MUST be done in both repositories - IPP & ippCrypto */ #define ippStsInvalidPoint -1017 /* ippStsInvalidPoint ECC: Invalid point (out of EC).*/ #define ippStsQuadraticNonResidueErr -1016 /* SQRT operation on quadratic non-residue value. */ #define ippStsPointAtInfinity -1015 /* Point at infinity is detected. */ #define ippStsOFBSizeErr -1014 /* Incorrect value for crypto OFB block size. */ #define ippStsIncompleteContextErr -1013 /* Crypto: set up of context is not complete. */ #define ippStsCTRSizeErr -1012 /* Incorrect value for crypto CTR block size. */ #define ippStsEphemeralKeyErr -1011 /* ECC: Invalid ephemeral key. */ #define ippStsMessageErr -1010 /* ECC: Invalid message digest. */ #define ippStsShareKeyErr -1009 /* ECC: Invalid share key. */ #define ippStsInvalidPrivateKey -1008 /* ECC: Invalid private key. */ #define ippStsOutOfECErr -1007 /* ECC: Point out of EC. */ #define ippStsECCInvalidFlagErr -1006 /* ECC: Invalid Flag. */ #define ippStsUnderRunErr -1005 /* Error in data under run. */ #define ippStsPaddingErr -1004 /* Detected padding error indicates the possible data corruption. */ #define ippStsCFBSizeErr -1003 /* Incorrect value for crypto CFB block size. */ #define ippStsPaddingSchemeErr -1002 /* Invalid padding scheme. */ #define ippStsBadModulusErr -1001 /* Bad modulus caused a failure in module inversion. */ #define ippStsInsufficientEntropy 25 /* Generation of the prime/key failed due to insufficient entropy in the random seed and stimulus bit string. */ #define ippStsNotSupportedCpu 36 /* The CPU is not supported. */ #define ippStsMbWarning 53 /* Error(s) in statuses array. */ /* end of ippCrypto specific statuses - any changes MUST be done in both repositories - IPP & ippCrypto */ #if (!defined IPPCPDEFS_H__) || defined( _OWN_BLDPCS ) #define IPPCPDEFS_H__ #ifdef __cplusplus extern "C" { #endif #if !defined( _OWN_BLDPCS ) typedef Ipp32u IppAlgId; /* // ========================================================= // Symmetric Ciphers // ========================================================= */ typedef enum { ippPaddingNONE = 0, /*NONE = 0,*/ IppsCPPaddingNONE = 0, ippPaddingPKCS7 = 1, /*PKCS7 = 1,*/ IppsCPPaddingPKCS7 = 1, ippPaddingZEROS = 2, /*ZEROS = 2,*/ IppsCPPaddingZEROS = 2 } IppsPadding, IppsCPPadding; typedef struct _cpDES IppsDESSpec; typedef struct _cpRijndael128 IppsAESSpec; typedef struct _cpRijndael128 IppsRijndael128Spec; typedef struct _cpSMS4 IppsSMS4Spec; /* TDES */ #define DES_BLOCKSIZE (64) /* cipher blocksize (bits) */ #define TDES_BLOCKSIZE DES_BLOCKSIZE #define DES_KEYSIZE (64) /* cipher keysize (bits) */ #define TDES_KEYSIZE DES_KEYSIZE /* AES */ #define IPP_AES_BLOCK_BITSIZE (128) /* cipher blocksizes (bits) */ /* Rijndael */ typedef enum { ippRijndaelKey128 = 128, IppsRijndaelKey128 = 128, /* 128-bit key */ ippRijndaelKey192 = 192, IppsRijndaelKey192 = 192, /* 192-bit key */ ippRijndaelKey256 = 256, IppsRijndaelKey256 = 256 /* 256-bit key */ } IppsRijndaelKeyLength; /* AES-CCM (authentication & confidence) */ typedef struct _cpAES_CCM IppsAES_CCMState; /* AES-GCM (authentication & confidence) */ typedef struct _cpAES_GCM IppsAES_GCMState; /* AES-XTS (confidence) */ typedef struct _cpAES_XTS IppsAES_XTSSpec; /* SMS4-CCM (authentication & confidence) */ typedef struct _cpSMS4_CCM IppsSMS4_CCMState; /* // ========================================================= // ARCFOUR Stream Cipher // ========================================================= */ typedef struct _cpARCfour IppsARCFourState; #define IPP_ARCFOUR_KEYMAX_SIZE (256) /* max key length (bytes) */ #define MAX_ARCFOUR_KEY_LEN IPP_ARCFOUR_KEYMAX_SIZE /* obsolete */ /* // ========================================================= // One-Way Hash Functions // ========================================================= */ typedef enum { ippHashAlg_Unknown, ippHashAlg_SHA1, ippHashAlg_SHA256, ippHashAlg_SHA224, ippHashAlg_SHA512, ippHashAlg_SHA384, ippHashAlg_MD5, ippHashAlg_SM3, ippHashAlg_SHA512_224, ippHashAlg_SHA512_256, ippHashAlg_MaxNo } IppHashAlgId; #define IPP_ALG_HASH_UNKNOWN (ippHashAlg_Unknown) /* unknown */ #define IPP_ALG_HASH_SHA1 (ippHashAlg_SHA1) /* SHA1 */ #define IPP_ALG_HASH_SHA256 (ippHashAlg_SHA256) /* SHA256 */ #define IPP_ALG_HASH_SHA224 (ippHashAlg_SHA224) /* SHA224 or SHA256/224 */ #define IPP_ALG_HASH_SHA512 (ippHashAlg_SHA512) /* SHA512 */ #define IPP_ALG_HASH_SHA384 (ippHashAlg_SHA384) /* SHA384 or SHA512/384 */ #define IPP_ALG_HASH_MD5 (ippHashAlg_MD5) /* MD5 */ #define IPP_ALG_HASH_SM3 (ippHashAlg_SM3) /* SM3 */ #define IPP_ALG_HASH_SHA512_224 (ippHashAlg_SHA512_224) /* SHA512/224 */ #define IPP_ALG_HASH_SHA512_256 (ippHashAlg_SHA512_256) /* SHA512/256 */ #define IPP_ALG_HASH_LIMIT (ippHashAlg_MaxNo) /* hash alg limiter*/ typedef struct _cpSHA1 IppsSHA1State; typedef struct _cpSHA256 IppsSHA256State; typedef struct _cpSHA256 IppsSHA224State; typedef struct _cpSHA512 IppsSHA512State; typedef struct _cpSHA512 IppsSHA384State; typedef struct _cpMD5 IppsMD5State; typedef struct _cpSM3 IppsSM3State; typedef struct _cpHashCtx IppsHashState; typedef struct _cpHashMethod_rmf IppsHashMethod; typedef struct _cpHashCtx_rmf IppsHashState_rmf; #define IPP_SHA1_DIGEST_BITSIZE 160 /* digest size (bits) */ #define IPP_SHA256_DIGEST_BITSIZE 256 #define IPP_SHA224_DIGEST_BITSIZE 224 #define IPP_SHA384_DIGEST_BITSIZE 384 #define IPP_SHA512_DIGEST_BITSIZE 512 #define IPP_MD5_DIGEST_BITSIZE 128 #define IPP_SM3_DIGEST_BITSIZE 256 #define IPP_SHA512_224_DIGEST_BITSIZE 224 #define IPP_SHA512_256_DIGEST_BITSIZE 256 /* // ========================================================= // Keyed-Hash Message Authentication Codes // ========================================================= */ typedef struct _cpHMAC IppsHMACState; typedef struct _cpHMAC IppsHMACSHA1State; typedef struct _cpHMAC IppsHMACSHA256State; typedef struct _cpHMAC IppsHMACSHA224State; typedef struct _cpHMAC IppsHMACSHA384State; typedef struct _cpHMAC IppsHMACSHA512State; typedef struct _cpHMAC IppsHMACMD5State; typedef struct _cpHMAC_rmf IppsHMACState_rmf; /* // ========================================================= // Data Authentication Codes // ========================================================= */ typedef struct _cpAES_CMAC IppsAES_CMACState; /* // ========================================================= // Big Number Integer Arithmetic // ========================================================= */ #define BN_MAXBITSIZE (16*1024) /* bn max size (bits) */ typedef enum { ippBigNumNEG = 0, IppsBigNumNEG = 0, ippBigNumPOS = 1, IppsBigNumPOS = 1 } IppsBigNumSGN; typedef enum { ippBinaryMethod = 0, IppsBinaryMethod = 0, ippSlidingWindows = 1, IppsSlidingWindows = 1 } IppsExpMethod; typedef struct _cpBigNum IppsBigNumState; typedef struct _cpMontgomery IppsMontState; typedef struct _cpPRNG IppsPRNGState; typedef struct _cpPrime IppsPrimeState; /* External Bit Supplier */ typedef IppStatus (IPP_CALL *IppBitSupplier)(Ipp32u* pRand, int nBits, void* pEbsParams); #define IPP_IS_EQ (0) #define IPP_IS_GT (1) #define IPP_IS_LT (2) #define IPP_IS_NE (3) #define IPP_IS_NA (4) #define IPP_IS_PRIME (5) #define IPP_IS_COMPOSITE (6) #define IPP_IS_VALID (7) #define IPP_IS_INVALID (8) #define IPP_IS_INCOMPLETE (9) #define IPP_IS_ATINFINITY (10) #define IS_ZERO IPP_IS_EQ #define GREATER_THAN_ZERO IPP_IS_GT #define LESS_THAN_ZERO IPP_IS_LT #define IS_PRIME IPP_IS_PRIME #define IS_COMPOSITE IPP_IS_COMPOSITE #define IS_VALID_KEY IPP_IS_VALID #define IS_INVALID_KEY IPP_IS_INVALID #define IS_INCOMPLETED_KEY IPP_IS_INCOMPLETE /* // ========================================================= // RSA Cryptography // ========================================================= */ #define MIN_RSA_SIZE (8) #define MAX_RSA_SIZE (16*1024) typedef struct _cpRSA IppsRSAState; /* key types */ typedef enum { ippRSApublic = 0x20000000, IppRSApublic = 0x20000000, ippRSAprivate = 0x40000000, IppRSAprivate = 0x40000000 } IppRSAKeyType; /* key component's tag */ typedef enum { ippRSAkeyN = 0x01, IppRSAkeyN = 0x01, ippRSAkeyE = 0x02, IppRSAkeyE = 0x02, ippRSAkeyD = 0x04, IppRSAkeyD = 0x04, ippRSAkeyP = 0x08, IppRSAkeyP = 0x08, ippRSAkeyQ = 0x10, IppRSAkeyQ = 0x10, ippRSAkeyDp = 0x20, IppRSAkeyDp = 0x20, ippRSAkeyDq = 0x40, IppRSAkeyDq = 0x40, ippRSAkeyQinv = 0x80, IppRSAkeyQinv = 0x80 } IppRSAKeyTag; typedef struct _cpRSA_public_key IppsRSAPublicKeyState; typedef struct _cpRSA_private_key IppsRSAPrivateKeyState; /* // ========================================================= // DL Cryptography // ========================================================= */ #define MIN_DLP_BITSIZE (512) #define MIN_DLP_BITSIZER (160) #define MIN_DLPDH_BITSIZE (512) #define MIN_DLPDH_BITSIZER (160) #define DEF_DLPDH_BITSIZER (160) #define MIN_DLPDSA_BITSIZE (512) #define MAX_DLPDSA_BITSIZE (1024) #define MIN_DLPDSA_BITSIZER (160) #define DEF_DLPDSA_BITSIZER (160) #define MAX_DLPDSA_BITSIZER (160) #define MIN_DLPDSA_SEEDSIZE (160) typedef struct _cpDLP IppsDLPState; /* domain parameter tags */ typedef enum { ippDLPkeyP = 0x01, IppDLPkeyP = 0x01, ippDLPkeyR = 0x02, IppDLPkeyR = 0x02, ippDLPkeyG = 0x04, IppDLPkeyG = 0x04 } IppDLPKeyTag; typedef enum { ippDLValid, /* validation pass successfully */ ippDLBaseIsEven, /* !(P is odd) */ ippDLOrderIsEven, /* !(R is odd) */ ippDLInvalidBaseRange, /* !(2^(L-1) < P < 2^L) */ ippDLInvalidOrderRange, /* !(2^(M-1) < R < 2^M) */ ippDLCompositeBase, ippDLCompositeOrder, ippDLInvalidCofactor, /* !( R|(P-1) ) */ ippDLInvalidGenerator, /* !( G^R == 1 (mod P) ) */ /* !(1 < G < (P-1)) */ ippDLInvalidPrivateKey, /* !(1 < private < (R-1)) */ ippDLInvalidPublicKey, /* !(1 < public <=(P-1)) */ ippDLInvalidKeyPair, /* !(G^private == public */ ippDLInvalidSignature /* invalid signature */ } IppDLResult; /* // ========================================================= // EC Cryptography // ========================================================= */ #define EC_GFP_MAXBITSIZE (1024) /* operation result */ typedef enum { ippECValid, /* validation pass successfully */ ippECCompositeBase, /* field based on composite */ ippECComplicatedBase, /* number of non-zero terms in the polynomial (> PRIME_ARR_MAX) */ ippECIsZeroDiscriminant,/* zero discriminant */ ippECCompositeOrder, /* composite order of base point */ ippECInvalidOrder, /* invalid base point order */ ippECIsWeakMOV, /* weak Meneze-Okamoto-Vanstone reduction attack */ ippECIsWeakSSSA, /* weak Semaev-Smart,Satoh-Araki reduction attack */ ippECIsSupersingular, /* supersingular curve */ ippECInvalidPrivateKey, /* !(0 < Private < order) */ ippECInvalidPublicKey, /* (order*PublicKey != Infinity) */ ippECInvalidKeyPair, /* (Private*BasePoint != PublicKey) */ ippECPointOutOfGroup, /* out of group (order*P != Infinity) */ ippECPointIsAtInfinite, /* point (P=(Px,Py)) at Infinity */ ippECPointIsNotValid, /* point (P=(Px,Py)) out-of EC */ ippECPointIsEqual, /* compared points are equal */ ippECPointIsNotEqual, /* compared points are different */ ippECInvalidSignature /* invalid signature */ } IppECResult; /* domain parameter set/get flags */ typedef enum { ippECarbitrary =0x00000, IppECCArbitrary = 0x00000, /* arbitrary ECC */ ippECPstd = 0x10000, IppECCPStd = 0x10000, /* random (recommended) EC over FG(p): */ ippECPstd112r1 = ippECPstd, IppECCPStd112r1 = IppECCPStd, /* secp112r1 curve */ ippECPstd112r2 = ippECPstd+1, IppECCPStd112r2 = IppECCPStd+1, /* secp112r2 curve */ ippECPstd128r1 = ippECPstd+2, IppECCPStd128r1 = IppECCPStd+2, /* secp128r1 curve */ ippECPstd128r2 = ippECPstd+3, IppECCPStd128r2 = IppECCPStd+3, /* secp128r2 curve */ ippECPstd160r1 = ippECPstd+4, IppECCPStd160r1 = IppECCPStd+4, /* secp160r1 curve */ ippECPstd160r2 = ippECPstd+5, IppECCPStd160r2 = IppECCPStd+5, /* secp160r2 curve */ ippECPstd192r1 = ippECPstd+6, IppECCPStd192r1 = IppECCPStd+6, /* secp192r1 curve */ ippECPstd224r1 = ippECPstd+7, IppECCPStd224r1 = IppECCPStd+7, /* secp224r1 curve */ ippECPstd256r1 = ippECPstd+8, IppECCPStd256r1 = IppECCPStd+8, /* secp256r1 curve */ ippECPstd384r1 = ippECPstd+9, IppECCPStd384r1 = IppECCPStd+9, /* secp384r1 curve */ ippECPstd521r1 = ippECPstd+10, IppECCPStd521r1 = IppECCPStd+10, /* secp521r1 curve */ ippECPstdSM2 = ippECPstd+11, IppECCPStdSM2 = IppECCPStd+11, /* TMP SM2 curve */ ippEC_TPM_SM2_P256= ippECPstd+11, ippEC_TPM_BN_P256 = ippECPstd+12, /* TPM BN_P256 curve */ /* curves over binary finit fields are not supported in Intel® IPP 9.0 */ IppECCBStd = 0x20000, /* random (recommended) EC over FG(2^m): */ IppECCBStd113r1 = IppECCBStd, /* sect113r1 curve */ IppECCBStd113r2 = IppECCBStd+1, /* sect113r2 curve */ IppECCBStd131r1 = IppECCBStd+2, /* sect131r1 curve */ IppECCBStd131r2 = IppECCBStd+3, /* sect131r2 curve */ IppECCBStd163r1 = IppECCBStd+4, /* sect163r1 curve */ IppECCBStd163r2 = IppECCBStd+5, /* sect163r2 curve */ IppECCBStd193r1 = IppECCBStd+6, /* sect193r1 curve */ IppECCBStd193r2 = IppECCBStd+7, /* sect193r2 curve */ IppECCBStd233r1 = IppECCBStd+8, /* sect233r1 curve */ IppECCBStd283r1 = IppECCBStd+9, /* sect283r1 curve */ IppECCBStd409r1 = IppECCBStd+10, /* sect409r1 curve */ IppECCBStd571r1 = IppECCBStd+11, /* sect571r1 curve */ IppECCKStd = 0x40000, /* Koblitz (recommended) EC over FG(2^m): */ IppECCBStd163k1 = IppECCKStd, /* Koblitz 163 curve */ IppECCBStd233k1 = IppECCKStd+1, /* Koblitz 233 curve */ IppECCBStd239k1 = IppECCKStd+2, /* Koblitz 239 curve */ IppECCBStd283k1 = IppECCKStd+3, /* Koblitz 283 curve */ IppECCBStd409k1 = IppECCKStd+4, /* Koblitz 409 curve */ IppECCBStd571k1 = IppECCKStd+5 /* Koblitz 571 curve */ } IppsECType, IppECCType; /* // GF over prime and its extension */ #define IPP_MIN_GF_CHAR (3) /* min characteristic of GF */ #define IPP_MIN_GF_BITSIZE (2) /* min bitsize of element over prime GF */ #define IPP_MAX_GF_BITSIZE (1024) /* max bitsize of element over prime GF */ #define IPP_MIN_GF_EXTDEG (2) /* min GF extension degree */ #define IPP_MAX_GF_EXTDEG (8) /* max GF extension degree */ #define IPP_MAX_EXPONENT_NUM (6) /* max number of exponents, equals to LOG_CACHE_LINE_SIZE */ typedef struct _cpGFpMethod IppsGFpMethod; typedef struct _cpGFp IppsGFpState; typedef struct _cpGFpElement IppsGFpElement; typedef struct _cpGFpEC IppsGFpECState; typedef struct _cpGFpECPoint IppsGFpECPoint; typedef struct _cpGFpEC IppsECCPState; typedef struct _cpGFpECPoint IppsECCPPointState; typedef struct { int hashSize; int msgBlockSize; } IppsHashInfo; typedef struct { //const IppsGFpState* pBasicGF; //const IppsGFpState* pGroundGF; int parentGFdegree; int basicGFdegree; int basicElmBitSize; } IppsGFpInfo; /* SM3 Digest Bytes Size */ #define IPP_SM3_DIGEST_BYTESIZE ((IPP_SM3_DIGEST_BITSIZE + 7) / 8) typedef struct _cpStateECES_SM2 IppsECESState_SM2; typedef enum { ippKESM2Requester = 0xF, /* corresponds to A user/participant */ ippKESM2Responder /* corresponds to B user/participant */ } IppsKeyExchangeRoleSM2; typedef struct _GFpECKeyExchangeSM2 IppsGFpECKeyExchangeSM2State; #endif /* !defined( _OWN_BLDPCS ) */ IPPAPI( IppStatus, ippcpGetCpuFeatures, ( Ipp64u* pFeaturesMask )) IPPAPI( IppStatus, ippcpSetCpuFeatures, ( Ipp64u features )) IPPAPI( Ipp64u, ippcpGetEnabledCpuFeatures, ( void ) ) IPPAPI( IppStatus, ippcpSetNumThreads, ( int numThr )) IPPAPI( IppStatus, ippcpInit,( void )) IPPAPI( IppStatus, ippcpGetNumThreads, (int* pNumThr) ) IPPAPI( const char*, ippcpGetStatusString, ( IppStatus StsCode )) IPPAPI( int, ippcpGetEnabledNumThreads, ( void ) ) IPPAPI( Ipp64u, ippcpGetCpuClocks, (void) ) #ifdef __cplusplus } #endif #endif /* !defined IPPCPDEFS_H__ || defined( _OWN_BLDPCS ) */