1f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* LibTomCrypt, modular cryptographic library -- Tom St Denis
2f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project *
3f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * LibTomCrypt is a library that provides various cryptographic
4f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * algorithms in a highly modular and flexible manner.
5f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project *
6f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * The library is free for all purposes without any express
7f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * guarantee it works.
8f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project *
9f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
10f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project */
11f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
12f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b
13f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project *
14f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * All curves taken from NIST recommendation paper of July 1999
15f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * Available at http://csrc.nist.gov/cryptval/dss.htm
16f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project */
17f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#include "tomcrypt.h"
18f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
19f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/**
20f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  @file ecc.c
21f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  ECC Crypto, Tom St Denis
22f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project*/
23f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
24f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef MECC
25f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
26f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* This holds the key settings.  ***MUST*** be organized by size from smallest to largest. */
27f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectconst ltc_ecc_set_type ltc_ecc_sets[] = {
28f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef ECC112
29f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
30f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        14,
31f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "SECP112R1",
32f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "DB7C2ABF62E35E668076BEAD208B",
33f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "659EF8BA043916EEDE8911702B22",
34f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "DB7C2ABF62E35E7628DFAC6561C5",
35f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "09487239995A5EE76B55F9C2F098",
36f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "A89CE5AF8724C0A23E0E0FF77500"
37f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project},
38f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
39f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef ECC128
40f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
41f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        16,
42f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "SECP128R1",
43f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF",
44f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "E87579C11079F43DD824993C2CEE5ED3",
45f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "FFFFFFFE0000000075A30D1B9038A115",
46f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "161FF7528B899B2D0C28607CA52C5B86",
47f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "CF5AC8395BAFEB13C02DA292DDED7A83",
48f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project},
49f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
50f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef ECC160
51f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
52f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        20,
53f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "SECP160R1",
54f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF",
55f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45",
56f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "0100000000000000000001F4C8F927AED3CA752257",
57f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "4A96B5688EF573284664698968C38BB913CBFC82",
58f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "23A628553168947D59DCC912042351377AC5FB32",
59f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project},
60f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
61f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef ECC192
62f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
63f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        24,
64f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "ECC-192",
65f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF",
66f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1",
67f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831",
68f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012",
69f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "7192B95FFC8DA78631011ED6B24CDD573F977A11E794811",
70f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project},
71f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
72f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef ECC224
73f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
74f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        28,
75f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "ECC-224",
76f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001",
77f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4",
78f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D",
79f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21",
80f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34",
81f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project},
82f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
83f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef ECC256
84f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
85f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        32,
86f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "ECC-256",
87f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF",
88f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B",
89f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551",
90f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296",
91f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5",
92f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project},
93f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
94f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef ECC384
95f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
96f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        48,
97f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "ECC-384",
98f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF",
99f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF",
100f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973",
101f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7",
102f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "3617DE4A96262C6F5D9E98BF9292DC29F8F41DBD289A147CE9DA3113B5F0B8C00A60B1CE1D7E819D7A431D7C90EA0E5F",
103f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project},
104f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
105f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef ECC521
106f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
107f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        66,
108f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "ECC-521",
109f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
110f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "51953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00",
111f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409",
112f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66",
113f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        "11839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD16650",
114f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project},
115f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
116f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
117f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   0,
118f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   NULL, NULL, NULL, NULL, NULL, NULL
119f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}
120f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project};
121f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
122f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
123f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
124f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Source: /cvs/libtom/libtomcrypt/src/pk/ecc/ecc.c,v $ */
125f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Revision: 1.38 $ */
126f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Date: 2006/11/07 23:14:28 $ */
127f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
128