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 Cryptography for private public key
22  *
23  ******************************************************************************/
24
25#pragma once
26
27#include "p_256_multprecision.h"
28
29typedef unsigned long  DWORD;
30
31typedef struct {
32    DWORD x[KEY_LENGTH_DWORDS_P256];
33    DWORD y[KEY_LENGTH_DWORDS_P256];
34    DWORD z[KEY_LENGTH_DWORDS_P256];
35} Point;
36
37typedef struct {
38    // curve's coefficients
39    DWORD a[KEY_LENGTH_DWORDS_P256];
40    DWORD b[KEY_LENGTH_DWORDS_P256];
41
42    //whether a is -3
43    int a_minus3;
44
45    // prime modulus
46    DWORD p[KEY_LENGTH_DWORDS_P256];
47
48    // Omega, p = 2^m -omega
49    DWORD omega[KEY_LENGTH_DWORDS_P256];
50
51    // base point, a point on E of order r
52    Point G;
53
54} elliptic_curve_t;
55
56extern elliptic_curve_t curve;
57extern elliptic_curve_t curve_p256;
58
59void ECC_PointMult_Bin_NAF(Point *q, Point *p, DWORD *n, uint32_t keyLength);
60
61#define ECC_PointMult(q, p, n, keyLength)  ECC_PointMult_Bin_NAF(q, p, n, keyLength)
62
63void p_256_init_curve(UINT32 keyLength);
64
65
66