Home | History | Annotate | Download | only in ippcp
      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