/******************************************************************************* * Copyright 2013-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. *******************************************************************************/ /* // // Purpose: // Cryptography Primitive. // Fixed window exponentiation scramble/unscramble // // Contents: // cpScramblePut() // cpScrambleGet() // // */ #if !defined(_PC_SCRAMBLE_H) #define _PC_SCRAMBLE_H /* // cpsScramblePut/cpsScrambleGet // stores to/retrieves from pScrambleEntry position // pre-computed data if fixed window method is used */ __INLINE void cpScramblePut(Ipp8u* pArray, cpSize colummSize, const Ipp32u* pData, cpSize dataSize) { int i; switch(colummSize) { case 1: // column - byte dataSize *= sizeof(Ipp32u); for(i=0; i 2 dword) for(; dataSize>=2; dataSize-=2, pArray+=CACHE_LINE_SIZE, pData+=2) { ((Ipp32u*)pArray)[0] = pData[0]; ((Ipp32u*)pArray)[1] = pData[1]; } if(dataSize) ((Ipp32u*)pArray)[0] = pData[0]; break; case 16: // column - oword (16 bytes => 4 dword) for(; dataSize>=4; dataSize-=4, pArray+=CACHE_LINE_SIZE, pData+=4) { ((Ipp32u*)pArray)[0] = pData[0]; ((Ipp32u*)pArray)[1] = pData[1]; ((Ipp32u*)pArray)[2] = pData[2]; ((Ipp32u*)pArray)[3] = pData[3]; } for(; dataSize>0; dataSize--, pArray+=sizeof(Ipp32u), pData++) ((Ipp32u*)pArray)[0] = pData[0]; break; case 32: // column - 2 oword (32 bytes => 8 dword) for(; dataSize>=8; dataSize-=8, pArray+=CACHE_LINE_SIZE, pData+=8) { ((Ipp32u*)pArray)[0] = pData[0]; ((Ipp32u*)pArray)[1] = pData[1]; ((Ipp32u*)pArray)[2] = pData[2]; ((Ipp32u*)pArray)[3] = pData[3]; ((Ipp32u*)pArray)[4] = pData[4]; ((Ipp32u*)pArray)[5] = pData[5]; ((Ipp32u*)pArray)[6] = pData[6]; ((Ipp32u*)pArray)[7] = pData[7]; } for(; dataSize>0; dataSize--, pArray+=sizeof(Ipp32u), pData++) ((Ipp32u*)pArray)[0] = pData[0]; break; default: break; } } /* // Retrieve data from pArray */ #define u8_to_u32(b0,b1,b2,b3, x) \ ((x) = (b0), \ (x)|=((b1)<<8), \ (x)|=((b2)<<16), \ (x)|=((b3)<<24)) #define u16_to_u32(w0,w1, x) \ ((x) = (w0), \ (x)|=((w1)<<16)) #define u32_to_u64(dw0,dw1, x) \ ((x) = (Ipp64u)(dw0), \ (x)|= (((Ipp64u)(dw1))<<32)) __INLINE void cpScrambleGet(Ipp32u* pData, cpSize dataSize, const Ipp8u* pArray, cpSize colummSize) { int i; switch(colummSize) { case 1: // column - byte for(i=0; i 2 dword) for(; dataSize>=2; dataSize-=2, pArray+=CACHE_LINE_SIZE, pData+=2) { pData[0] = ((Ipp32u*)pArray)[0]; pData[1] = ((Ipp32u*)pArray)[1]; } if(dataSize) pData[0] = ((Ipp32u*)pArray)[0]; break; case 16: // column - oword (16 bytes => 4 dword) for(; dataSize>=4; dataSize-=4, pArray+=CACHE_LINE_SIZE, pData+=4) { pData[0] = ((Ipp32u*)pArray)[0]; pData[1] = ((Ipp32u*)pArray)[1]; pData[2] = ((Ipp32u*)pArray)[2]; pData[3] = ((Ipp32u*)pArray)[3]; } for(; dataSize>0; dataSize--, pArray+=sizeof(Ipp32u), pData++) pData[0] = ((Ipp32u*)pArray)[0]; break; case 32: // column - 2 oword (32 bytes => 8 dword) for(; dataSize>=8; dataSize-=8, pArray+=CACHE_LINE_SIZE, pData+=8) { pData[0] = ((Ipp32u*)pArray)[0]; pData[1] = ((Ipp32u*)pArray)[1]; pData[2] = ((Ipp32u*)pArray)[2]; pData[3] = ((Ipp32u*)pArray)[3]; pData[4] = ((Ipp32u*)pArray)[4]; pData[5] = ((Ipp32u*)pArray)[5]; pData[6] = ((Ipp32u*)pArray)[6]; pData[7] = ((Ipp32u*)pArray)[7]; } for(; dataSize>0; dataSize--, pArray+=sizeof(Ipp32u), pData++) pData[0] = ((Ipp32u*)pArray)[0]; break; default: break; } } #endif /* _PC_SCRAMBLE_H */