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