#include "os.h"
#include <mp.h>
#include "dat.h"

/* convert an mpint into a big endian byte array (most significant byte first) */
/*   return number of bytes converted */
/*   if p == nil, allocate and result array */
int
mptobe(mpint *b, uchar *p, uint n, uchar **pp)
{
	int i, j, suppress;
	mpdigit x;
	uchar *e, *s, c;

	if(p == nil){
		n = (b->top+1)*Dbytes;
		p = malloc(n);
	}
	if(p == nil)
		return -1;
	if(pp != nil)
		*pp = p;
	memset(p, 0, n);

	/* special case 0 */
	if(b->top == 0){
		if(n < 1)
			return -1;
		else
			return 1;
	}
		
	s = p;
	e = s+n;
	suppress = 1;
	for(i = b->top-1; i >= 0; i--){
		x = b->p[i];
		for(j = Dbits-8; j >= 0; j -= 8){
			c = x>>j;
			if(c == 0 && suppress)
				continue;
			if(p >= e)
				return -1;
			*p++ = c;
			suppress = 0;
		}
	}

	/* guarantee at least one byte */
	if(s == p){
		if(p >= e)
			return -1;
		*p++ = 0;
	}

	return p - s;
}
