1 /******************************************************************************* 2 * Copyright 2005-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 43 // Cryptographic Primitives (ippcp) 44 // 45 // Purpose: 46 // Define ippCP variant 47 // 48 // 49 */ 50 51 #if !defined(_CP_VARIANT_H) 52 #define _CP_VARIANT_H 53 54 /* 55 // set _AES_NI_ENABLING_ 56 */ 57 #if defined _IPP_AES_NI_ 58 #if (_IPP_AES_NI_ == 0) 59 #define _AES_NI_ENABLING_ _FEATURE_OFF_ 60 #elif (_IPP_AES_NI_ == 1) 61 #define _AES_NI_ENABLING_ _FEATURE_ON_ 62 #else 63 #error Define _IPP_AES_NI_=0 or 1 or omit _IPP_AES_NI_ at all 64 #endif 65 #else 66 #if (_IPP>=_IPP_P8) || (_IPP32E>=_IPP32E_Y8) 67 #define _AES_NI_ENABLING_ _FEATURE_TICKTOCK_ 68 #else 69 #define _AES_NI_ENABLING_ _FEATURE_OFF_ 70 #endif 71 #endif 72 73 /* 74 // select AES safe implementation 75 */ 76 #define _ALG_AES_SAFE_COMPACT_SBOX_ (1) 77 #define _ALG_AES_SAFE_COMPOSITE_GF_ (2) 78 79 #if (_AES_NI_ENABLING_==_FEATURE_ON_) 80 #define _ALG_AES_SAFE_ _FEATURE_OFF_ 81 #else 82 #if (_IPP>=_IPP_V8) || (_IPP32E>=_IPP32E_U8) 83 #define _ALG_AES_SAFE_ _ALG_AES_SAFE_COMPOSITE_GF_ 84 #else 85 #define _ALG_AES_SAFE_ _ALG_AES_SAFE_COMPACT_SBOX_ 86 //#define _ALG_AES_SAFE_ _ALG_AES_SAFE_COMPOSITE_GF_ 87 #endif 88 #endif 89 90 91 /* 92 // if there is no outside assignment 93 // set _SHA_NI_ENABLING_ based on CPU specification 94 */ 95 #if !defined(_SHA_NI_ENABLING_) 96 #if (_IPP>=_IPP_P8) || (_IPP32E>=_IPP32E_Y8) 97 #define _SHA_NI_ENABLING_ _FEATURE_TICKTOCK_ 98 #else 99 #define _SHA_NI_ENABLING_ _FEATURE_OFF_ 100 #endif 101 #endif 102 103 /* 104 // set/reset _ADCOX_NI_ENABLING_ 105 */ 106 #if (_IPP32E>=_IPP32E_L9) 107 #if !defined(_ADCOX_NI_ENABLING_) 108 #define _ADCOX_NI_ENABLING_ _FEATURE_TICKTOCK_ 109 #endif 110 #else 111 #undef _ADCOX_NI_ENABLING_ 112 #define _ADCOX_NI_ENABLING_ _FEATURE_OFF_ 113 #endif 114 115 /* 116 // Intel(R) Integrated Performance Primitives (Intel(R) IPP) supports several hash algorithms by default: 117 // SHA-1 118 // SHA-256 119 // SHA-224 (or SHA256/224 by the FIPS180-4 classification) 120 // SHA-512 121 // SHA-384 (or SHA512/384 by the FIPS180-4 classification) 122 // MD5 123 // SM3 124 // 125 // By default all hash algorithms are included in Intel(R) IPP Crypto. 126 // 127 // If one need excludes code of particular hash, just define 128 // suitable _DISABLE_ALG_XXX, where XXX name of the hash algorithm 129 // 130 */ 131 #if !defined(_DISABLE_ALG_SHA1_) 132 #define _ENABLE_ALG_SHA1_ /* SHA1 on */ 133 #else 134 # undef _ENABLE_ALG_SHA1_ /* SHA1 off */ 135 #endif 136 137 #if !defined(_DISABLE_ALG_SHA256_) 138 # define _ENABLE_ALG_SHA256_ /* SHA256 on */ 139 #else 140 # undef _ENABLE_ALG_SHA256_ /* SHA256 off */ 141 #endif 142 143 #if !defined(_DISABLE_ALG_SHA224_) 144 # define _ENABLE_ALG_SHA224_ /* SHA224 on */ 145 #else 146 # undef _ENABLE_ALG_SHA224_ /* SHA224 off */ 147 #endif 148 149 #if !defined(_DISABLE_ALG_SHA512_) 150 # define _ENABLE_ALG_SHA512_ /* SHA512 on */ 151 #else 152 # undef _ENABLE_ALG_SHA512_ /* SHA512 off */ 153 #endif 154 155 #if !defined(_DISABLE_ALG_SHA384_) 156 # define _ENABLE_ALG_SHA384_ /* SHA384 on */ 157 #else 158 # undef _ENABLE_ALG_SHA384_ /* SHA384 off */ 159 #endif 160 161 #if !defined(_DISABLE_ALG_SHA512_224_) 162 # define _ENABLE_ALG_SHA512_224_ /* SHA512/224 on */ 163 #else 164 # undef _ENABLE_ALG_SHA512_224_ /* SHA512/224 off */ 165 #endif 166 167 #if !defined(_DISABLE_ALG_SHA512_256_) 168 # define _ENABLE_ALG_SHA512_256_ /* SHA512/256 on */ 169 #else 170 # undef _ENABLE_ALG_SHA512_256_ /* SHA512/256 off */ 171 #endif 172 173 #if !defined(_DISABLE_ALG_MD5_) 174 # define _ENABLE_ALG_MD5_ /* MD5 on */ 175 #else 176 # undef _ENABLE_ALG_MD5_ /* MD5 off */ 177 #endif 178 179 #if !defined(_DISABLE_ALG_SM3_) 180 # define _ENABLE_ALG_SM3_ /* SM3 on */ 181 #else 182 # undef _ENABLE_ALG_SM3_ /* SM3 off */ 183 #endif 184 185 /* 186 // SHA1 plays especial role in Intel(R) IPP. Thus Intel(R) IPP random generator 187 // and therefore prime number generator are based on SHA1. 188 // So, do no exclude SHA1 from the active list of hash algorithms 189 */ 190 #if defined(_DISABLE_ALG_SHA1_) 191 #undef _DISABLE_ALG_SHA1_ 192 #endif 193 194 /* 195 // Because of performane reason hash algorithms are implemented in form 196 // of unroller cycle and therefore these implementations are big enough. 197 // Intel(R) IPP supports "compact" implementation of some basic hash algorithms: 198 // SHA-1 199 // SHA-256 200 // SHA-512 201 // SM3 202 // 203 // Define any 204 // _ALG_SHA1_COMPACT_ 205 // _ALG_SHA256_COMPACT_ 206 // _ALG_SHA512_COMPACT_ 207 // _ALG_SM3_COMPACT_ 208 // 209 // to select "compact" implementation of particular hash algorithm. 210 // Intel(R) IPP does not define "compact" implementation by default. 211 // 212 // Don't know what performance degradation leads "compact" 213 // in comparison with default Intel(R) IPP implementation. 214 // 215 // Note: the definition like _ALG_XXX_COMPACT_ has effect 216 // if and only if Intel(R) IPP instance is _PX or _MX 217 */ 218 //#define _ALG_SHA1_COMPACT_ 219 //#define _ALG_SHA256_COMPACT_ 220 //#define _ALG_SHA512_COMPACT_ 221 //#define _ALG_SM3_COMPACT_ 222 //#undef _ALG_SHA1_COMPACT_ 223 //#undef _ALG_SHA256_COMPACT_ 224 //#undef _ALG_SHA512_COMPACT_ 225 //#undef _ALG_SM3_COMPACT_ 226 227 228 /* 229 // BN arithmetic: 230 // - do/don't use special implementation of sqr instead of usual multication 231 // - do/don't use Karatsuba multiplication alg 232 */ 233 #define _USE_SQR_ /* use implementaton of sqr */ 234 #if !defined(_DISABLE_WINDOW_EXP_) 235 #define _USE_WINDOW_EXP_ /* use fixed window exponentiation */ 236 #endif 237 238 239 /* 240 // RSA: 241 // - do/don't use version 1 style mitigation of CBA 242 // - do/don't use own style mitigation of CBA 243 // - do/don't use Folding technique for RSA-1204 implementation 244 */ 245 #define xUSE_VERSION1_CBA_MITIGATION_ /* not use (version 1) mitigation of CBA */ 246 #define _USE_IPP_OWN_CBA_MITIGATION_ /* use (own) mitigation of CBA */ 247 #define xUSE_FOLD_MONT512_ /* use folding technique in RSA-1024 case */ 248 249 250 /* 251 // Intel(R) IPP supports different implementation of NIST's (standard) EC over GF(0): 252 // P-128 (IppECCPStd128r1, IppECCPStd128r2) 253 // P-192 (IppECCPStd192r1) 254 // P-224 (IppECCPStd224r1) 255 // P-256 (IppECCPStd256r1) 256 // P-384 (IppECCPStd384r1) 257 // P-521 (IppECCPStd521r1) 258 // 259 // If one need replace the particular implementation by abritrary one 260 // assign _ECP_IMP_ARBIRTRARY_ to suitable symbol 261 // 262 // _ECP_IMPL_ARBIRTRARY_ means that implementtaion does not use any curve specific, 263 // provide the same (single) code for any type curve 264 // 265 // _ECP_IMPL_SPECIFIC_ means that implementation uses specific modular reduction 266 // based on prime structure; 267 // most of NIST's cures (p128, p192, p224, p256, p384, p521) are uses 268 // such kind of reduction procedure; 269 // in contrast with _ECP_IMPL_ARBIRTRARY_ and _ECP_IMPL_MFM_ 270 // this type of implementation uses point representation in REGULAR residual 271 // (not Montgometry!!) domain 272 // 273 // _ECP_IMPL_MFM_ means that implementation uses "Montgomary Friendly Modulus" (primes); 274 // p256 and sm2 are using such kind of optimization 275 */ 276 #define _ECP_IMPL_NONE_ 0 277 #define _ECP_IMPL_ARBIRTRARY_ 1 278 #define _ECP_IMPL_SPECIFIC_ 2 279 #define _ECP_IMPL_MFM_ 3 280 281 #if !defined(_ECP_112R1_) 282 #if !defined(_DISABLE_ECP_112R1_) 283 # define _ECP_112R1_ _ECP_IMPL_ARBIRTRARY_ 284 #else 285 # define _ECP_112R1_ _ECP_IMPL_NONE_ 286 #endif 287 #endif 288 289 #if !defined(_ECP_112R2_) 290 #if !defined(_DISABLE_ECP_112R2_) 291 # define _ECP_112R2_ _ECP_IMPL_ARBIRTRARY_ 292 #else 293 # define _ECP_112R2_ _ECP_IMPL_NONE_ 294 #endif 295 #endif 296 297 #if !defined(_ECP_160R1_) 298 #if !defined(_DISABLE_ECP_160R1_) 299 # define _ECP_160R1_ _ECP_IMPL_ARBIRTRARY_ 300 #else 301 # define _ECP_160R1_ _ECP_IMPL_NONE_ 302 #endif 303 #endif 304 305 #if !defined(_ECP_160R2_) 306 #if !defined(_DISABLE_ECP_160R2_) 307 # define _ECP_160R2_ _ECP_IMPL_ARBIRTRARY_ 308 #else 309 # define _ECP_160R2_ _ECP_IMPL_NONE_ 310 #endif 311 #endif 312 313 #if !defined(_ECP_128R1_) 314 #if !defined(_DISABLE_ECP_128R1_) 315 # define _ECP_128R1_ _ECP_IMPL_SPECIFIC_ 316 #else 317 # define _ECP_128R1_ _ECP_IMPL_NONE_ 318 #endif 319 #endif 320 321 #if !defined(_ECP_128R2_) 322 #if !defined(_DISABLE_ECP_128R2_) 323 # define _ECP_128R2_ _ECP_IMPL_SPECIFIC_ 324 #else 325 # define _ECP_128R2_ _ECP_IMPL_NONE_ 326 #endif 327 #endif 328 329 #if !defined(_ECP_192_) 330 #if !defined(_DISABLE_ECP_192_) 331 # if (_IPP32E >= _IPP32E_M7) || (_IPP >= _IPP_P8) 332 # define _ECP_192_ _ECP_IMPL_MFM_ 333 # else 334 # define _ECP_192_ _ECP_IMPL_SPECIFIC_ 335 # endif 336 #else 337 # define _ECP_192_ _ECP_IMPL_NONE_ 338 #endif 339 #endif 340 341 #if !defined(_ECP_224_) 342 #if !defined(_DISABLE_ECP_224_) 343 # if (_IPP32E >= _IPP32E_M7) || (_IPP >= _IPP_P8) 344 # define _ECP_224_ _ECP_IMPL_MFM_ 345 # else 346 # define _ECP_224_ _ECP_IMPL_SPECIFIC_ 347 # endif 348 #else 349 # define _ECP_224_ _ECP_IMPL_NONE_ 350 #endif 351 #endif 352 353 #if !defined(_ECP_256_) 354 #if !defined(_DISABLE_ECP_256_) 355 # if (_IPP32E >= _IPP32E_M7) || (_IPP >= _IPP_P8) 356 # define _ECP_256_ _ECP_IMPL_MFM_ 357 # else 358 # define _ECP_256_ _ECP_IMPL_SPECIFIC_ 359 # endif 360 #else 361 # define _ECP_256_ _ECP_IMPL_NONE_ 362 #endif 363 #endif 364 365 #if !defined(_ECP_384_) 366 #if !defined(_DISABLE_ECP_384_) 367 # if (_IPP32E >= _IPP32E_M7) || (_IPP >= _IPP_P8) 368 # define _ECP_384_ _ECP_IMPL_MFM_ 369 # else 370 # define _ECP_384_ _ECP_IMPL_SPECIFIC_ 371 # endif 372 #else 373 # define _ECP_384_ _ECP_IMPL_NONE_ 374 #endif 375 #endif 376 377 #if !defined(_ECP_521_) 378 #if !defined(_DISABLE_ECP_521_) 379 # if (_IPP32E >= _IPP32E_M7) || (_IPP >= _IPP_P8) 380 # define _ECP_521_ _ECP_IMPL_MFM_ 381 # else 382 # define _ECP_521_ _ECP_IMPL_SPECIFIC_ 383 # endif 384 #else 385 # define _ECP_521_ _ECP_IMPL_NONE_ 386 #endif 387 #endif 388 389 #if !defined(_ECP_SM2_) 390 #if !defined(_DISABLE_ECP_SM2_) 391 # if (_IPP32E >= _IPP32E_M7) || (_IPP >= _IPP_P8) 392 # define _ECP_SM2_ _ECP_IMPL_MFM_ 393 # else 394 # define _ECP_SM2_ _ECP_IMPL_SPECIFIC_ 395 # endif 396 #else 397 # define _ECP_SM2_ _ECP_IMPL_NONE_ 398 #endif 399 #endif 400 401 #if !defined(_ECP_BN_) 402 #if !defined(_DISABLE_ECP_BN_) 403 # define _ECP_BN_ _ECP_IMPL_ARBIRTRARY_ 404 #else 405 # define _ECP_BN_ _ECP_IMPL_NONE_ 406 #endif 407 #endif 408 409 #if !defined(_DISABLE_ECP_GENERAL_) 410 # define _ECP_GENERAL_ _ECP_IMPL_ARBIRTRARY_ 411 #else 412 # define _ECP_GENERAL_ _ECP_IMPL_NONE_ 413 #endif 414 415 416 /* 417 // EC over GF(p): 418 // - do/don't use mitigation of CBA 419 */ 420 #define _USE_ECCP_SSCM_ /* use SSCM ECCP */ 421 422 423 #if defined ( _OPENMP ) 424 #define DEFAULT_CPU_NUM (8) 425 426 #define BF_MIN_BLK_PER_THREAD (32) 427 #define TF_MIN_BLK_PER_THREAD (16) 428 429 #define DES_MIN_BLK_PER_THREAD (32) 430 #define TDES_MIN_BLK_PER_THREAD (16) 431 432 #define RC5_64_MIN_BLK_PER_THREAD (16) 433 #define RC5_128_MIN_BLK_PER_THREAD (32) 434 435 #define RIJ128_MIN_BLK_PER_THREAD (32) 436 #define RIJ192_MIN_BLK_PER_THREAD (16) 437 #define RIJ256_MIN_BLK_PER_THREAD (16) 438 439 #define AESNI128_MIN_BLK_PER_THREAD (256) 440 #endif 441 442 #endif /* _CP_VARIANT_H */ 443