From 2d796c6e6807f27d5c1b49dbeb49deaa77c98b86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se> Date: Wed, 3 Apr 2013 13:53:13 +0200 Subject: [PATCH] Implemented ecc_point_mul and ecc_point_mul_g. --- ChangeLog | 6 ++++++ Makefile.in | 2 +- ecc-point-mul-g.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++ ecc-point-mul.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++ ecc.h | 6 ++++++ 5 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 ecc-point-mul-g.c create mode 100644 ecc-point-mul.c diff --git a/ChangeLog b/ChangeLog index c84327b1..6f964756 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2013-04-03 Niels Möller <nisse@lysator.liu.se> + * ecc-point-mul-g.c (ecc_point_mul_g): New file and function. + * ecc-point-mul.c (ecc_point_mul): New file and function. + * ecc.h: Updated declarations and name mangling. + * Makefile.in (hogweed_SOURCES): Added ecc-point-mul.c and + ecc-point-mul-g.c. + * testsuite/salsa20-test.c (test_main): Tests for salsa20r12, contributed by Nikos Mavrogiannopoulos. diff --git a/Makefile.in b/Makefile.in index 424ab34d..0242f270 100644 --- a/Makefile.in +++ b/Makefile.in @@ -133,7 +133,7 @@ hogweed_SOURCES = sexp.c sexp-format.c \ ecc-size.c ecc-j-to-a.c ecc-a-to-j.c \ ecc-dup-jj.c ecc-add-jja.c ecc-add-jjj.c \ ecc-mul-g.c ecc-mul-a.c ecc-hash.c ecc-random.c \ - ecc-point.c ecc-scalar.c \ + ecc-point.c ecc-scalar.c ecc-point-mul.c ecc-point-mul-g.c \ ecc-ecdsa-sign.c ecdsa-sign.c \ ecc-ecdsa-verify.c ecdsa-verify.c ecdsa-keygen.c diff --git a/ecc-point-mul-g.c b/ecc-point-mul-g.c new file mode 100644 index 00000000..aa9d6a92 --- /dev/null +++ b/ecc-point-mul-g.c @@ -0,0 +1,49 @@ +/* ecc-point-mul-g.c */ + +/* nettle, low-level cryptographics library + * + * Copyright (C) 2013 Niels Möller + * + * The nettle library is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or (at your + * option) any later version. + * + * The nettle library 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 Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the nettle library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02111-1301, USA. + */ + +/* Development of Nettle's ECC support was funded by Internetfonden. */ + +#if HAVE_CONFIG_H +# include "config.h" +#endif + +#include <assert.h> + +#include "ecc.h" +#include "ecc-internal.h" +#include "gmp-glue.h" +#include "nettle-internal.h" + +void +ecc_point_mul_g (struct ecc_point *r, const struct ecc_scalar *n) +{ + TMP_DECL(scratch, mp_limb_t, 3*ECC_MAX_SIZE + ECC_MUL_G_ITCH (ECC_MAX_SIZE)); + mp_limb_t size = r->ecc->size; + mp_size_t itch = 3*size + ECC_MUL_G_ITCH (size); + + assert (r->ecc == n->ecc); + + TMP_ALLOC (scratch, itch); + + ecc_mul_g (r->ecc, scratch, n->p, scratch + 3*size); + ecc_j_to_a (r->ecc, 1, r->p, scratch, scratch + 3*size); +} diff --git a/ecc-point-mul.c b/ecc-point-mul.c new file mode 100644 index 00000000..5ddc5685 --- /dev/null +++ b/ecc-point-mul.c @@ -0,0 +1,49 @@ +/* ecc-point-mul.c */ + +/* nettle, low-level cryptographics library + * + * Copyright (C) 2013 Niels Möller + * + * The nettle library is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or (at your + * option) any later version. + * + * The nettle library 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 Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the nettle library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02111-1301, USA. + */ + +/* Development of Nettle's ECC support was funded by Internetfonden. */ + +#if HAVE_CONFIG_H +# include "config.h" +#endif + +#include <assert.h> + +#include "ecc.h" +#include "ecc-internal.h" +#include "gmp-glue.h" + +void +ecc_point_mul (struct ecc_point *r, const struct ecc_scalar *n, + const struct ecc_point *p) +{ + mp_limb_t size = p->ecc->size; + mp_size_t itch = 3*size + ECC_MUL_A_ITCH (size); + mp_limb_t *scratch = gmp_alloc_limbs (itch); + + assert (n->ecc == p->ecc); + assert (r->ecc == p->ecc); + + ecc_mul_a (p->ecc, 1, scratch, n->p, p->p, scratch + 3*size); + ecc_j_to_a (r->ecc, 1, r->p, scratch, scratch + 3*size); + gmp_free_limbs (scratch, itch); +} diff --git a/ecc.h b/ecc.h index af6c23d6..b78e86d8 100644 --- a/ecc.h +++ b/ecc.h @@ -38,6 +38,8 @@ extern "C" { #define ecc_point_clear nettle_ecc_point_clear #define ecc_point_set nettle_ecc_point_set #define ecc_point_get nettle_ecc_point_get +#define ecc_point_mul nettle_ecc_point_mul +#define ecc_point_mul_g nettle_ecc_point_mul_g #define ecc_scalar_init nettle_ecc_scalar_init #define ecc_scalar_clear nettle_ecc_scalar_clear #define ecc_scalar_set nettle_ecc_scalar_set @@ -118,6 +120,10 @@ void ecc_point_mul (struct ecc_point *r, const struct ecc_scalar *n, const struct ecc_point *p); +/* Computes r = n g */ +void +ecc_point_mul_g (struct ecc_point *r, const struct ecc_scalar *n); + /* Low-level interface */ -- GitLab