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
22 *
23 ******************************************************************************/
24
25#include <string.h>
26#include "p_256_ecc_pp.h"
27
28void p_256_init_curve(uint32_t keyLength) {
29  elliptic_curve_t* ec;
30
31  if (keyLength == KEY_LENGTH_DWORDS_P256) {
32    ec = &curve_p256;
33
34    ec->p[7] = 0xFFFFFFFF;
35    ec->p[6] = 0x00000001;
36    ec->p[5] = 0x0;
37    ec->p[4] = 0x0;
38    ec->p[3] = 0x0;
39    ec->p[2] = 0xFFFFFFFF;
40    ec->p[1] = 0xFFFFFFFF;
41    ec->p[0] = 0xFFFFFFFF;
42
43    memset(ec->omega, 0, KEY_LENGTH_DWORDS_P256);
44    memset(ec->a, 0, KEY_LENGTH_DWORDS_P256);
45
46    ec->a_minus3 = true;
47
48    // b
49    ec->b[7] = 0x5ac635d8;
50    ec->b[6] = 0xaa3a93e7;
51    ec->b[5] = 0xb3ebbd55;
52    ec->b[4] = 0x769886bc;
53    ec->b[3] = 0x651d06b0;
54    ec->b[2] = 0xcc53b0f6;
55    ec->b[1] = 0x3bce3c3e;
56    ec->b[0] = 0x27d2604b;
57
58    // base point
59    ec->G.x[7] = 0x6b17d1f2;
60    ec->G.x[6] = 0xe12c4247;
61    ec->G.x[5] = 0xf8bce6e5;
62    ec->G.x[4] = 0x63a440f2;
63    ec->G.x[3] = 0x77037d81;
64    ec->G.x[2] = 0x2deb33a0;
65    ec->G.x[1] = 0xf4a13945;
66    ec->G.x[0] = 0xd898c296;
67
68    ec->G.y[7] = 0x4fe342e2;
69    ec->G.y[6] = 0xfe1a7f9b;
70    ec->G.y[5] = 0x8ee7eb4a;
71    ec->G.y[4] = 0x7c0f9e16;
72    ec->G.y[3] = 0x2bce3357;
73    ec->G.y[2] = 0x6b315ece;
74    ec->G.y[1] = 0xcbb64068;
75    ec->G.y[0] = 0x37bf51f5;
76  }
77}
78