Blob
1 #include "os.h"2 #include <mp.h>3 #include "dat.h"5 // convert an mpint into a little endian byte array (least significant byte first)7 // return number of bytes converted8 // if p == nil, allocate and result array9 int10 mptole(mpint *b, uchar *p, uint n, uchar **pp)11 {12 int i, j;13 mpdigit x;14 uchar *e, *s;16 if(p == nil){17 n = (b->top+1)*Dbytes;18 p = malloc(n);19 }20 if(pp != nil)21 *pp = p;22 if(p == nil)23 return -1;24 memset(p, 0, n);26 // special case 027 if(b->top == 0){28 if(n < 1)29 return -1;30 else31 return 0;32 }34 s = p;35 e = s+n;36 for(i = 0; i < b->top-1; i++){37 x = b->p[i];38 for(j = 0; j < Dbytes; j++){39 if(p >= e)40 return -1;41 *p++ = x;42 x >>= 8;43 }44 }45 x = b->p[i];46 while(x > 0){47 if(p >= e)48 return -1;49 *p++ = x;50 x >>= 8;51 }53 return p - s;54 }