• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 //
43 //  Purpose:
44 //     Cryptography Primitive.
45 //     Internal Definitions and
46 //     Internal DL (prime) basic Definitions & Function Prototypes
47 //
48 //
49 */
50 
51 #if !defined(_PCP_DLP_H)
52 #define _PCP_DLP_H
53 
54 #include "pcpbn.h"
55 #include "pcpmontgomery.h"
56 #include "pcpprimeg.h"
57 #include "pcpbnresource.h"
58 
59 /*
60 // DLP context
61 */
62 
63 //#define MIN_DLP_BITSIZE     (512)
64 //#define MAX_DLP_BITSIZE    (2048)
65 //#define DEF_DLP_BITSIZER    (160)
66 
67 struct _cpDLP {
68    IppCtxId          idCtx;      /* DL identifier  */
69    Ipp32u            flag;       /* complete flag  */
70 
71    int               bitSizeP;   /* DH bitsize (P) */
72    int               bitSizeR;   /* DH bitsize (R) */
73 
74    int               method;     /* exponentiation method: binary/window */
75    gsModEngine*      pMontP0;    /* Montgomery P-engine */
76    gsModEngine*      pMontP1;    /* Montgomery P-engine (for multithread version) */
77    gsModEngine*      pMontR;     /* Montgomery R-engine */
78 
79    IppsBigNumState*  pGenc;      /* P-encoded DL generator    */
80    IppsBigNumState*  pX;         /*           private key */
81    IppsBigNumState*  pYenc;      /* P-encoded public  key */
82 
83    IppsPrimeState*   pPrimeGen;  /* prime generator     */
84 
85    BNU_CHUNK_T*      pMeTable;   /* pre-computed multi-exp table */
86 
87    BigNumNode*      pBnList;    /* BN  resource */
88    #if defined(_USE_WINDOW_EXP_)
89    BNU_CHUNK_T*      pBnuList0;  /* BNU resource */
90    BNU_CHUNK_T*      pBnuList1;  /* BNU resource (for multithread version) */
91    #endif
92 };
93 
94 /*
95 // Exponentiation method
96 */
97 #define BINARY       (0)
98 #define WINDOW       ((BINARY)+1)
99 
100 #define BNLISTSIZE   (8)        /* list size */
101 
102 /*
103 // Contetx Access Macros
104 */
105 #define DLP_ID(ctx)        ((ctx)->idCtx)
106 #define DLP_FLAG(ctx)      ((ctx)->flag)
107 #define DLP_BITSIZEP(ctx)  ((ctx)->bitSizeP)
108 #define DLP_BITSIZER(ctx)  ((ctx)->bitSizeR)
109 #define DLP_EXPMETHOD(ctx) ((ctx)->method)
110 
111 #define DLP_MONTP0(ctx)    ((ctx)->pMontP0)
112 #define DLP_MONTP1(ctx)    ((ctx)->pMontP1)
113 #define DLP_MONTR(ctx)     ((ctx)->pMontR)
114 
115 #define DLP_P(ctx)         (MOD_MODULUS(DLP_MONTP0((ctx))))
116 #define DLP_R(ctx)         (MOD_MODULUS(DLP_MONTR((ctx))))
117 #define DLP_GENC(ctx)      ((ctx)->pGenc)
118 #define DLP_X(ctx)         ((ctx)->pX)
119 #define DLP_YENC(ctx)      ((ctx)->pYenc)
120 
121 #define DLP_PRIMEGEN(ctx)  ((ctx)->pPrimeGen)
122 
123 #define DLP_METBL(ctx)     ((ctx)->pMeTable)
124 #define DLP_BNCTX(ctx)     ((ctx)->pBnList)
125 #if defined(_USE_WINDOW_EXP_)
126 #define DLP_BNUCTX0(ctx)   ((ctx)->pBnuList0)
127 #define DLP_BNUCTX1(ctx)   ((ctx)->pBnuList1)
128 #endif
129 
130 #define DLP_VALID_ID(ctx)  (DLP_ID((ctx))==idCtxDLP)
131 #define DLP_COMPLETE(ctx)  (DLP_FLAG((ctx))==(IppDLPkeyP|IppDLPkeyR|IppDLPkeyG))
132 
133 /* alignment */
134 #define DLP_ALIGNMENT ((int)(sizeof(void*)))
135 
136 /* pool size for gsModEngine */
137 #define DLP_MONT_POOL_LENGTH (6)
138 
139 #define cpPackDLPCtx OWNAPI(cpPackDLPCtx)
140    void cpPackDLPCtx(const IppsDLPState* pDLP, Ipp8u* pBuffer);
141 #define cpUnpackDLPCtx OWNAPI(cpUnpackDLPCtx)
142    void cpUnpackDLPCtx(const Ipp8u* pBuffer, IppsDLPState* pDLP);
143 
144 #endif /* _PCP_DLP_H */
145