1 /******************************************************************************* 2 * Copyright 2012-2018 Intel Corporation 3 * All Rights Reserved. 4 * 5 * If this software was obtained under the Intel Simplified Software License, 6 * the following terms apply: 7 * 8 * The source code, information and material ("Material") contained herein is 9 * owned by Intel Corporation or its suppliers or licensors, and title to such 10 * Material remains with Intel Corporation or its suppliers or licensors. The 11 * Material contains proprietary information of Intel or its suppliers and 12 * licensors. The Material is protected by worldwide copyright laws and treaty 13 * provisions. No part of the Material may be used, copied, reproduced, 14 * modified, published, uploaded, posted, transmitted, distributed or disclosed 15 * in any way without Intel's prior express written permission. No license under 16 * any patent, copyright or other intellectual property rights in the Material 17 * is granted to or conferred upon you, either expressly, by implication, 18 * inducement, estoppel or otherwise. Any license under such intellectual 19 * property rights must be express and approved by Intel in writing. 20 * 21 * Unless otherwise agreed by Intel in writing, you may not remove or alter this 22 * notice or any other notice embedded in Materials by Intel or Intel's 23 * suppliers or licensors in any way. 24 * 25 * 26 * If this software was obtained under the Apache License, Version 2.0 (the 27 * "License"), the following terms apply: 28 * 29 * You may not use this file except in compliance with the License. You may 30 * obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 31 * 32 * 33 * Unless required by applicable law or agreed to in writing, software 34 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 35 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 36 * 37 * See the License for the specific language governing permissions and 38 * limitations under the License. 39 *******************************************************************************/ 40 41 /* 42 // Intel(R) Integrated Performance Primitives (Intel(R) IPP) 43 // Cryptographic Primitives (ippCP) definitions 44 // Basic Types and Macro Definitions 45 // 46 // 47 */ 48 49 50 #ifndef IPPBASE_H__ 51 #define IPPBASE_H__ 52 53 #ifdef __cplusplus 54 extern "C" { 55 #endif 56 #if defined (_WIN64) 57 #define INTEL_PLATFORM "intel64/" 58 #elif defined (_WIN32) 59 #define INTEL_PLATFORM "ia32/" 60 #endif 61 62 #if !defined( IPPAPI ) 63 64 #if defined( IPP_W32DLL ) && (defined( _WIN32 ) || defined( _WIN64 )) 65 #if defined( _MSC_VER ) || defined( __ICL ) 66 #define IPPAPI( type,name,arg ) \ 67 __declspec(dllimport) type IPP_STDCALL name arg; 68 #else 69 #define IPPAPI( type,name,arg ) type IPP_STDCALL name arg; 70 #endif 71 #else 72 #define IPPAPI( type,name,arg ) type IPP_STDCALL name arg; 73 #endif 74 75 #endif 76 77 #if (defined( __ICL ) || defined( __ECL ) || defined(_MSC_VER)) && !defined( _PCS ) && !defined( _PCS_GENSTUBS ) 78 #if( __INTEL_COMPILER >= 1100 ) /* icl 11.0 supports additional comment */ 79 #if( _MSC_VER >= 1400 ) 80 #define IPP_DEPRECATED( comment ) __declspec( deprecated ( comment )) 81 #else 82 #pragma message ("your icl version supports additional comment for deprecated functions but it can't be displayed") 83 #pragma message ("because internal _MSC_VER macro variable setting requires compatibility with MSVC7.1") 84 #pragma message ("use -Qvc8 switch for icl command line to see these additional comments") 85 #define IPP_DEPRECATED( comment ) __declspec( deprecated ) 86 #endif 87 #elif( _MSC_FULL_VER >= 140050727 )&&( !defined( __INTEL_COMPILER )) /* VS2005 supports additional comment */ 88 #define IPP_DEPRECATED( comment ) __declspec( deprecated ( comment )) 89 #elif( _MSC_VER <= 1200 )&&( !defined( __INTEL_COMPILER )) /* VS 6 doesn't support deprecation */ 90 #define IPP_DEPRECATED( comment ) 91 #else 92 #define IPP_DEPRECATED( comment ) __declspec( deprecated ) 93 #endif 94 #elif (defined(__ICC) || defined(__ECC) || defined( __GNUC__ )) && !defined( _PCS ) && !defined( _PCS_GENSTUBS ) 95 #if defined( __GNUC__ ) 96 #if __GNUC__ >= 4 && __GNUC_MINOR__ >= 5 97 #define IPP_DEPRECATED( message ) __attribute__(( deprecated( message ))) 98 #else 99 #define IPP_DEPRECATED( message ) __attribute__(( deprecated )) 100 #endif 101 #else 102 #define IPP_DEPRECATED( comment ) __attribute__(( deprecated )) 103 #endif 104 #else 105 #define IPP_DEPRECATED( comment ) 106 #endif 107 108 #if (defined( __ICL ) || defined( __ECL ) || defined(_MSC_VER)) 109 #if !defined( IPP_NO_DEFAULT_LIB ) 110 #if (( defined( _IPP_PARALLEL_DYNAMIC ) && !defined( _IPP_PARALLEL_STATIC ) && !defined( _IPP_SEQUENTIAL_DYNAMIC ) && !defined( _IPP_SEQUENTIAL_STATIC )) || \ 111 (!defined( _IPP_PARALLEL_DYNAMIC ) && defined( _IPP_PARALLEL_STATIC ) && !defined( _IPP_SEQUENTIAL_DYNAMIC ) && !defined( _IPP_SEQUENTIAL_STATIC )) || \ 112 (!defined( _IPP_PARALLEL_DYNAMIC ) && !defined( _IPP_PARALLEL_STATIC ) && defined( _IPP_SEQUENTIAL_DYNAMIC ) && !defined( _IPP_SEQUENTIAL_STATIC )) || \ 113 (!defined( _IPP_PARALLEL_DYNAMIC ) && !defined( _IPP_PARALLEL_STATIC ) && !defined( _IPP_SEQUENTIAL_DYNAMIC ) && defined( _IPP_SEQUENTIAL_STATIC ))) 114 #elif (!defined( _IPP_PARALLEL_DYNAMIC ) && !defined( _IPP_PARALLEL_STATIC ) && !defined( _IPP_SEQUENTIAL_DYNAMIC ) && !defined( _IPP_SEQUENTIAL_STATIC )) 115 #define IPP_NO_DEFAULT_LIB 116 #else 117 #error Illegal combination of _IPP_PARALLEL_DYNAMIC/_IPP_PARALLEL_STATIC/_IPP_SEQUENTIAL_DYNAMIC/_IPP_SEQUENTIAL_STATIC, only one definition can be defined 118 #endif 119 #endif 120 #else 121 #define IPP_NO_DEFAULT_LIB 122 #if (defined( _IPP_PARALLEL_DYNAMIC ) || defined( _IPP_PARALLEL_STATIC ) || defined(_IPP_SEQUENTIAL_DYNAMIC) || defined(_IPP_SEQUENTIAL_STATIC)) 123 #pragma message ("defines _IPP_PARALLEL_DYNAMIC/_IPP_PARALLEL_STATIC/_IPP_SEQUENTIAL_DYNAMIC/_IPP_SEQUENTIAL_STATIC do not have any effect in current configuration") 124 #endif 125 #endif 126 127 #if !defined( IPP_NO_DEFAULT_LIB ) 128 #if defined( _IPP_PARALLEL_STATIC ) 129 #pragma comment( lib, "libiomp5md" ) 130 #endif 131 #endif 132 133 #if defined( _WIN32 ) || defined ( _WIN64 ) 134 #define IPP_STDCALL __stdcall 135 #define IPP_CDECL __cdecl 136 #define IPP_INT64 __int64 137 #define IPP_UINT64 unsigned __int64 138 #else 139 #define IPP_STDCALL 140 #define IPP_CDECL 141 #define IPP_INT64 long long 142 #define IPP_UINT64 unsigned long long 143 #endif 144 145 #define IPP_COUNT_OF( obj ) (sizeof(obj)/sizeof(obj[0])) 146 147 #define IPP_PI ( 3.14159265358979323846 ) /* ANSI C does not support M_PI */ 148 #define IPP_2PI ( 6.28318530717958647692 ) /* 2*pi */ 149 #define IPP_PI2 ( 1.57079632679489661923 ) /* pi/2 */ 150 #define IPP_PI4 ( 0.78539816339744830961 ) /* pi/4 */ 151 #define IPP_PI180 ( 0.01745329251994329577 ) /* pi/180 */ 152 #define IPP_RPI ( 0.31830988618379067154 ) /* 1/pi */ 153 #define IPP_SQRT2 ( 1.41421356237309504880 ) /* sqrt(2) */ 154 #define IPP_SQRT3 ( 1.73205080756887729353 ) /* sqrt(3) */ 155 #define IPP_LN2 ( 0.69314718055994530942 ) /* ln(2) */ 156 #define IPP_LN3 ( 1.09861228866810969139 ) /* ln(3) */ 157 #define IPP_E ( 2.71828182845904523536 ) /* e */ 158 #define IPP_RE ( 0.36787944117144232159 ) /* 1/e */ 159 #define IPP_EPS23 ( 1.19209289e-07f ) 160 #define IPP_EPS52 ( 2.2204460492503131e-016 ) 161 162 #define IPP_MAX_8U ( 0xFF ) 163 #define IPP_MAX_16U ( 0xFFFF ) 164 #define IPP_MAX_32U ( 0xFFFFFFFF ) 165 #define IPP_MIN_8U ( 0 ) 166 #define IPP_MIN_16U ( 0 ) 167 #define IPP_MIN_32U ( 0 ) 168 #define IPP_MIN_8S (-128 ) 169 #define IPP_MAX_8S ( 127 ) 170 #define IPP_MIN_16S (-32768 ) 171 #define IPP_MAX_16S ( 32767 ) 172 #define IPP_MIN_32S (-2147483647 - 1 ) 173 #define IPP_MAX_32S ( 2147483647 ) 174 #define IPP_MIN_64U ( 0 ) 175 176 #if defined( _WIN32 ) || defined ( _WIN64 ) 177 #define IPP_MAX_64S ( 9223372036854775807i64 ) 178 #define IPP_MIN_64S (-9223372036854775807i64 - 1 ) 179 #define IPP_MAX_64U ( 0xffffffffffffffffL ) /* 18446744073709551615 */ 180 #else 181 #define IPP_MAX_64S ( 9223372036854775807LL ) 182 #define IPP_MIN_64S (-9223372036854775807LL - 1 ) 183 #define IPP_MAX_64U ( 0xffffffffffffffffLL ) /* 18446744073709551615 */ 184 #endif 185 186 #define IPP_MINABS_32F ( 1.175494351e-38f ) 187 #define IPP_MAXABS_32F ( 3.402823466e+38f ) 188 #define IPP_EPS_32F ( 1.192092890e-07f ) 189 #define IPP_MINABS_64F ( 2.2250738585072014e-308 ) 190 #define IPP_MAXABS_64F ( 1.7976931348623158e+308 ) 191 #define IPP_EPS_64F ( 2.2204460492503131e-016 ) 192 193 #define IPP_MAX( a, b ) ( ((a) > (b)) ? (a) : (b) ) 194 #define IPP_MIN( a, b ) ( ((a) < (b)) ? (a) : (b) ) 195 196 #define IPP_ABS( a ) ( ((a) < 0) ? (-(a)) : (a) ) 197 198 typedef struct { 199 int major; /* e.g. 1 */ 200 int minor; /* e.g. 2 */ 201 int majorBuild; /* e.g. 3 */ 202 int build; /* e.g. 10, always >= majorBuild */ 203 char targetCpu[4]; /* corresponding to Intel(R) processor */ 204 const char* Name; /* e.g. "ippsw7" */ 205 const char* Version; /* e.g. "v1.2 Beta" */ 206 const char* BuildDate; /* e.g. "Jul 20 99" */ 207 } IppLibraryVersion; 208 209 typedef unsigned char Ipp8u; 210 typedef unsigned short Ipp16u; 211 typedef unsigned int Ipp32u; 212 typedef signed char Ipp8s; 213 typedef signed short Ipp16s; 214 typedef signed int Ipp32s; 215 typedef float Ipp32f; 216 typedef IPP_INT64 Ipp64s; 217 typedef IPP_UINT64 Ipp64u; 218 typedef double Ipp64f; 219 typedef Ipp16s Ipp16f; 220 221 typedef struct { 222 Ipp8s re; 223 Ipp8s im; 224 } Ipp8sc; 225 226 typedef struct { 227 Ipp16s re; 228 Ipp16s im; 229 } Ipp16sc; 230 231 typedef struct { 232 Ipp16u re; 233 Ipp16u im; 234 } Ipp16uc; 235 236 typedef struct { 237 Ipp32s re; 238 Ipp32s im; 239 } Ipp32sc; 240 241 typedef struct { 242 Ipp32f re; 243 Ipp32f im; 244 } Ipp32fc; 245 246 typedef struct { 247 Ipp64s re; 248 Ipp64s im; 249 } Ipp64sc; 250 251 typedef struct { 252 Ipp64f re; 253 Ipp64f im; 254 } Ipp64fc; 255 256 typedef enum { 257 ippUndef = -1, 258 ipp1u = 0, 259 ipp8u = 1, 260 ipp8uc = 2, 261 ipp8s = 3, 262 ipp8sc = 4, 263 ipp16u = 5, 264 ipp16uc = 6, 265 ipp16s = 7, 266 ipp16sc = 8, 267 ipp32u = 9, 268 ipp32uc = 10, 269 ipp32s = 11, 270 ipp32sc = 12, 271 ipp32f = 13, 272 ipp32fc = 14, 273 ipp64u = 15, 274 ipp64uc = 16, 275 ipp64s = 17, 276 ipp64sc = 18, 277 ipp64f = 19, 278 ipp64fc = 20 279 } IppDataType; 280 281 typedef enum { 282 ippFalse = 0, 283 ippTrue = 1 284 } IppBool; 285 286 #ifdef __cplusplus 287 } 288 #endif 289 290 #endif /* IPPBASE_H__ */ 291 292 #ifndef IPP_CPU_FEATURES__ 293 #define IPP_CPU_FEATURES__ 294 295 #define ippCPUID_MMX 0x00000001 /* Intel(R) architecture with MMX(TM) technology supported */ 296 #define ippCPUID_SSE 0x00000002 /* Intel(R) Streaming SIMD Extensions instruction set */ 297 #define ippCPUID_SSE2 0x00000004 /* Intel(R) Streaming SIMD Extensions 2 instruction set */ 298 #define ippCPUID_SSE3 0x00000008 /* Intel(R) Streaming SIMD Extensions 3 instruction set */ 299 #define ippCPUID_SSSE3 0x00000010 /* Supplemental Streaming SIMD Extensions 3 instruction set */ 300 #define ippCPUID_MOVBE 0x00000020 /* Intel(R) instruction MOVBE */ 301 #define ippCPUID_SSE41 0x00000040 /* Intel(R) Streaming SIMD Extensions 4.1 instruction set */ 302 #define ippCPUID_SSE42 0x00000080 /* Intel(R) Streaming SIMD Extensions 4.2 instruction set */ 303 #define ippCPUID_AVX 0x00000100 /* Intel(R) Advanced Vector Extensions instruction set */ 304 #define ippAVX_ENABLEDBYOS 0x00000200 /* Intel(R) Advanced Vector Extensions instruction set is supported by OS */ 305 #define ippCPUID_AES 0x00000400 /* Intel(R) AES New Instructions */ 306 #define ippCPUID_CLMUL 0x00000800 /* Intel(R) instruction PCLMULQDQ */ 307 #define ippCPUID_ABR 0x00001000 /* Reserved */ 308 #define ippCPUID_RDRAND 0x00002000 /* Intel(R) instruction RDRAND */ 309 #define ippCPUID_F16C 0x00004000 /* Intel(R) instruction F16C */ 310 #define ippCPUID_AVX2 0x00008000 /* Intel(R) Advanced Vector Extensions 2 */ 311 #define ippCPUID_ADCOX 0x00010000 /* Intel(R) instructions ADOX/ADCX */ 312 #define ippCPUID_RDSEED 0x00020000 /* Intel(R) instruction RDSEED */ 313 #define ippCPUID_PREFETCHW 0x00040000 /* Intel(R) instruction PREFETCHW */ 314 #define ippCPUID_SHA 0x00080000 /* Intel(R) Secure Hash Algorithm Extensions */ 315 #define ippCPUID_AVX512F 0x00100000 /* Intel(R) Advanced Vector Extensions 512 Foundation instruction set */ 316 #define ippCPUID_AVX512CD 0x00200000 /* Intel(R) Advanced Vector Extensions 512 CD instruction set */ 317 #define ippCPUID_AVX512ER 0x00400000 /* Intel(R) Advanced Vector Extensions 512 ER instruction set */ 318 #define ippCPUID_AVX512PF 0x00800000 /* Intel(R) Advanced Vector Extensions 512 PF instruction set */ 319 #define ippCPUID_AVX512BW 0x01000000 /* Intel(R) Advanced Vector Extensions 512 BW instruction set */ 320 #define ippCPUID_AVX512DQ 0x02000000 /* Intel(R) Advanced Vector Extensions 512 DQ instruction set */ 321 #define ippCPUID_AVX512VL 0x04000000 /* Intel(R) Advanced Vector Extensions 512 VL instruction set */ 322 #define ippCPUID_AVX512VBMI 0x08000000 /* Intel(R) Advanced Vector Extensions 512 Bit Manipulation instructions */ 323 #define ippCPUID_MPX 0x10000000 /* Intel(R) Memory Protection Extensions */ 324 #define ippCPUID_AVX512_4FMADDPS 0x20000000 /* Intel(R) Advanced Vector Extensions 512 DL floating-point single precision */ 325 #define ippCPUID_AVX512_4VNNIW 0x40000000 /* Intel(R) Advanced Vector Extensions 512 DL enhanced word variable precision */ 326 #define ippCPUID_KNC 0x80000000 /* Intel(R) Xeon Phi(TM) Coprocessor */ 327 #if defined( _WIN32 ) || defined ( _WIN64 ) 328 #define INT64_SUFFIX(name) name##L 329 #else 330 #define INT64_SUFFIX(name) name##LL 331 #endif 332 #define ippCPUID_AVX512IFMA INT64_SUFFIX(0x100000000) /* Intel(R) Advanced Vector Extensions 512 IFMA (PMADD52) instruction set */ 333 #define ippCPUID_NOCHECK INT64_SUFFIX(0x8000000000000000) /* Force ippSetCpuFeatures to set CPU features without check */ 334 #define ippCPUID_GETINFO_A INT64_SUFFIX(0x616f666e69746567) /* Force ippGetCpuFeatures to work as cpuid instruction */ 335 #define ippAVX512_ENABLEDBYOS INT64_SUFFIX(0x200000000) /* Intel(R) Advanced Vector Extensions 512 is supported by OS */ 336 337 338 #endif /* IPP_CPU_FEATURES__ */ 339 340 341 #ifndef IPPSTATUS_H__ 342 #define IPPSTATUS_H__ 343 344 #ifdef __cplusplus 345 extern "C" { 346 #endif 347 typedef signed int IppStatus; 348 349 /* start of common with ippCrypto part - any changes MUST be done in both repositories - IPP & ippCrypto */ 350 #define ippStsCpuNotSupportedErr -9999 /* The target CPU is not supported. */ 351 #define ippStsUnknownStatusCodeErr -216 /* Unknown status code. */ 352 #define ippStsLoadDynErr -221 /* Error when loading the dynamic library. */ 353 #define ippStsLengthErr -15 /* Incorrect value for string length. */ 354 #define ippStsNotSupportedModeErr -14 /* The requested mode is currently not supported. */ 355 #define ippStsContextMatchErr -13 /* Context parameter does not match the operation. */ 356 #define ippStsScaleRangeErr -12 /* Scale bounds are out of range. */ 357 #define ippStsOutOfRangeErr -11 /* Argument is out of range, or point is outside the image. */ 358 #define ippStsDivByZeroErr -10 /* An attempt to divide by zero. */ 359 #define ippStsMemAllocErr -9 /* Memory allocated for the operation is not enough.*/ 360 #define ippStsNullPtrErr -8 /* Null pointer error. */ 361 #define ippStsRangeErr -7 /* Incorrect values for bounds: the lower bound is greater than the upper bound. */ 362 #define ippStsSizeErr -6 /* Incorrect value for data size. */ 363 #define ippStsBadArgErr -5 /* Incorrect arg/param of the function. */ 364 #define ippStsNoMemErr -4 /* Not enough memory for the operation. */ 365 #define ippStsErr -2 /* Unknown/unspecified error */ 366 /* no errors */ 367 #define ippStsNoErr 0 /* No errors. */ 368 /* warnings */ 369 #define ippStsNoOperation 1 /* No operation has been executed. */ 370 #define ippStsDivByZero 2 /* Zero value(s) for the divisor in the Div function. */ 371 #define ippStsWaterfall 43 /* Cannot load required library, waterfall is used. */ 372 #define ippStsFeaturesCombination 51 /* Wrong combination of features. */ 373 /* end of common with ippCrypto part */ 374 375 #ifdef __cplusplus 376 } 377 #endif 378 379 #endif /* IPPSTATUS_H__ */ 380 381 /* ippCrypto specific statuses - any changes MUST be done in both repositories - IPP & ippCrypto */ 382 #define ippStsQuadraticNonResidueErr -1016 /* SQRT operation on quadratic non-residue value. */ 383 #define ippStsPointAtInfinity -1015 /* Point at infinity is detected. */ 384 #define ippStsOFBSizeErr -1014 /* Incorrect value for crypto OFB block size. */ 385 #define ippStsIncompleteContextErr -1013 /* Crypto: set up of context is not complete. */ 386 #define ippStsCTRSizeErr -1012 /* Incorrect value for crypto CTR block size. */ 387 #define ippStsEphemeralKeyErr -1011 /* ECC: Invalid ephemeral key. */ 388 #define ippStsMessageErr -1010 /* ECC: Invalid message digest. */ 389 #define ippStsShareKeyErr -1009 /* ECC: Invalid share key. */ 390 #define ippStsIvalidPrivateKey -1008 /* ECC: Invalid private key. */ 391 #define ippStsOutOfECErr -1007 /* ECC: Point out of EC. */ 392 #define ippStsECCInvalidFlagErr -1006 /* ECC: Invalid Flag. */ 393 #define ippStsUnderRunErr -1005 /* Error in data under run. */ 394 #define ippStsPaddingErr -1004 /* Detected padding error indicates the possible data corruption. */ 395 #define ippStsCFBSizeErr -1003 /* Incorrect value for crypto CFB block size. */ 396 #define ippStsPaddingSchemeErr -1002 /* Invalid padding scheme. */ 397 #define ippStsBadModulusErr -1001 /* Bad modulus caused a failure in module inversion. */ 398 #define ippStsInsufficientEntropy 25 /* Generation of the prime/key failed due to insufficient entropy in the random seed and stimulus bit string. */ 399 #define ippStsNotSupportedCpu 36 /* The CPU is not supported. */ 400 /* end of ippCrypto specific statuses - any changes MUST be done in both repositories - IPP & ippCrypto */ 401 402 #if (!defined IPPCPDEFS_H__) || defined( _OWN_BLDPCS ) 403 #define IPPCPDEFS_H__ 404 405 #ifdef __cplusplus 406 extern "C" { 407 #endif 408 409 410 411 #if !defined( _OWN_BLDPCS ) 412 413 typedef Ipp32u IppAlgId; 414 415 /* 416 // ========================================================= 417 // Symmetric Ciphers 418 // ========================================================= 419 */ 420 typedef enum { 421 ippPaddingNONE = 0, /*NONE = 0,*/ IppsCPPaddingNONE = 0, 422 ippPaddingPKCS7 = 1, /*PKCS7 = 1,*/ IppsCPPaddingPKCS7 = 1, 423 ippPaddingZEROS = 2, /*ZEROS = 2,*/ IppsCPPaddingZEROS = 2 424 } IppsPadding, IppsCPPadding; 425 426 typedef struct _cpDES IppsDESSpec; 427 typedef struct _cpRijndael128 IppsAESSpec; 428 typedef struct _cpRijndael128 IppsRijndael128Spec; 429 typedef struct _cpSMS4 IppsSMS4Spec; 430 431 /* TDES */ 432 #define DES_BLOCKSIZE (64) /* cipher blocksize (bits) */ 433 #define TDES_BLOCKSIZE DES_BLOCKSIZE 434 435 #define DES_KEYSIZE (64) /* cipher keysize (bits) */ 436 #define TDES_KEYSIZE DES_KEYSIZE 437 438 /* AES */ 439 #define IPP_AES_BLOCK_BITSIZE (128) /* cipher blocksizes (bits) */ 440 441 /* Rijndael */ 442 typedef enum { 443 ippRijndaelKey128 = 128, IppsRijndaelKey128 = 128, /* 128-bit key */ 444 ippRijndaelKey192 = 192, IppsRijndaelKey192 = 192, /* 192-bit key */ 445 ippRijndaelKey256 = 256, IppsRijndaelKey256 = 256 /* 256-bit key */ 446 } IppsRijndaelKeyLength; 447 448 /* AES-CCM (authentication & confidence) */ 449 typedef struct _cpAES_CCM IppsAES_CCMState; 450 /* AES-GCM (authentication & confidence) */ 451 typedef struct _cpAES_GCM IppsAES_GCMState; 452 /* AES-XTS (confidence) */ 453 typedef struct _cpAES_XTS IppsAES_XTSSpec; 454 455 /* SMS4-CCM (authentication & confidence) */ 456 typedef struct _cpSMS4_CCM IppsSMS4_CCMState; 457 458 /* 459 // ========================================================= 460 // ARCFOUR Stream Cipher 461 // ========================================================= 462 */ 463 typedef struct _cpARCfour IppsARCFourState; 464 465 #define IPP_ARCFOUR_KEYMAX_SIZE (256) /* max key length (bytes) */ 466 #define MAX_ARCFOUR_KEY_LEN IPP_ARCFOUR_KEYMAX_SIZE /* obsolete */ 467 468 /* 469 // ========================================================= 470 // One-Way Hash Functions 471 // ========================================================= 472 */ 473 typedef enum { 474 ippHashAlg_Unknown, 475 ippHashAlg_SHA1, 476 ippHashAlg_SHA256, 477 ippHashAlg_SHA224, 478 ippHashAlg_SHA512, 479 ippHashAlg_SHA384, 480 ippHashAlg_MD5, 481 ippHashAlg_SM3, 482 ippHashAlg_SHA512_224, 483 ippHashAlg_SHA512_256, 484 ippHashAlg_MaxNo 485 } IppHashAlgId; 486 487 #define IPP_ALG_HASH_UNKNOWN (ippHashAlg_Unknown) /* unknown */ 488 #define IPP_ALG_HASH_SHA1 (ippHashAlg_SHA1) /* SHA1 */ 489 #define IPP_ALG_HASH_SHA256 (ippHashAlg_SHA256) /* SHA256 */ 490 #define IPP_ALG_HASH_SHA224 (ippHashAlg_SHA224) /* SHA224 or SHA256/224 */ 491 #define IPP_ALG_HASH_SHA512 (ippHashAlg_SHA512) /* SHA512 */ 492 #define IPP_ALG_HASH_SHA384 (ippHashAlg_SHA384) /* SHA384 or SHA512/384 */ 493 #define IPP_ALG_HASH_MD5 (ippHashAlg_MD5) /* MD5 */ 494 #define IPP_ALG_HASH_SM3 (ippHashAlg_SM3) /* SM3 */ 495 #define IPP_ALG_HASH_SHA512_224 (ippHashAlg_SHA512_224) /* SHA512/224 */ 496 #define IPP_ALG_HASH_SHA512_256 (ippHashAlg_SHA512_256) /* SHA512/256 */ 497 #define IPP_ALG_HASH_LIMIT (ippHashAlg_MaxNo) /* hash alg limiter*/ 498 499 typedef struct _cpSHA1 IppsSHA1State; 500 typedef struct _cpSHA256 IppsSHA256State; 501 typedef struct _cpSHA256 IppsSHA224State; 502 typedef struct _cpSHA512 IppsSHA512State; 503 typedef struct _cpSHA512 IppsSHA384State; 504 typedef struct _cpMD5 IppsMD5State; 505 typedef struct _cpSM3 IppsSM3State; 506 typedef struct _cpHashCtx IppsHashState; 507 508 typedef struct _cpHashMethod_rmf IppsHashMethod; 509 typedef struct _cpHashCtx_rmf IppsHashState_rmf; 510 511 512 /* MGF */ 513 typedef IppStatus (IPP_STDCALL *IppMGF)(const Ipp8u* pSeed, int seedLen, Ipp8u* pMask, int maskLen); 514 /* HASH function */ 515 typedef IppStatus (IPP_STDCALL *IppHASH)(const Ipp8u* pMsg, int len, Ipp8u* pMD); 516 517 #define IPP_SHA1_DIGEST_BITSIZE 160 /* digest size (bits) */ 518 #define IPP_SHA256_DIGEST_BITSIZE 256 519 #define IPP_SHA224_DIGEST_BITSIZE 224 520 #define IPP_SHA384_DIGEST_BITSIZE 384 521 #define IPP_SHA512_DIGEST_BITSIZE 512 522 #define IPP_MD5_DIGEST_BITSIZE 128 523 #define IPP_SM3_DIGEST_BITSIZE 256 524 #define IPP_SHA512_224_DIGEST_BITSIZE 224 525 #define IPP_SHA512_256_DIGEST_BITSIZE 256 526 527 /* 528 // ========================================================= 529 // Keyed-Hash Message Authentication Codes 530 // ========================================================= 531 */ 532 typedef struct _cpHMAC IppsHMACState; 533 typedef struct _cpHMAC IppsHMACSHA1State; 534 typedef struct _cpHMAC IppsHMACSHA256State; 535 typedef struct _cpHMAC IppsHMACSHA224State; 536 typedef struct _cpHMAC IppsHMACSHA384State; 537 typedef struct _cpHMAC IppsHMACSHA512State; 538 typedef struct _cpHMAC IppsHMACMD5State; 539 typedef struct _cpHMAC_rmf IppsHMACState_rmf; 540 541 /* 542 // ========================================================= 543 // Data Authentication Codes 544 // ========================================================= 545 */ 546 typedef struct _cpAES_CMAC IppsAES_CMACState; 547 548 /* 549 // ========================================================= 550 // Big Number Integer Arithmetic 551 // ========================================================= 552 */ 553 #define BN_MAXBITSIZE (16*1024) /* bn max size (bits) */ 554 555 556 typedef enum { 557 ippBigNumNEG = 0, IppsBigNumNEG = 0, 558 ippBigNumPOS = 1, IppsBigNumPOS = 1 559 } IppsBigNumSGN; 560 561 typedef enum { 562 ippBinaryMethod = 0, IppsBinaryMethod = 0, 563 ippSlidingWindows = 1, IppsSlidingWindows = 1 564 } IppsExpMethod; 565 566 typedef struct _cpBigNum IppsBigNumState; 567 typedef struct _cpMontgomery IppsMontState; 568 typedef struct _cpPRNG IppsPRNGState; 569 typedef struct _cpPrime IppsPrimeState; 570 571 /* External Bit Supplier */ 572 typedef IppStatus (IPP_STDCALL *IppBitSupplier)(Ipp32u* pRand, int nBits, void* pEbsParams); 573 574 #define IPP_IS_EQ (0) 575 #define IPP_IS_GT (1) 576 #define IPP_IS_LT (2) 577 #define IPP_IS_NE (3) 578 #define IPP_IS_NA (4) 579 580 #define IPP_IS_PRIME (5) 581 #define IPP_IS_COMPOSITE (6) 582 583 #define IPP_IS_VALID (7) 584 #define IPP_IS_INVALID (8) 585 #define IPP_IS_INCOMPLETE (9) 586 #define IPP_IS_ATINFINITY (10) 587 588 #define IS_ZERO IPP_IS_EQ 589 #define GREATER_THAN_ZERO IPP_IS_GT 590 #define LESS_THAN_ZERO IPP_IS_LT 591 #define IS_PRIME IPP_IS_PRIME 592 #define IS_COMPOSITE IPP_IS_COMPOSITE 593 #define IS_VALID_KEY IPP_IS_VALID 594 #define IS_INVALID_KEY IPP_IS_INVALID 595 #define IS_INCOMPLETED_KEY IPP_IS_INCOMPLETE 596 597 /* 598 // ========================================================= 599 // RSA Cryptography 600 // ========================================================= 601 */ 602 #define MIN_RSA_SIZE (8) 603 #define MAX_RSA_SIZE (16*1024) 604 605 typedef struct _cpRSA IppsRSAState; 606 607 /* key types */ 608 typedef enum { 609 ippRSApublic = 0x20000000, IppRSApublic = 0x20000000, 610 ippRSAprivate = 0x40000000, IppRSAprivate = 0x40000000 611 } IppRSAKeyType; 612 613 /* key component's tag */ 614 typedef enum { 615 ippRSAkeyN = 0x01, IppRSAkeyN = 0x01, 616 ippRSAkeyE = 0x02, IppRSAkeyE = 0x02, 617 ippRSAkeyD = 0x04, IppRSAkeyD = 0x04, 618 ippRSAkeyP = 0x08, IppRSAkeyP = 0x08, 619 ippRSAkeyQ = 0x10, IppRSAkeyQ = 0x10, 620 ippRSAkeyDp = 0x20, IppRSAkeyDp = 0x20, 621 ippRSAkeyDq = 0x40, IppRSAkeyDq = 0x40, 622 ippRSAkeyQinv = 0x80, IppRSAkeyQinv = 0x80 623 } IppRSAKeyTag; 624 625 typedef struct _cpRSA_public_key IppsRSAPublicKeyState; 626 typedef struct _cpRSA_private_key IppsRSAPrivateKeyState; 627 628 629 /* 630 // ========================================================= 631 // DL Cryptography 632 // ========================================================= 633 */ 634 #define MIN_DLP_BITSIZE (512) 635 #define MIN_DLP_BITSIZER (160) 636 637 #define MIN_DLPDH_BITSIZE (512) 638 #define MIN_DLPDH_BITSIZER (160) 639 #define DEF_DLPDH_BITSIZER (160) 640 641 #define MIN_DLPDSA_BITSIZE (512) 642 #define MAX_DLPDSA_BITSIZE (1024) 643 #define MIN_DLPDSA_BITSIZER (160) 644 #define DEF_DLPDSA_BITSIZER (160) 645 #define MAX_DLPDSA_BITSIZER (160) 646 #define MIN_DLPDSA_SEEDSIZE (160) 647 648 typedef struct _cpDLP IppsDLPState; 649 650 /* domain parameter tags */ 651 typedef enum { 652 ippDLPkeyP = 0x01, IppDLPkeyP = 0x01, 653 ippDLPkeyR = 0x02, IppDLPkeyR = 0x02, 654 ippDLPkeyG = 0x04, IppDLPkeyG = 0x04 655 } IppDLPKeyTag; 656 657 typedef enum { 658 ippDLValid, /* validation pass successfully */ 659 660 ippDLBaseIsEven, /* !(P is odd) */ 661 ippDLOrderIsEven, /* !(R is odd) */ 662 ippDLInvalidBaseRange, /* !(2^(L-1) < P < 2^L) */ 663 ippDLInvalidOrderRange, /* !(2^(M-1) < R < 2^M) */ 664 ippDLCompositeBase, 665 ippDLCompositeOrder, 666 ippDLInvalidCofactor, /* !( R|(P-1) ) */ 667 ippDLInvalidGenerator, /* !( G^R == 1 (mod P) ) */ 668 /* !(1 < G < (P-1)) */ 669 ippDLInvalidPrivateKey, /* !(1 < private < (R-1)) */ 670 ippDLInvalidPublicKey, /* !(1 < public <=(P-1)) */ 671 ippDLInvalidKeyPair, /* !(G^private == public */ 672 673 ippDLInvalidSignature /* invalid signature */ 674 } IppDLResult; 675 676 /* 677 // ========================================================= 678 // EC Cryptography 679 // ========================================================= 680 */ 681 #define EC_GFP_MAXBITSIZE (1024) 682 683 /* operation result */ 684 typedef enum { 685 ippECValid, /* validation pass successfully */ 686 687 ippECCompositeBase, /* field based on composite */ 688 ippECComplicatedBase, /* number of non-zero terms in the polynomial (> PRIME_ARR_MAX) */ 689 ippECIsZeroDiscriminant,/* zero discriminant */ 690 ippECCompositeOrder, /* composite order of base point */ 691 ippECInvalidOrder, /* invalid base point order */ 692 ippECIsWeakMOV, /* weak Meneze-Okamoto-Vanstone reduction attack */ 693 ippECIsWeakSSSA, /* weak Semaev-Smart,Satoh-Araki reduction attack */ 694 ippECIsSupersingular, /* supersingular curve */ 695 696 ippECInvalidPrivateKey, /* !(0 < Private < order) */ 697 ippECInvalidPublicKey, /* (order*PublicKey != Infinity) */ 698 ippECInvalidKeyPair, /* (Private*BasePoint != PublicKey) */ 699 700 ippECPointOutOfGroup, /* out of group (order*P != Infinity) */ 701 ippECPointIsAtInfinite, /* point (P=(Px,Py)) at Infinity */ 702 ippECPointIsNotValid, /* point (P=(Px,Py)) out-of EC */ 703 704 ippECPointIsEqual, /* compared points are equal */ 705 ippECPointIsNotEqual, /* compared points are different */ 706 707 ippECInvalidSignature /* invalid signature */ 708 } IppECResult; 709 710 /* domain parameter set/get flags */ 711 typedef enum { 712 ippECarbitrary =0x00000, IppECCArbitrary = 0x00000, /* arbitrary ECC */ 713 714 ippECPstd = 0x10000, IppECCPStd = 0x10000, /* random (recommended) EC over FG(p): */ 715 ippECPstd112r1 = ippECPstd, IppECCPStd112r1 = IppECCPStd, /* secp112r1 curve */ 716 ippECPstd112r2 = ippECPstd+1, IppECCPStd112r2 = IppECCPStd+1, /* secp112r2 curve */ 717 ippECPstd128r1 = ippECPstd+2, IppECCPStd128r1 = IppECCPStd+2, /* secp128r1 curve */ 718 ippECPstd128r2 = ippECPstd+3, IppECCPStd128r2 = IppECCPStd+3, /* secp128r2 curve */ 719 ippECPstd160r1 = ippECPstd+4, IppECCPStd160r1 = IppECCPStd+4, /* secp160r1 curve */ 720 ippECPstd160r2 = ippECPstd+5, IppECCPStd160r2 = IppECCPStd+5, /* secp160r2 curve */ 721 ippECPstd192r1 = ippECPstd+6, IppECCPStd192r1 = IppECCPStd+6, /* secp192r1 curve */ 722 ippECPstd224r1 = ippECPstd+7, IppECCPStd224r1 = IppECCPStd+7, /* secp224r1 curve */ 723 ippECPstd256r1 = ippECPstd+8, IppECCPStd256r1 = IppECCPStd+8, /* secp256r1 curve */ 724 ippECPstd384r1 = ippECPstd+9, IppECCPStd384r1 = IppECCPStd+9, /* secp384r1 curve */ 725 ippECPstd521r1 = ippECPstd+10, IppECCPStd521r1 = IppECCPStd+10, /* secp521r1 curve */ 726 ippECPstdSM2 = ippECPstd+11, IppECCPStdSM2 = IppECCPStd+11, /* TMP SM2 curve */ 727 ippEC_TPM_SM2_P256= ippECPstd+11, 728 ippEC_TPM_BN_P256 = ippECPstd+12, /* TPM BN_P256 curve */ 729 730 /* curves over binary finit fields are not supported in Intel(R) IPP 9.0 */ 731 IppECCBStd = 0x20000, /* random (recommended) EC over FG(2^m): */ 732 IppECCBStd113r1 = IppECCBStd, /* sect113r1 curve */ 733 IppECCBStd113r2 = IppECCBStd+1, /* sect113r2 curve */ 734 IppECCBStd131r1 = IppECCBStd+2, /* sect131r1 curve */ 735 IppECCBStd131r2 = IppECCBStd+3, /* sect131r2 curve */ 736 IppECCBStd163r1 = IppECCBStd+4, /* sect163r1 curve */ 737 IppECCBStd163r2 = IppECCBStd+5, /* sect163r2 curve */ 738 IppECCBStd193r1 = IppECCBStd+6, /* sect193r1 curve */ 739 IppECCBStd193r2 = IppECCBStd+7, /* sect193r2 curve */ 740 IppECCBStd233r1 = IppECCBStd+8, /* sect233r1 curve */ 741 IppECCBStd283r1 = IppECCBStd+9, /* sect283r1 curve */ 742 IppECCBStd409r1 = IppECCBStd+10, /* sect409r1 curve */ 743 IppECCBStd571r1 = IppECCBStd+11, /* sect571r1 curve */ 744 745 IppECCKStd = 0x40000, /* Koblitz (recommended) EC over FG(2^m): */ 746 IppECCBStd163k1 = IppECCKStd, /* Koblitz 163 curve */ 747 IppECCBStd233k1 = IppECCKStd+1, /* Koblitz 233 curve */ 748 IppECCBStd239k1 = IppECCKStd+2, /* Koblitz 239 curve */ 749 IppECCBStd283k1 = IppECCKStd+3, /* Koblitz 283 curve */ 750 IppECCBStd409k1 = IppECCKStd+4, /* Koblitz 409 curve */ 751 IppECCBStd571k1 = IppECCKStd+5 /* Koblitz 571 curve */ 752 } IppsECType, IppECCType; 753 754 /* 755 // GF over prime and its extension 756 */ 757 #define IPP_MIN_GF_CHAR (3) /* min characteristic of GF */ 758 759 #define IPP_MIN_GF_BITSIZE (2) /* min bitsize of element over prime GF */ 760 #define IPP_MAX_GF_BITSIZE (1024) /* max bitsize of element over prime GF */ 761 762 #define IPP_MIN_GF_EXTDEG (2) /* min GF extension degree */ 763 #define IPP_MAX_GF_EXTDEG (8) /* max GF extension degree */ 764 765 #define IPP_MAX_EXPONENT_NUM (6) /* max number of exponents, equals to LOG_CACHE_LINE_SIZE */ 766 767 typedef struct _cpGFpMethod IppsGFpMethod; 768 769 typedef struct _cpGFp IppsGFpState; 770 typedef struct _cpGFpElement IppsGFpElement; 771 772 typedef struct _cpGFpEC IppsGFpECState; 773 typedef struct _cpGFpECPoint IppsGFpECPoint; 774 775 typedef struct _cpGFpEC IppsECCPState; 776 typedef struct _cpGFpECPoint IppsECCPPointState; 777 778 typedef struct { 779 const IppsGFpState* pBasicGF; 780 const IppsGFpState* pGroundGF; 781 int basicGFdegree; 782 int groundGFdegree; 783 int elementLen; 784 } IppsGFpInfo; 785 786 typedef struct _cpStateECES_SM2 IppsECESState_SM2; 787 788 #endif /* !defined( _OWN_BLDPCS ) */ 789 790 #ifndef _PCS 791 IPPAPI( IppStatus, ippcpGetCpuFeatures, ( Ipp64u* pFeaturesMask )) 792 IPPAPI( IppStatus, ippcpSetCpuFeatures, ( Ipp64u features )) 793 IPPAPI( Ipp64u, ippcpGetEnabledCpuFeatures, ( void ) ) 794 IPPAPI( IppStatus, ippcpSetNumThreads, ( int numThr )) 795 IPPAPI( IppStatus, ippcpInit,( void )) 796 IPPAPI( IppStatus, ippcpGetNumThreads, (int* pNumThr) ) 797 IPPAPI( const char*, ippcpGetStatusString, ( IppStatus StsCode )) 798 IPPAPI( int, ippcpGetEnabledNumThreads, ( void ) ) 799 IPPAPI( Ipp64u, ippcpGetCpuClocks, (void) ) 800 #endif 801 802 #ifdef __cplusplus 803 } 804 #endif 805 806 #endif /* !defined IPPCPDEFS_H__ || defined( _OWN_BLDPCS ) */ 807