]> git.ipfire.org Git - thirdparty/nettle.git/commitdiff
(nettle_mpz_set_sexp): New file, and new function.
authorNiels Möller <nisse@lysator.liu.se>
Thu, 7 Nov 2002 08:16:01 +0000 (09:16 +0100)
committerNiels Möller <nisse@lysator.liu.se>
Thu, 7 Nov 2002 08:16:01 +0000 (09:16 +0100)
Moved from sexp2rsa.c:get_value.

Rev: src/nettle/bignum.h:1.5
Rev: src/nettle/sexp2bignum.c:1.1

bignum.h
sexp2bignum.c [new file with mode: 0644]

index 95972f8b23397d906e8daeba2c69d11c9237799f..f4c9ed07847ecc6848bcadc11fe63a24097a114e 100644 (file)
--- 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 (file)
index 0000000..e3c8d76
--- /dev/null
@@ -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 */