mirror of
https://github.com/cwyark/ameba-sdk-gcc-make.git
synced 2024-11-24 23:14:18 +00:00
110 lines
3.2 KiB
C
110 lines
3.2 KiB
C
|
/*
|
||
|
* Elliptic curves over GF(p): generic functions
|
||
|
*
|
||
|
* Copyright (C) 2006-2014, Brainspark B.V.
|
||
|
*
|
||
|
* This file is part of PolarSSL (http://www.polarssl.org)
|
||
|
* Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>
|
||
|
*
|
||
|
* All rights reserved.
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU General Public License as published by
|
||
|
* the Free Software Foundation; either version 2 of the License, or
|
||
|
* (at your option) any later version.
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General Public License along
|
||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* References:
|
||
|
*
|
||
|
* SEC1 http://www.secg.org/index.php?action=secg,docs_secg
|
||
|
* GECC = Guide to Elliptic Curve Cryptography - Hankerson, Menezes, Vanstone
|
||
|
* FIPS 186-3 http://csrc.nist.gov/publications/fips/fips186-3/fips_186-3.pdf
|
||
|
* RFC 4492 for the related TLS structures and constants
|
||
|
*
|
||
|
* [M255] http://cr.yp.to/ecdh/curve25519-20060209.pdf
|
||
|
*
|
||
|
* [2] CORON, Jean-Sébastien. Resistance against differential power analysis
|
||
|
* for elliptic curve cryptosystems. In : Cryptographic Hardware and
|
||
|
* Embedded Systems. Springer Berlin Heidelberg, 1999. p. 292-302.
|
||
|
* <http://link.springer.com/chapter/10.1007/3-540-48059-5_25>
|
||
|
*
|
||
|
* [3] HEDABOU, Mustapha, PINEL, Pierre, et BÉNÉTEAU, Lucien. A comb method to
|
||
|
* render ECC resistant against Side Channel Attacks. IACR Cryptology
|
||
|
* ePrint Archive, 2004, vol. 2004, p. 342.
|
||
|
* <http://eprint.iacr.org/2004/342.pdf>
|
||
|
*/
|
||
|
|
||
|
#if !defined(POLARSSL_CONFIG_FILE)
|
||
|
#include "polarssl/config.h"
|
||
|
#else
|
||
|
#include POLARSSL_CONFIG_FILE
|
||
|
#endif
|
||
|
|
||
|
#if defined(POLARSSL_ECP_C)
|
||
|
|
||
|
#include "polarssl/ecp.h"
|
||
|
|
||
|
#if defined(POLARSSL_PLATFORM_C)
|
||
|
#include "polarssl/platform.h"
|
||
|
#else
|
||
|
#define polarssl_printf printf
|
||
|
#define polarssl_malloc malloc
|
||
|
#define polarssl_free free
|
||
|
#endif
|
||
|
|
||
|
#include <stdlib.h>
|
||
|
|
||
|
#if defined(_MSC_VER) && !defined strcasecmp && !defined(EFIX64) && \
|
||
|
!defined(EFI32)
|
||
|
#define strcasecmp _stricmp
|
||
|
#endif
|
||
|
|
||
|
#if defined(_MSC_VER) && !defined(inline)
|
||
|
#define inline _inline
|
||
|
#else
|
||
|
#if defined(__ARMCC_VERSION) && !defined(inline)
|
||
|
#define inline __inline
|
||
|
#endif /* __ARMCC_VERSION */
|
||
|
#endif /*_MSC_VER */
|
||
|
|
||
|
#define ECP_NB_CURVES 32
|
||
|
static ecp_group_id ecp_supported_grp_id[ECP_NB_CURVES];
|
||
|
|
||
|
/*
|
||
|
* List of supported curves, group ID only
|
||
|
*/
|
||
|
const ecp_group_id *ecp_grp_id_list( void )
|
||
|
{
|
||
|
static int init_done = 0;
|
||
|
|
||
|
if( ! init_done )
|
||
|
{
|
||
|
size_t i = 0;
|
||
|
const ecp_curve_info *curve_info;
|
||
|
|
||
|
for( curve_info = ecp_curve_list();
|
||
|
curve_info->grp_id != POLARSSL_ECP_DP_NONE;
|
||
|
curve_info++ )
|
||
|
{
|
||
|
ecp_supported_grp_id[i++] = curve_info->grp_id;
|
||
|
}
|
||
|
ecp_supported_grp_id[i] = POLARSSL_ECP_DP_NONE;
|
||
|
|
||
|
init_done = 1;
|
||
|
}
|
||
|
|
||
|
return( ecp_supported_grp_id );
|
||
|
}
|
||
|
|
||
|
#endif /* POLARSSL_ECP_C */
|