ARM Shanghai IoT Team (Internal) / newMiniTLS-GPL

Fork of MiniTLS-GPL by Donatien Garnier

Committer:
MiniTLS
Date:
Mon Jun 09 14:57:54 2014 +0000
Revision:
2:527a66d0a1a9
Change name to MiniTLS and added doc

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MiniTLS 2:527a66d0a1a9 1 /*
MiniTLS 2:527a66d0a1a9 2 MiniTLS - A super trimmed down TLS/SSL Library for embedded devices
MiniTLS 2:527a66d0a1a9 3 Author: Donatien Garnier
MiniTLS 2:527a66d0a1a9 4 Copyright (C) 2013-2014 AppNearMe Ltd
MiniTLS 2:527a66d0a1a9 5
MiniTLS 2:527a66d0a1a9 6 This program is free software; you can redistribute it and/or
MiniTLS 2:527a66d0a1a9 7 modify it under the terms of the GNU General Public License
MiniTLS 2:527a66d0a1a9 8 as published by the Free Software Foundation; either version 2
MiniTLS 2:527a66d0a1a9 9 of the License, or (at your option) any later version.
MiniTLS 2:527a66d0a1a9 10
MiniTLS 2:527a66d0a1a9 11 This program is distributed in the hope that it will be useful,
MiniTLS 2:527a66d0a1a9 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
MiniTLS 2:527a66d0a1a9 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
MiniTLS 2:527a66d0a1a9 14 GNU General Public License for more details.
MiniTLS 2:527a66d0a1a9 15
MiniTLS 2:527a66d0a1a9 16 You should have received a copy of the GNU General Public License
MiniTLS 2:527a66d0a1a9 17 along with this program; if not, write to the Free Software
MiniTLS 2:527a66d0a1a9 18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
MiniTLS 2:527a66d0a1a9 19 *//* LibTomCrypt, modular cryptographic library -- Tom St Denis
MiniTLS 2:527a66d0a1a9 20 *
MiniTLS 2:527a66d0a1a9 21 * LibTomCrypt is a library that provides various cryptographic
MiniTLS 2:527a66d0a1a9 22 * algorithms in a highly modular and flexible manner.
MiniTLS 2:527a66d0a1a9 23 *
MiniTLS 2:527a66d0a1a9 24 * The library is free for all purposes without any express
MiniTLS 2:527a66d0a1a9 25 * guarantee it works.
MiniTLS 2:527a66d0a1a9 26 *
MiniTLS 2:527a66d0a1a9 27 * Tom St Denis, tomstdenis@gmail.com, http://libtom.org
MiniTLS 2:527a66d0a1a9 28 */
MiniTLS 2:527a66d0a1a9 29
MiniTLS 2:527a66d0a1a9 30 /* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b
MiniTLS 2:527a66d0a1a9 31 *
MiniTLS 2:527a66d0a1a9 32 * All curves taken from NIST recommendation paper of July 1999
MiniTLS 2:527a66d0a1a9 33 * Available at http://csrc.nist.gov/cryptval/dss.htm
MiniTLS 2:527a66d0a1a9 34 */
MiniTLS 2:527a66d0a1a9 35 #include "ltc.h"
MiniTLS 2:527a66d0a1a9 36
MiniTLS 2:527a66d0a1a9 37 /**
MiniTLS 2:527a66d0a1a9 38 @file ltc_ecc_map.c
MiniTLS 2:527a66d0a1a9 39 ECC Crypto, Tom St Denis
MiniTLS 2:527a66d0a1a9 40 */
MiniTLS 2:527a66d0a1a9 41
MiniTLS 2:527a66d0a1a9 42 #ifdef LTC_MECC
MiniTLS 2:527a66d0a1a9 43
MiniTLS 2:527a66d0a1a9 44 /**
MiniTLS 2:527a66d0a1a9 45 Map a projective jacbobian point back to affine space
MiniTLS 2:527a66d0a1a9 46 @param P [in/out] The point to map
MiniTLS 2:527a66d0a1a9 47 @param modulus The modulus of the field the ECC curve is in
MiniTLS 2:527a66d0a1a9 48 @param mp The "b" value from montgomery_setup()
MiniTLS 2:527a66d0a1a9 49 @return MINITLS_OK on success
MiniTLS 2:527a66d0a1a9 50 */
MiniTLS 2:527a66d0a1a9 51 int ltc_ecc_map(ecc_point *P, void *modulus, void *mp)
MiniTLS 2:527a66d0a1a9 52 {
MiniTLS 2:527a66d0a1a9 53 fp_int t1, t2;
MiniTLS 2:527a66d0a1a9 54 int err;
MiniTLS 2:527a66d0a1a9 55
MiniTLS 2:527a66d0a1a9 56 LTC_ARGCHK(P != NULL);
MiniTLS 2:527a66d0a1a9 57 LTC_ARGCHK(modulus != NULL);
MiniTLS 2:527a66d0a1a9 58 LTC_ARGCHK(mp != NULL);
MiniTLS 2:527a66d0a1a9 59
MiniTLS 2:527a66d0a1a9 60 if ((err = mp_init_multi(&t1, &t2, NULL)) != MINITLS_OK) {
MiniTLS 2:527a66d0a1a9 61 return MINITLS_ERR_MEMORY;
MiniTLS 2:527a66d0a1a9 62 }
MiniTLS 2:527a66d0a1a9 63
MiniTLS 2:527a66d0a1a9 64 /* first map z back to normal */
MiniTLS 2:527a66d0a1a9 65 /*if ((err = */mp_montgomery_reduce(&P->z, modulus, mp);/*) != MINITLS_OK) { goto done; }*/
MiniTLS 2:527a66d0a1a9 66
MiniTLS 2:527a66d0a1a9 67 /* get 1/z */
MiniTLS 2:527a66d0a1a9 68 if ((err = mp_invmod(&P->z, modulus, &t1)) != MINITLS_OK) { goto done; }
MiniTLS 2:527a66d0a1a9 69
MiniTLS 2:527a66d0a1a9 70 /* get 1/z^2 and 1/z^3 */
MiniTLS 2:527a66d0a1a9 71 /*if ((err = */mp_sqr(&t1, &t2);/*) != MINITLS_OK) { goto done; }*/
MiniTLS 2:527a66d0a1a9 72 if ((err = mp_mod(&t2, modulus, &t2)) != MINITLS_OK) { goto done; }
MiniTLS 2:527a66d0a1a9 73 /*if ((err =*/ mp_mul(&t1, &t2, &t1);/*) != MINITLS_OK) { goto done; }*/
MiniTLS 2:527a66d0a1a9 74 /*if ((err =*/ mp_mod(&t1, modulus, &t1);/*) != MINITLS_OK) { goto done; }*/
MiniTLS 2:527a66d0a1a9 75
MiniTLS 2:527a66d0a1a9 76 /* multiply against x/y */
MiniTLS 2:527a66d0a1a9 77 /*if ((err =*/ mp_mul(&P->x, &t2, &P->x);/*) != MINITLS_OK) { goto done; }*/
MiniTLS 2:527a66d0a1a9 78 /*if ((err =*/ mp_montgomery_reduce(&P->x, modulus, mp);/*) != MINITLS_OK) { goto done; }*/
MiniTLS 2:527a66d0a1a9 79 /*if ((err =*/ mp_mul(&P->y, &t1, &P->y);/*) != MINITLS_OK) { goto done; }*/
MiniTLS 2:527a66d0a1a9 80 /*if ((err =*/ mp_montgomery_reduce(&P->y, modulus, mp);/*) != MINITLS_OK) { goto done; }*/
MiniTLS 2:527a66d0a1a9 81 /*if ((err =*/ mp_set(&P->z, 1);/*) != MINITLS_OK) { goto done; }*/
MiniTLS 2:527a66d0a1a9 82
MiniTLS 2:527a66d0a1a9 83 err = MINITLS_OK;
MiniTLS 2:527a66d0a1a9 84 done:
MiniTLS 2:527a66d0a1a9 85 mp_clear_multi(&t1, &t2, NULL);
MiniTLS 2:527a66d0a1a9 86 return err;
MiniTLS 2:527a66d0a1a9 87 }
MiniTLS 2:527a66d0a1a9 88
MiniTLS 2:527a66d0a1a9 89 #endif
MiniTLS 2:527a66d0a1a9 90
MiniTLS 2:527a66d0a1a9 91 /* $Source: /cvs/libtom/libtomcrypt/src/pk/ecc/ltc_ecc_map.c,v $ */
MiniTLS 2:527a66d0a1a9 92 /* $Revision: 1.7 $ */
MiniTLS 2:527a66d0a1a9 93 /* $Date: 2007/05/12 14:32:35 $ */
MiniTLS 2:527a66d0a1a9 94