Line data Source code
1 : /* ecc-point-mul-g.c 2 : 3 : Copyright (C) 2013 Niels Möller 4 : 5 : This file is part of GNU Nettle. 6 : 7 : GNU Nettle is free software: you can redistribute it and/or 8 : modify it under the terms of either: 9 : 10 : * the GNU Lesser General Public License as published by the Free 11 : Software Foundation; either version 3 of the License, or (at your 12 : option) any later version. 13 : 14 : or 15 : 16 : * the GNU General Public License as published by the Free 17 : Software Foundation; either version 2 of the License, or (at your 18 : option) any later version. 19 : 20 : or both in parallel, as here. 21 : 22 : GNU Nettle is distributed in the hope that it will be useful, 23 : but WITHOUT ANY WARRANTY; without even the implied warranty of 24 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 25 : General Public License for more details. 26 : 27 : You should have received copies of the GNU General Public License and 28 : the GNU Lesser General Public License along with this program. If 29 : not, see http://www.gnu.org/licenses/. 30 : */ 31 : 32 : /* Development of Nettle's ECC support was funded by the .SE Internet Fund. */ 33 : 34 : #if HAVE_CONFIG_H 35 : # include "config.h" 36 : #endif 37 : 38 : #include <assert.h> 39 : 40 : #include <nettle/ecc.h> 41 : #include "ecc/ecc-internal.h" 42 : #include "ecc-gost-curve.h" 43 : 44 : void 45 622 : gost_point_mul_g (struct ecc_point *r, const struct ecc_scalar *n) 46 : { 47 622 : const struct ecc_curve *ecc = r->ecc; 48 622 : mp_limb_t size = ecc->p.size; 49 622 : mp_size_t itch = 3*size + ecc->mul_g_itch; 50 622 : mp_limb_t *scratch = gmp_alloc_limbs (itch); 51 : 52 622 : assert (n->ecc == ecc); 53 622 : assert (ecc->h_to_a_itch <= ecc->mul_g_itch); 54 : 55 622 : ecc->mul_g (ecc, scratch, n->p, scratch + 3*size); 56 622 : ecc->h_to_a (ecc, 0, r->p, scratch, scratch + 3*size); 57 622 : gmp_free_limbs (scratch, itch); 58 622 : }