• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*******************************************************************************
2 * Copyright 2010-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 //               GF(p) extension internal
45 //
46 */
47 
48 #if !defined(_PCP_GFPEXT_H_)
49 #define _PCP_GFPEXT_H_
50 
51 #include "pcpgfpstuff.h"
52 
53 
54 /* GF(p^d) pool */
55 #define GFPX_PESIZE(pGF)   GFP_FELEN((pGF))
56 #define GFPX_POOL_SIZE     (14) //(8)   /* Number of temporary variables in pool */
57 
58 /* address of ground field element inside expanded field element */
59 #define GFPX_IDX_ELEMENT(pxe, idx, eleSize) ((pxe)+(eleSize)*(idx))
60 
61 
degree(const BNU_CHUNK_T * pE,const gsModEngine * pGFEx)62 __INLINE int degree(const BNU_CHUNK_T* pE, const gsModEngine* pGFEx)
63 {
64     int groundElemLen = GFP_FELEN(GFP_PARENT(pGFEx));
65     int deg;
66     for(deg=GFP_EXTDEGREE(pGFEx)-1; deg>=0; deg-- ) {
67         if(!GFP_IS_ZERO(pE+groundElemLen*deg, groundElemLen)) break;
68     }
69     return deg;
70 }
71 
cpGFpBasic(const gsModEngine * pGFEx)72 __INLINE gsModEngine* cpGFpBasic(const gsModEngine* pGFEx)
73 {
74    while( !GFP_IS_BASIC(pGFEx) ) {
75       pGFEx = GFP_PARENT(pGFEx);
76    }
77    return (gsModEngine*)pGFEx;
78 }
cpGFpBasicDegreeExtension(const gsModEngine * pGFEx)79 __INLINE int cpGFpBasicDegreeExtension(const gsModEngine* pGFEx)
80 {
81    int degree = GFP_EXTDEGREE(pGFEx);
82    while( !GFP_IS_BASIC(pGFEx) ) {
83       pGFEx = GFP_PARENT(pGFEx);
84       degree *= GFP_EXTDEGREE(pGFEx);
85    }
86    return degree;
87 }
88 
89 /* convert external data (Ipp32u) => internal element (BNU_CHUNK_T) representation
90    returns length of element (in BNU_CHUNK_T)
91 */
cpGFpxCopyToChunk(BNU_CHUNK_T * pElm,const Ipp32u * pA,int nsA,const gsModEngine * pGFEx)92 __INLINE int cpGFpxCopyToChunk(BNU_CHUNK_T* pElm, const Ipp32u* pA, int nsA, const gsModEngine* pGFEx)
93 {
94    gsModEngine* pBasicGFE = cpGFpBasic(pGFEx);
95    int basicExtension = cpGFpBasicDegreeExtension(pGFEx);
96    int basicElmLen32 = GFP_FELEN32(pBasicGFE);
97    int basicElmLen = GFP_FELEN(pBasicGFE);
98    int deg;
99    for(deg=0; deg<basicExtension && nsA>0; deg++, nsA -= basicElmLen32) {
100       int srcLen = IPP_MIN(nsA, basicElmLen32);
101       ZEXPAND_COPY_BNU((Ipp32u*)pElm, basicElmLen*(int)(sizeof(BNU_CHUNK_T)/sizeof(Ipp32u)), pA,srcLen);
102       pElm += basicElmLen;
103       pA += basicElmLen32;
104    }
105    return basicElmLen*deg;
106 }
107 
108 /* convert internal element (BNU_CHUNK_T) => external data (Ipp32u) representation
109    returns length of data (in Ipp32u)
110 */
cpGFpxCopyFromChunk(Ipp32u * pA,const BNU_CHUNK_T * pElm,const gsModEngine * pGFEx)111 __INLINE int cpGFpxCopyFromChunk(Ipp32u* pA, const BNU_CHUNK_T* pElm, const gsModEngine* pGFEx)
112 {
113    gsModEngine* pBasicGFE = cpGFpBasic(pGFEx);
114    int basicExtension = cpGFpBasicDegreeExtension(pGFEx);
115    int basicElmLen32 = GFP_FELEN32(pBasicGFE);
116    int basicElmLen = GFP_FELEN(pBasicGFE);
117    int deg;
118    for(deg=0; deg<basicExtension; deg++) {
119       COPY_BNU(pA, (Ipp32u*)pElm, basicElmLen32);
120       pA += basicElmLen32;
121       pElm += basicElmLen;
122    }
123    return basicElmLen32*deg;
124 }
125 
126 
127 #define      cpGFpxRand OWNAPI(cpGFpxRand)
128 BNU_CHUNK_T* cpGFpxRand(BNU_CHUNK_T* pR, gsModEngine* pGFEx, IppBitSupplier rndFunc, void* pRndParam);
129 
130 #define      cpGFpxSet OWNAPI(cpGFpxSet)
131 BNU_CHUNK_T* cpGFpxSet (BNU_CHUNK_T* pR, const BNU_CHUNK_T* pDataA, int nsA, gsModEngine* pGFEx);
132 
133 #define      cpGFpxGet OWNAPI(cpGFpxGet)
134 BNU_CHUNK_T* cpGFpxGet (BNU_CHUNK_T* pDataA, int nsA, const BNU_CHUNK_T* pR, gsModEngine* pGFEx);
135 
136 #define      cpGFpxSetPolyTerm OWNAPI(cpGFpxSetPolyTerm)
137 BNU_CHUNK_T* cpGFpxSetPolyTerm (BNU_CHUNK_T* pR, int deg, const BNU_CHUNK_T* pDataA, int nsA, gsModEngine* pGFEx);
138 
139 #define      cpGFpxGetPolyTerm OWNAPI(cpGFpxGetPolyTerm)
140 BNU_CHUNK_T* cpGFpxGetPolyTerm (BNU_CHUNK_T* pDataA, int nsA, const BNU_CHUNK_T* pR, int deg, gsModEngine* pGFEx);
141 
142 #define      cpGFpxAdd OWNAPI(cpGFpxAdd)
143 BNU_CHUNK_T* cpGFpxAdd     (BNU_CHUNK_T* pR, const BNU_CHUNK_T* pA, const BNU_CHUNK_T* pB, gsModEngine* pGFEx);
144 
145 #define      cpGFpxSub OWNAPI(cpGFpxSub)
146 BNU_CHUNK_T* cpGFpxSub     (BNU_CHUNK_T* pR, const BNU_CHUNK_T* pA, const BNU_CHUNK_T* pB, gsModEngine* pGFEx);
147 
148 #define      cpGFpxMul OWNAPI(cpGFpxMul)
149 BNU_CHUNK_T* cpGFpxMul     (BNU_CHUNK_T* pR, const BNU_CHUNK_T* pA, const BNU_CHUNK_T* pB, gsModEngine* pGFEx);
150 
151 #define      cpGFpxSqr OWNAPI(cpGFpxSqr)
152 BNU_CHUNK_T* cpGFpxSqr     (BNU_CHUNK_T* pR, const BNU_CHUNK_T* pA, gsModEngine* pGFEx);
153 
154 #define      cpGFpxAdd_GFE OWNAPI(cpGFpxAdd_GFE)
155 BNU_CHUNK_T* cpGFpxAdd_GFE (BNU_CHUNK_T* pR, const BNU_CHUNK_T* pA, const BNU_CHUNK_T* pGroundB, gsModEngine* pGFEx);
156 
157 #define      cpGFpxSub_GFE OWNAPI(cpGFpxSub_GFE)
158 BNU_CHUNK_T* cpGFpxSub_GFE (BNU_CHUNK_T* pR, const BNU_CHUNK_T* pA, const BNU_CHUNK_T* pGroundB, gsModEngine* pGFEx);
159 
160 #define      cpGFpxMul_GFE OWNAPI(cpGFpxMul_GFE)
161 BNU_CHUNK_T* cpGFpxMul_GFE (BNU_CHUNK_T* pR, const BNU_CHUNK_T* pA, const BNU_CHUNK_T* pGroundB, gsModEngine* pGFEx);
162 
163 #define cpGFpGetOptimalWinSize OWNAPI(cpGFpGetOptimalWinSize)
164 int     cpGFpGetOptimalWinSize(int bitsize);
165 
166 #define      cpGFpxExp OWNAPI(cpGFpxExp)
167 BNU_CHUNK_T* cpGFpxExp     (BNU_CHUNK_T* pR, const BNU_CHUNK_T* pA, const BNU_CHUNK_T* pE, int nsE, gsModEngine* pGFEx, Ipp8u* pScratchBuffer);
168 
169 #define      cpGFpxMultiExp OWNAPI(cpGFpxMultiExp)
170 BNU_CHUNK_T* cpGFpxMultiExp(BNU_CHUNK_T* pR, const BNU_CHUNK_T* ppA[], const BNU_CHUNK_T* ppE[], int nsE[], int nItems,
171                           gsModEngine* pGFEx, Ipp8u* pScratchBuffer);
172 
173 #define      cpGFpxConj OWNAPI(cpGFpxConj)
174 BNU_CHUNK_T* cpGFpxConj(BNU_CHUNK_T* pR, const BNU_CHUNK_T* pA, gsModEngine* pGFEx);
175 
176 #define      cpGFpxNeg OWNAPI(cpGFpxNeg)
177 BNU_CHUNK_T* cpGFpxNeg (BNU_CHUNK_T* pR, const BNU_CHUNK_T* pA, gsModEngine* pGFEx);
178 
179 #define      cpGFpxInv OWNAPI(cpGFpxInv)
180 BNU_CHUNK_T* cpGFpxInv (BNU_CHUNK_T* pR, const BNU_CHUNK_T* pA, gsModEngine* pGFEx);
181 
182 #define      cpGFpxHalve OWNAPI(cpGFpxHalve)
183 BNU_CHUNK_T* cpGFpxHalve (BNU_CHUNK_T* pR, const BNU_CHUNK_T* pA, gsModEngine* pGFEx);
184 
185 #define InitGFpxCtx OWNAPI(InitGFpxCtx)
186 void InitGFpxCtx(const IppsGFpState* pGroundGF, int extDeg, const IppsGFpMethod* method, IppsGFpState* pGFpx);
187 
188 #endif /* _PCP_GFPEXT_H_ */
189