From: Niels Möller Date: Thu, 7 Nov 2002 08:16:01 +0000 (+0100) Subject: (nettle_mpz_set_sexp): New file, and new function. X-Git-Tag: nettle_1.7_release_20030311~165 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a69d56cce4d0aff754154e782a4e76bdae291536;p=thirdparty%2Fnettle.git (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 --- 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 */