Home | History | Annotate | Download | only in smp
      1 /******************************************************************************
      2  *
      3  *  Copyright (C) 2006-2015 Broadcom Corporation
      4  *
      5  *  Licensed under the Apache License, Version 2.0 (the "License");
      6  *  you may not use this file except in compliance with the License.
      7  *  You may obtain a copy of the License at:
      8  *
      9  *  http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  *  Unless required by applicable law or agreed to in writing, software
     12  *  distributed under the License is distributed on an "AS IS" BASIS,
     13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  *  See the License for the specific language governing permissions and
     15  *  limitations under the License.
     16  *
     17  ******************************************************************************/
     18 
     19 /******************************************************************************
     20  *
     21  *  This file contains simple pairing algorithms using Elliptic Curve
     22  *Cryptography for private public key
     23  *
     24  ******************************************************************************/
     25 
     26 #pragma once
     27 
     28 #include "p_256_multprecision.h"
     29 
     30 typedef struct {
     31   uint32_t x[KEY_LENGTH_DWORDS_P256];
     32   uint32_t y[KEY_LENGTH_DWORDS_P256];
     33   uint32_t z[KEY_LENGTH_DWORDS_P256];
     34 } Point;
     35 
     36 typedef struct {
     37   // curve's coefficients
     38   uint32_t a[KEY_LENGTH_DWORDS_P256];
     39   uint32_t b[KEY_LENGTH_DWORDS_P256];
     40 
     41   // whether a is -3
     42   int a_minus3;
     43 
     44   // prime modulus
     45   uint32_t p[KEY_LENGTH_DWORDS_P256];
     46 
     47   // Omega, p = 2^m -omega
     48   uint32_t omega[KEY_LENGTH_DWORDS_P256];
     49 
     50   // base point, a point on E of order r
     51   Point G;
     52 
     53 } elliptic_curve_t;
     54 
     55 extern elliptic_curve_t curve;
     56 extern elliptic_curve_t curve_p256;
     57 
     58 void ECC_PointMult_Bin_NAF(Point* q, Point* p, uint32_t* n, uint32_t keyLength);
     59 
     60 #define ECC_PointMult(q, p, n, keyLength) \
     61   ECC_PointMult_Bin_NAF(q, p, n, keyLength)
     62 
     63 void p_256_init_curve(uint32_t keyLength);
     64