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