#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;
}
