diff --git a/bignum.h b/bignum.h
index 95972f8b23397d906e8daeba2c69d11c9237799f..f4c9ed07847ecc6848bcadc11fe63a24097a114e 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 0000000000000000000000000000000000000000..e3c8d7643ea8959e2bd956b31eb499ee1de2c378
--- /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 */