1 /*
 2  *  bignum_rnd.c
 3  *  BigMath
 4  *
 5  *  Created by Curtis Jones on 2007.08.05.
 6  *  Copyright 2007 __MyCompanyName__. All rights reserved.
 7  *
 8  */
 9 
10 #include "bignum.h"
11 
12 /**
13  * Sets num to a random value that is of the order of size. Returns a reference
14  * to num.
15  *
16  */
17 bignum_t *
18 bignum_rnd_mag (bignum_t *num, u_int64_t size)
19 {
20   u_int64_t i = 0;
21   
22   for (; i < size; ++i)
23     __bignum_set(num, i, random());
24   
25   num->oofm = size;
26   
27   return num;
28 }
29 
30 /**
31  * Sets num to a random value that is less than max but usually of the same
32  * magnitude as max. Returns a reference to num.
33  *
34  */
35 bignum_t *
36 bignum_rnd_max (bignum_t *num, bignum_t *max)
37 {
38   u_int64_t i = 0;
39   
40   __bignum_trim( max );
41   
42   if (0 != max->oofm) {
43     for (; i < max->oofm; ++i) {
44       __bignum_set(num, i, random());     
45       if (num->numb[i] != 0)
46         num->oofm = i + 1;
47     }
48     
49     __bignum_set(num, i-1, random() % max->numb[i-1]);
50     
51     if (num->numb[0] != 0)
52       num->oofm = BIGNUM_MAX(num->oofm, 1);
53   }
54   
55   return num;
56 }


syntax highlighted by Code2HTML, v. 0.9.1