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