From a69d56cce4d0aff754154e782a4e76bdae291536 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se> Date: Thu, 7 Nov 2002 09:16:01 +0100 Subject: [PATCH] (nettle_mpz_set_sexp): New file, and new function. Moved from sexp2rsa.c:get_value. Rev: src/nettle/bignum.h:1.5 Rev: src/nettle/sexp2bignum.c:1.1 --- bignum.h | 6 ++++++ sexp2bignum.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 sexp2bignum.c diff --git a/bignum.h b/bignum.h index 95972f8b..f4c9ed07 100644 --- a/bignum.h +++ b/bignum.h @@ -60,4 +60,10 @@ nettle_mpz_random(mpz_t x, void *ctx, nettle_random_func random, const mpz_t n); +struct sexp_iterator; + +/* If LIMIT is non-zero, the number must be at most LIMIT bits. */ +int +nettle_mpz_set_sexp(mpz_t x, unsigned limit, const struct sexp_iterator *i); + #endif /* NETTLE_BIGNUM_H_INCLUDED */ diff --git a/sexp2bignum.c b/sexp2bignum.c new file mode 100644 index 00000000..e3c8d764 --- /dev/null +++ b/sexp2bignum.c @@ -0,0 +1,50 @@ +/* sexp2bignum.c + * + */ + +/* nettle, low-level cryptographics library + * + * Copyright (C) 2002 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., 59 Temple Place - Suite 330, Boston, + * MA 02111-1307, USA. + */ + +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#if HAVE_LIBGMP + +#include "sexp.h" +#include "bignum.h" + +int +nettle_mpz_set_sexp(mpz_t x, unsigned limit, const struct sexp_iterator *i) +{ + if (i->type == SEXP_ATOM + && !i->display) + { + if (limit && (8 * i->atom_length > limit)) + return 0; + + nettle_mpz_set_str_256(x, i->atom_length, i->atom); + return !limit || mpz_sizeinbase(x, 2) <= limit; + } + else + return 0; +} + +#endif /* HAVE_LIBGMP */ -- GitLab