Blame


1 b3f61791 2004-03-21 devnull #include "os.h"
2 b3f61791 2004-03-21 devnull #include <mp.h>
3 b3f61791 2004-03-21 devnull #include "dat.h"
4 b3f61791 2004-03-21 devnull
5 cbeb0b26 2006-04-01 devnull /* convert an mpint into a little endian byte array (least significant byte first) */
6 b3f61791 2004-03-21 devnull
7 cbeb0b26 2006-04-01 devnull /* return number of bytes converted */
8 cbeb0b26 2006-04-01 devnull /* if p == nil, allocate and result array */
9 b3f61791 2004-03-21 devnull int
10 b3f61791 2004-03-21 devnull mptole(mpint *b, uchar *p, uint n, uchar **pp)
11 b3f61791 2004-03-21 devnull {
12 b3f61791 2004-03-21 devnull int i, j;
13 b3f61791 2004-03-21 devnull mpdigit x;
14 b3f61791 2004-03-21 devnull uchar *e, *s;
15 b3f61791 2004-03-21 devnull
16 b3f61791 2004-03-21 devnull if(p == nil){
17 b3f61791 2004-03-21 devnull n = (b->top+1)*Dbytes;
18 b3f61791 2004-03-21 devnull p = malloc(n);
19 b3f61791 2004-03-21 devnull }
20 b3f61791 2004-03-21 devnull if(pp != nil)
21 b3f61791 2004-03-21 devnull *pp = p;
22 b3f61791 2004-03-21 devnull if(p == nil)
23 b3f61791 2004-03-21 devnull return -1;
24 b3f61791 2004-03-21 devnull memset(p, 0, n);
25 b3f61791 2004-03-21 devnull
26 cbeb0b26 2006-04-01 devnull /* special case 0 */
27 b3f61791 2004-03-21 devnull if(b->top == 0){
28 b3f61791 2004-03-21 devnull if(n < 1)
29 b3f61791 2004-03-21 devnull return -1;
30 b3f61791 2004-03-21 devnull else
31 b3f61791 2004-03-21 devnull return 0;
32 b3f61791 2004-03-21 devnull }
33 fa325e9b 2020-01-10 cross
34 b3f61791 2004-03-21 devnull s = p;
35 b3f61791 2004-03-21 devnull e = s+n;
36 b3f61791 2004-03-21 devnull for(i = 0; i < b->top-1; i++){
37 b3f61791 2004-03-21 devnull x = b->p[i];
38 b3f61791 2004-03-21 devnull for(j = 0; j < Dbytes; j++){
39 b3f61791 2004-03-21 devnull if(p >= e)
40 b3f61791 2004-03-21 devnull return -1;
41 b3f61791 2004-03-21 devnull *p++ = x;
42 b3f61791 2004-03-21 devnull x >>= 8;
43 b3f61791 2004-03-21 devnull }
44 b3f61791 2004-03-21 devnull }
45 b3f61791 2004-03-21 devnull x = b->p[i];
46 b3f61791 2004-03-21 devnull while(x > 0){
47 b3f61791 2004-03-21 devnull if(p >= e)
48 b3f61791 2004-03-21 devnull return -1;
49 b3f61791 2004-03-21 devnull *p++ = x;
50 b3f61791 2004-03-21 devnull x >>= 8;
51 b3f61791 2004-03-21 devnull }
52 b3f61791 2004-03-21 devnull
53 b3f61791 2004-03-21 devnull return p - s;
54 b3f61791 2004-03-21 devnull }