+ ok = !hb[j];
+done:
+ *outlen = i;
+ return ok;
+}
+
+/* Convert a buffer into its MP_INT representation */
+void read_mpbin(MP_INT *a, uint8_t *bin, int binsize)
+{
+ char *buff = hex_encode(bin, binsize);
+ mpz_set_str(a, buff, 16);
+ free(buff);
+}
+
+/* Convert a MP_INT into a hex string */
+char *write_mpstring(MP_INT *a)
+{
+ char *buff;
+
+ buff=safe_malloc(mpz_sizeinbase(a,16)+2,"write_mpstring");
+ mpz_get_str(buff, 16, a);
+ return buff;
+}
+
+/* Convert a MP_INT into a buffer; return length; truncate if necessary */
+int32_t write_mpbin(MP_INT *a, uint8_t *buffer, int32_t buflen)
+{
+ char *hb = write_mpstring(a);
+ int32_t len;
+ hex_decode(buffer, buflen, &len, hb, True);